diff --git a/pom.xml b/pom.xml index 2e03de1..0fddd2f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.unixminecraft.mcinventory.bukkit MCInventory-Bukkit jar - 0.0.1 + 0.0.2 MCInventory-Bukkit http://maven.apache.org diff --git a/src/main/java/org/unixminecraft/mcinventory/bukkit/MCInventory.java b/src/main/java/org/unixminecraft/mcinventory/bukkit/MCInventory.java index ed09a9c..189fd93 100644 --- a/src/main/java/org/unixminecraft/mcinventory/bukkit/MCInventory.java +++ b/src/main/java/org/unixminecraft/mcinventory/bukkit/MCInventory.java @@ -52,6 +52,7 @@ public final class MCInventory extends JavaPlugin implements Listener { private HashSet preSelectedPlayers; private ConcurrentHashMap selectedVillager; + private ConcurrentHashMap villagerInventories; private ConcurrentHashMap openedVillagerInventories; @Override @@ -63,6 +64,7 @@ public void onEnable() { preSelectedPlayers = new HashSet(); selectedVillager = new ConcurrentHashMap(); + villagerInventories = new ConcurrentHashMap(); openedVillagerInventories = new ConcurrentHashMap(); getServer().getPluginManager().registerEvents(this, this); @@ -192,7 +194,17 @@ else if(parameters[0].equalsIgnoreCase("open")) { return true; } - final VillagerInventory villagerInventory = new VillagerInventory(selectedVillager.get(playerId)); + final Villager villager = selectedVillager.get(playerId); + final VillagerInventory villagerInventory; + + if(!villagerInventories.containsKey(villager)) { + villagerInventory = new VillagerInventory(villager); + villagerInventories.put(villager, villagerInventory); + } + else { + villagerInventory = villagerInventories.get(villager); + } + villagerInventory.openInventory(player); openedVillagerInventories.put(playerId, villagerInventory); @@ -303,8 +315,12 @@ public void onInventoryClose(final InventoryCloseEvent event) { if(!openedVillagerInventories.containsKey(playerId)) { return; } + + if(openedVillagerInventories.get(playerId).closeInventory()) { + villagerInventories.remove(selectedVillager.get(playerId)); + } - openedVillagerInventories.get(playerId).closeInventory(player); + openedVillagerInventories.remove(playerId); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/org/unixminecraft/mcinventory/bukkit/VillagerInventory.java b/src/main/java/org/unixminecraft/mcinventory/bukkit/VillagerInventory.java index 4568735..7e196ab 100644 --- a/src/main/java/org/unixminecraft/mcinventory/bukkit/VillagerInventory.java +++ b/src/main/java/org/unixminecraft/mcinventory/bukkit/VillagerInventory.java @@ -42,11 +42,17 @@ InventoryView openInventory(final Player player) { return player.openInventory(villagerInventory); } - void closeInventory(final Player player) { + boolean closeInventory() { + + if(!villagerInventory.getViewers().isEmpty()) { + return false; + } final Inventory inventory = villager.getInventory(); for(int index = 0; index < inventory.getSize(); index++) { inventory.setItem(index, villagerInventory.getItem(index)); } + + return true; } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ddbc22e..87d2bf7 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: MCInventory main: org.unixminecraft.mcinventory.bukkit.MCInventory -version: 0.0.1 +version: 0.0.2 author: unixminecraft api-version: 1.15