diff --git a/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java b/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java index 75a3d21a..4316e41b 100644 --- a/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java +++ b/API/src/main/java/fr/maxlego08/menu/api/players/inventory/InventoriesPlayer.java @@ -54,4 +54,6 @@ public interface InventoriesPlayer extends Listener { void loadInventories(); + void restoreAllInventories(); + } diff --git a/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java b/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java index df07ee59..33e5a65a 100644 --- a/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java +++ b/src/main/java/fr/maxlego08/menu/ZMenuPlugin.java @@ -397,9 +397,13 @@ private List getInventoriesFiles() { @Override public void onDisable() { + if (this.packetUtils != null) + this.packetUtils.onDisable(); + this.preDisable(); if (this.vinventoryManager != null) this.vinventoryManager.close(); + this.inventoriesPlayer.restoreAllInventories(); Configuration.getInstance().save(getConfig(), this.configFile); @@ -411,9 +415,6 @@ public void onDisable() { this.itemManager.unloadListeners(); - if (this.packetUtils != null) - this.packetUtils.onDisable(); - getServer().getServicesManager().unregisterAll(this); this.postDisable(); diff --git a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java index 1427caa8..11c34f85 100644 --- a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java +++ b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoriesPlayer.java @@ -4,6 +4,7 @@ import fr.maxlego08.menu.api.players.inventory.InventoriesPlayer; import fr.maxlego08.menu.api.players.inventory.InventoryPlayer; import fr.maxlego08.menu.api.storage.dto.InventoryDTO; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerJoinEvent; @@ -121,4 +122,15 @@ public void loadInventories() { } this.inventories.putAll(loadedInventories); } + + @Override + public void restoreAllInventories() { + new HashMap<>(inventories).forEach((uuid, inventoryPlayer) -> { + Player player = Bukkit.getPlayer(uuid); + if (player != null && player.isOnline()) { + inventoryPlayer.forceGiveInventory(player); + } + inventories.remove(uuid); + }); + } } diff --git a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java index c7a3f6d2..2b8e7a14 100644 --- a/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java +++ b/src/main/java/fr/maxlego08/menu/players/inventory/ZInventoryPlayer.java @@ -55,8 +55,11 @@ public void forceGiveInventory(@NonNull Player player) { for (int slot = 0; slot <= MAX_INVENTORY_SIZE; slot++) { if (items.containsKey(slot)) { playerInventory.setItem(slot, ItemStackUtils.deserializeItemStack(items.get(slot))); - } else if (this.plugin.getDupeManager().isDupeItem(playerInventory.getItem(slot))) { - playerInventory.setItem(slot, null); + } else { + ItemStack itemStack = playerInventory.getItem(slot); + if (itemStack != null && this.plugin.getDupeManager().isDupeItem(itemStack)) { + playerInventory.setItem(slot, null); + } } } }