diff --git a/openinv-2.3.6.jar b/openinv-2.3.6.jar new file mode 100644 index 0000000..e1bef89 Binary files /dev/null and b/openinv-2.3.6.jar differ diff --git a/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java b/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java index 4c37370..cf0e9f3 100644 --- a/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java +++ b/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java @@ -51,7 +51,6 @@ public class SpecialEnderChest extends InventorySubcontainer { private void saveOnExit() { if (transaction.isEmpty() && !playerOnline) { owner.saveData(); - OpenInv.enderChests.remove(owner.getUniqueId()); } } @@ -82,6 +81,7 @@ public class SpecialEnderChest extends InventorySubcontainer { public void onClose(CraftHumanEntity who) { super.onClose(who); saveOnExit(); + OpenInv.enderChests.remove(owner.getUniqueId()); } @Override diff --git a/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java b/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java index 528a789..6a5612a 100644 --- a/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java +++ b/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java @@ -33,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory { private final CraftInventory inventory = new CraftInventory(this); private final ItemStack[] extra = new ItemStack[4]; - private final ItemStack[][] arrays; + private ItemStack[][] arrays; private final CraftPlayer owner; private boolean playerOnline; @@ -41,7 +41,6 @@ public class SpecialPlayerInventory extends PlayerInventory { super(((CraftPlayer) p).getHandle()); this.owner = (CraftPlayer) p; reflectContents(getClass().getSuperclass(), player.inventory, this); - this.arrays = new ItemStack[][] { this.items, this.armor, this.extraSlots, this.extra }; this.playerOnline = online; OpenInv.inventories.put(owner.getUniqueId(), this); } @@ -68,6 +67,7 @@ public class SpecialPlayerInventory extends PlayerInventory { } catch (IllegalAccessException e) { e.printStackTrace(); } + arrays = new ItemStack[][] { this.items, this.armor, this.extraSlots, this.extra }; } public Inventory getBukkitInventory() { @@ -77,7 +77,6 @@ public class SpecialPlayerInventory extends PlayerInventory { private void saveOnExit() { if (transaction.isEmpty() && !playerOnline) { owner.saveData(); - OpenInv.inventories.remove(owner.getUniqueId()); } } @@ -105,6 +104,7 @@ public class SpecialPlayerInventory extends PlayerInventory { public void onClose(CraftHumanEntity who) { super.onClose(who); this.saveOnExit(); + OpenInv.inventories.remove(owner.getUniqueId()); } @Override diff --git a/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java b/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java index 579d93d..ef29cba 100644 --- a/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java +++ b/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java @@ -30,6 +30,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.scheduler.BukkitRunnable; import com.lishid.openinv.OpenInv; import com.lishid.openinv.Permissions; @@ -40,7 +41,7 @@ public class OpenInvPlayerListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - + SpecialPlayerInventory inventory = OpenInv.inventories.get(player.getUniqueId()); if (inventory != null) { inventory.playerOnline(event.getPlayer()); @@ -52,18 +53,28 @@ public class OpenInvPlayerListener implements Listener { } } - @EventHandler(priority = EventPriority.MONITOR) + @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); - SpecialPlayerInventory inventory = OpenInv.inventories.get(player.getUniqueId()); + final SpecialPlayerInventory inventory = OpenInv.inventories.get(player.getUniqueId()); if (inventory != null) { - inventory.playerOffline(); + new BukkitRunnable() { + @Override + public void run() { + inventory.playerOffline(); + } + }.runTaskLater(OpenInv.mainPlugin, 1); } - SpecialEnderChest chest = OpenInv.enderChests.get(player.getUniqueId()); + final SpecialEnderChest chest = OpenInv.enderChests.get(player.getUniqueId()); if (chest != null) { - chest.playerOffline(); + new BukkitRunnable() { + @Override + public void run() { + chest.playerOffline(); + } + }.runTaskLater(OpenInv.mainPlugin, 1); } }