Skip to content

Commit 2cecadc

Browse files
committed
Fix the issue + refactor
1 parent d12ae85 commit 2cecadc

File tree

1 file changed

+50
-29
lines changed

1 file changed

+50
-29
lines changed

src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.bukkit.event.inventory.InventoryCloseEvent;
2323
import org.bukkit.event.inventory.InventoryType;
2424
import org.bukkit.event.player.PlayerDropItemEvent;
25+
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
2526
import org.bukkit.inventory.ItemStack;
2627
import org.bukkit.inventory.meta.ItemMeta;
2728

@@ -50,7 +51,7 @@
5051
*/
5152
public class BackpackListener implements Listener {
5253

53-
private final Map<UUID, ItemStack> backpacks = new HashMap<>();
54+
private final Map<UUID, ItemStack> backpacks = new HashMap<>(); // UUID of players with backpack open
5455

5556
public void register(@Nonnull Slimefun plugin) {
5657
plugin.getServer().getPluginManager().registerEvents(this, plugin);
@@ -88,41 +89,61 @@ public void onItemDrop(PlayerDropItemEvent e) {
8889
}
8990
}
9091

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+
91110
@EventHandler(ignoreCancelled = true)
92111
public void onClick(InventoryClickEvent e) {
93112
ItemStack item = backpacks.get(e.getWhoClicked().getUniqueId());
113+
if (item == null) {
114+
return;
115+
}
94116

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)) {
123142
e.setCancelled(true);
124143
}
125144
}
145+
} else if (!isAllowed(slimefunBackpack, e.getCurrentItem())) {
146+
e.setCancelled(true);
126147
}
127148
}
128149

0 commit comments

Comments
 (0)