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.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.stream.Collectors;
@ -55,7 +56,8 @@ public class BukkitEventListener extends EventListener implements Listener {
final OnlineUser user = BukkitPlayer.adapt(player);
if (plugin.getDataEditor().isEditingInventoryData(user)) {
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)));
} catch (DataSerializationException e) {
plugin.getLoggingAdapter().log(Level.SEVERE,

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

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

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

@ -258,6 +258,11 @@ public abstract class OnlineUser extends User {
*/
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}
*

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

Loading…
Cancel
Save