From ebe2f5aa4cdc448bd5350d199185f5edca96e218 Mon Sep 17 00:00:00 2001 From: BONNe Date: Fri, 14 Jun 2019 11:03:55 +0300 Subject: [PATCH] Secured the handling of InventoryClickEvent for panels (#761) * Fix Challenges GUI issue 132 Fixed https://github.com/BentoBoxWorld/Challenges/issues/132 This issue happens because AnvilGUIClick event was processed after BentoBox registers new Panel. I add extra check in InventoryClickEvent that not only checks if user has opened panel, but also compares if event and panel has the same inventory, before processing it as BentoBox Panel. * Removed the unneeded PlayerKickEvent --- .../bentobox/bentobox/listeners/PanelListenerManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java b/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java index 6f9402865..95c4b710e 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java +++ b/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java @@ -12,6 +12,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryType.SlotType; +import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.inventory.InventoryView; @@ -31,7 +32,8 @@ public class PanelListenerManager implements Listener { InventoryView view = event.getView(); // Open the inventory panel that this player has open (they can only ever have one) - if (openPanels.containsKey(user.getUniqueId())) { + if (openPanels.containsKey(user.getUniqueId()) && + openPanels.get(user.getUniqueId()).getInventory().equals(event.getClickedInventory())) { // Cancel the event. If they don't want it to be cancelled then the click handler(s) should // uncancel it. If gui was from our environment, then cancel event anyway. event.setCancelled(true);