|
22 | 22 | import org.bukkit.event.inventory.InventoryCloseEvent;
|
23 | 23 | import org.bukkit.event.inventory.InventoryType;
|
24 | 24 | import org.bukkit.event.player.PlayerDropItemEvent;
|
| 25 | +import org.bukkit.event.player.PlayerSwapHandItemsEvent; |
25 | 26 | import org.bukkit.inventory.ItemStack;
|
26 | 27 | import org.bukkit.inventory.meta.ItemMeta;
|
27 | 28 |
|
|
50 | 51 | */
|
51 | 52 | public class BackpackListener implements Listener {
|
52 | 53 |
|
53 |
| - private final Map<UUID, ItemStack> backpacks = new HashMap<>(); |
| 54 | + private final Map<UUID, ItemStack> backpacks = new HashMap<>(); // UUID of players with backpack open |
54 | 55 |
|
55 | 56 | public void register(@Nonnull Slimefun plugin) {
|
56 | 57 | plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
@@ -88,41 +89,61 @@ public void onItemDrop(PlayerDropItemEvent e) {
|
88 | 89 | }
|
89 | 90 | }
|
90 | 91 |
|
| 92 | + @EventHandler |
| 93 | + public void onItemSwap(PlayerSwapHandItemsEvent e) { |
| 94 | + Player player = e.getPlayer(); |
| 95 | + if (!backpacks.containsKey(player.getUniqueId())) { |
| 96 | + return; |
| 97 | + } |
| 98 | + |
| 99 | + ItemStack item = player.getInventory().getItemInOffHand(); |
| 100 | + if (item == null || item.getType().isAir()) { |
| 101 | + return; |
| 102 | + } |
| 103 | + |
| 104 | + SlimefunItem backpack = SlimefunItem.getByItem(item); |
| 105 | + if (backpack instanceof SlimefunBackpack) { |
| 106 | + e.setCancelled(true); |
| 107 | + } |
| 108 | + } |
| 109 | + |
91 | 110 | @EventHandler(ignoreCancelled = true)
|
92 | 111 | public void onClick(InventoryClickEvent e) {
|
93 | 112 | ItemStack item = backpacks.get(e.getWhoClicked().getUniqueId());
|
| 113 | + if (item == null) { |
| 114 | + return; |
| 115 | + } |
94 | 116 |
|
95 |
| - if (item != null) { |
96 |
| - SlimefunItem backpack = SlimefunItem.getByItem(item); |
97 |
| - |
98 |
| - if (backpack instanceof SlimefunBackpack slimefunBackpack) { |
99 |
| - if (e.getClick() == ClickType.NUMBER_KEY) { |
100 |
| - // Prevent disallowed items from being moved using number keys. |
101 |
| - if (e.getClickedInventory().getType() != InventoryType.PLAYER) { |
102 |
| - ItemStack hotbarItem = e.getWhoClicked().getInventory().getItem(e.getHotbarButton()); |
103 |
| - |
104 |
| - if (!isAllowed(slimefunBackpack, hotbarItem)) { |
105 |
| - e.setCancelled(true); |
106 |
| - } |
107 |
| - } |
108 |
| - } else if (e.getClick() == ClickType.SWAP_OFFHAND) { |
109 |
| - if (e.getClickedInventory().getType() != InventoryType.PLAYER) { |
110 |
| - // Fixes #3265 - Don't move disallowed items using the off hand. |
111 |
| - ItemStack offHandItem = e.getWhoClicked().getInventory().getItemInOffHand(); |
112 |
| - |
113 |
| - if (!isAllowed(slimefunBackpack, offHandItem)) { |
114 |
| - e.setCancelled(true); |
115 |
| - } |
116 |
| - } else { |
117 |
| - // Fixes #3664 - Do not swap the backpack to your off hand. |
118 |
| - if (e.getCurrentItem() != null && e.getCurrentItem().isSimilar(item)) { |
119 |
| - e.setCancelled(true); |
120 |
| - } |
121 |
| - } |
122 |
| - } else if (!isAllowed(slimefunBackpack, e.getCurrentItem())) { |
| 117 | + SlimefunItem backpack = SlimefunItem.getByItem(item); |
| 118 | + if (!(backpack instanceof SlimefunBackpack slimefunBackpack)) { |
| 119 | + return; |
| 120 | + } |
| 121 | + |
| 122 | + if (e.getClick() == ClickType.NUMBER_KEY) { |
| 123 | + // Prevent disallowed items from being moved using number keys. |
| 124 | + if (e.getClickedInventory().getType() != InventoryType.PLAYER) { |
| 125 | + ItemStack hotbarItem = e.getWhoClicked().getInventory().getItem(e.getHotbarButton()); |
| 126 | + |
| 127 | + if (!isAllowed(slimefunBackpack, hotbarItem)) { |
| 128 | + e.setCancelled(true); |
| 129 | + } |
| 130 | + } |
| 131 | + } else if (e.getClick() == ClickType.SWAP_OFFHAND) { |
| 132 | + if (e.getClickedInventory().getType() != InventoryType.PLAYER) { |
| 133 | + // Fixes #3265 - Don't move disallowed items using the off hand. |
| 134 | + ItemStack offHandItem = e.getWhoClicked().getInventory().getItemInOffHand(); |
| 135 | + |
| 136 | + if (!isAllowed(slimefunBackpack, offHandItem)) { |
| 137 | + e.setCancelled(true); |
| 138 | + } |
| 139 | + } else { |
| 140 | + // Fixes #3664 - Do not swap the backpack to your off hand. |
| 141 | + if (e.getCurrentItem() != null && e.getCurrentItem().isSimilar(item)) { |
123 | 142 | e.setCancelled(true);
|
124 | 143 | }
|
125 | 144 | }
|
| 145 | + } else if (!isAllowed(slimefunBackpack, e.getCurrentItem())) { |
| 146 | + e.setCancelled(true); |
126 | 147 | }
|
127 | 148 | }
|
128 | 149 |
|
|
0 commit comments