|
5 | 5 | import org.bukkit.block.Chest; |
6 | 6 | import org.bukkit.entity.Player; |
7 | 7 | import org.bukkit.event.EventHandler; |
| 8 | +import org.bukkit.event.EventPriority; |
8 | 9 | import org.bukkit.event.Listener; |
9 | 10 | import org.bukkit.event.inventory.ClickType; |
10 | 11 | import org.bukkit.event.inventory.InventoryClickEvent; |
| 12 | +import org.bukkit.event.inventory.InventoryCloseEvent; |
11 | 13 | import org.bukkit.event.inventory.InventoryDragEvent; |
| 14 | +import org.bukkit.event.inventory.InventoryMoveItemEvent; |
12 | 15 | import org.bukkit.inventory.Inventory; |
13 | 16 | import org.bukkit.inventory.ItemStack; |
14 | 17 | import org.bukkit.persistence.PersistentDataContainer; |
@@ -152,6 +155,32 @@ public void onInventoryClick(final @NotNull InventoryDragEvent event) { |
152 | 155 | event.setCancelled(true); |
153 | 156 | } |
154 | 157 |
|
| 158 | + /** |
| 159 | + * Detect changes in items of POS chest while a POS GUI is opened and prevent the item change. |
| 160 | + * POS items can still be modified if no POS GUI is opened for that POS. |
| 161 | + */ |
| 162 | + @EventHandler(priority = EventPriority.HIGHEST) |
| 163 | + public void posItemsChangeWhileOpened(final @NotNull InventoryMoveItemEvent event) { |
| 164 | + final @NotNull Inventory inventory = event.getSource(); |
| 165 | + for (final @NotNull POS pos : POS.activePosChestGuis.values()) { |
| 166 | + final @Nullable Chest chest = pos.getChest(); |
| 167 | + if (chest == null) continue; |
| 168 | + if (inventory.equals(chest.getInventory())) { |
| 169 | + event.setCancelled(true); |
| 170 | + return; |
| 171 | + } |
| 172 | + } |
| 173 | + } |
| 174 | + |
| 175 | + /** |
| 176 | + * POS GUI closed |
| 177 | + */ |
| 178 | + @EventHandler |
| 179 | + public void posGuiClosed(final @NotNull InventoryCloseEvent event) { |
| 180 | + if (!POS.activePosChestGuis.containsKey(event.getInventory())) return; |
| 181 | + POS.activePosChestGuis.remove(event.getInventory()); |
| 182 | + } |
| 183 | + |
155 | 184 | public final static @NotNull HashMap<@NotNull String, @NotNull NamespacedKey[]> keys = new HashMap<>() {{ |
156 | 185 | put("pos-owner", new NamespacedKey[]{BankAccounts.Key.POS_OWNER_GUI}); |
157 | 186 | put("pos-buyer", new NamespacedKey[]{BankAccounts.Key.POS_BUYER_GUI_CONFIRM, BankAccounts.Key.POS_BUYER_GUI, BankAccounts.Key.POS_BUYER_GUI_CANCEL}); |
|
0 commit comments