Fix inventory and ender chest commands

feat/data-edit-commands
William 3 years ago
parent e5e848126a
commit bc9d31abc8

@ -23,6 +23,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.world.WorldSaveEvent; import org.bukkit.event.world.WorldSaveEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -55,7 +56,8 @@ public class BukkitEventListener extends EventListener implements Listener {
final OnlineUser user = BukkitPlayer.adapt(player); final OnlineUser user = BukkitPlayer.adapt(player);
if (plugin.getDataEditor().isEditingInventoryData(user)) { if (plugin.getDataEditor().isEditingInventoryData(user)) {
try { try {
BukkitSerializer.serializeItemStackArray(event.getInventory().getContents()).thenAccept( BukkitSerializer.serializeItemStackArray(Arrays.copyOf(event.getInventory().getContents(),
event.getPlayer().getInventory().getSize())).thenAccept(
serializedInventory -> super.handleMenuClose(user, new ItemData(serializedInventory))); serializedInventory -> super.handleMenuClose(user, new ItemData(serializedInventory)));
} catch (DataSerializationException e) { } catch (DataSerializationException e) {
plugin.getLoggingAdapter().log(Level.SEVERE, plugin.getLoggingAdapter().log(Level.SEVERE,

@ -452,12 +452,13 @@ public class BukkitPlayer extends OnlineUser {
final Inventory inventory = Bukkit.createInventory(player, menu.slotCount, final Inventory inventory = Bukkit.createInventory(player, menu.slotCount,
BaseComponent.toLegacyText(menu.menuTitle.toComponent())); BaseComponent.toLegacyText(menu.menuTitle.toComponent()));
inventory.setContents(inventoryContents); inventory.setContents(inventoryContents);
Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> { Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), () -> player.openInventory(inventory));
player.closeInventory();
player.openInventory(inventory);
});
}); });
}
@Override
public void closeOpenInventories() {
Bukkit.getScheduler().runTask(BukkitHuskSync.getInstance(), player::closeInventory);
} }
@Override @Override

@ -65,17 +65,18 @@ public class EnderChestCommand extends CommandBase implements TabCompletable {
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault()) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault())
.format(userDataSnapshot.versionTimestamp())) .format(userDataSnapshot.versionTimestamp()))
.ifPresent(player::sendMessage); .ifPresent(player::sendMessage);
final ItemData enderChestDataOnClose = plugin.getDataEditor().openItemEditorMenu(player, menu).join(); plugin.getDataEditor().openItemEditorMenu(player, menu).thenAccept(enderChestDataOnClose -> {
if (!menu.canEdit) { if (!menu.canEdit) {
return; return;
} }
final UserData updatedUserData = new UserData(data.getStatusData(), data.getInventoryData(), final UserData updatedUserData = new UserData(data.getStatusData(), data.getInventoryData(),
enderChestDataOnClose, data.getPotionEffectsData(), data.getAdvancementData(), enderChestDataOnClose, data.getPotionEffectsData(), data.getAdvancementData(),
data.getStatisticsData(), data.getLocationData(), data.getStatisticsData(), data.getLocationData(),
data.getPersistentDataContainerData(), data.getPersistentDataContainerData(),
plugin.getMinecraftVersion().toString()); plugin.getMinecraftVersion().toString());
plugin.getDatabase().setUserData(dataOwner, updatedUserData, DataSaveCause.ENDERCHEST_COMMAND).join(); plugin.getDatabase().setUserData(dataOwner, updatedUserData, DataSaveCause.ENDERCHEST_COMMAND).join();
plugin.getRedisManager().sendUserDataUpdate(dataOwner, updatedUserData).join(); plugin.getRedisManager().sendUserDataUpdate(dataOwner, updatedUserData).join();
});
}); });
} }

@ -65,17 +65,18 @@ public class InventoryCommand extends CommandBase implements TabCompletable {
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault()) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault())
.format(userDataSnapshot.versionTimestamp())) .format(userDataSnapshot.versionTimestamp()))
.ifPresent(player::sendMessage); .ifPresent(player::sendMessage);
final ItemData inventoryDataOnClose = plugin.getDataEditor().openItemEditorMenu(player, menu).join(); plugin.getDataEditor().openItemEditorMenu(player, menu).thenAccept(inventoryDataOnClose -> {
if (!menu.canEdit) { if (!menu.canEdit) {
return; return;
} }
final UserData updatedUserData = new UserData(data.getStatusData(), inventoryDataOnClose, final UserData updatedUserData = new UserData(data.getStatusData(), inventoryDataOnClose,
data.getEnderChestData(), data.getPotionEffectsData(), data.getAdvancementData(), data.getEnderChestData(), data.getPotionEffectsData(), data.getAdvancementData(),
data.getStatisticsData(), data.getLocationData(), data.getStatisticsData(), data.getLocationData(),
data.getPersistentDataContainerData(), data.getPersistentDataContainerData(),
plugin.getMinecraftVersion().toString()); plugin.getMinecraftVersion().toString());
plugin.getDatabase().setUserData(dataOwner, updatedUserData, DataSaveCause.INVENTORY_COMMAND).join(); plugin.getDatabase().setUserData(dataOwner, updatedUserData, DataSaveCause.INVENTORY_COMMAND).join();
plugin.getRedisManager().sendUserDataUpdate(dataOwner, updatedUserData).join(); plugin.getRedisManager().sendUserDataUpdate(dataOwner, updatedUserData).join();
});
}); });
} }

@ -42,6 +42,7 @@ public class DataEditor {
*/ */
public CompletableFuture<ItemData> openItemEditorMenu(@NotNull OnlineUser user, public CompletableFuture<ItemData> openItemEditorMenu(@NotNull OnlineUser user,
@NotNull ItemEditorMenu itemEditorMenu) { @NotNull ItemEditorMenu itemEditorMenu) {
//user.closeOpenInventories();
this.openInventoryMenus.put(user.uuid, itemEditorMenu); this.openInventoryMenus.put(user.uuid, itemEditorMenu);
return itemEditorMenu.showInventory(user); return itemEditorMenu.showInventory(user);
} }
@ -54,6 +55,7 @@ public class DataEditor {
*/ */
public void closeInventoryMenu(@NotNull OnlineUser user, @NotNull ItemData itemData) { public void closeInventoryMenu(@NotNull OnlineUser user, @NotNull ItemData itemData) {
if (this.openInventoryMenus.containsKey(user.uuid)) { if (this.openInventoryMenus.containsKey(user.uuid)) {
System.out.println("Closing inventory menu for " + user.uuid);
this.openInventoryMenus.get(user.uuid).closeInventory(itemData); this.openInventoryMenus.get(user.uuid).closeInventory(itemData);
} }
this.openInventoryMenus.remove(user.uuid); this.openInventoryMenus.remove(user.uuid);

@ -258,6 +258,11 @@ public abstract class OnlineUser extends User {
*/ */
public abstract void showMenu(@NotNull ItemEditorMenu menu); public abstract void showMenu(@NotNull ItemEditorMenu menu);
/**
* Close inventories the player currently has open
*/
public abstract void closeOpenInventories();
/** /**
* Get the player's current {@link UserData} * Get the player's current {@link UserData}
* *

@ -160,4 +160,9 @@ public class DummyPlayer extends OnlineUser {
// do nothing // do nothing
} }
@Override
public void closeOpenInventories() {
// do nothing
}
} }

Loading…
Cancel
Save