From 28c4cfb55f467710f1dca240e36702209cfd8743 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 11 Jul 2022 13:58:03 +0100 Subject: [PATCH] Cancel inventory edits when editing is disabled, tweak listener logic for better compatibility --- .../listener/BukkitEventListener.java | 23 ++++++++++++------- .../husksync/editor/DataEditor.java | 2 +- .../husksync/listener/EventListener.java | 7 ++---- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java index a12c7fa0..529334e0 100644 --- a/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java +++ b/bukkit/src/main/java/net/william278/husksync/listener/BukkitEventListener.java @@ -15,6 +15,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -36,12 +37,12 @@ public class BukkitEventListener extends EventListener implements Listener { Bukkit.getServer().getPluginManager().registerEvents(this, huskSync); } - @EventHandler + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerJoin(@NotNull PlayerJoinEvent event) { super.handlePlayerJoin(BukkitPlayer.adapt(event.getPlayer())); } - @EventHandler + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerQuit(@NotNull PlayerQuitEvent event) { super.handlePlayerQuit(BukkitPlayer.adapt(event.getPlayer())); } @@ -77,12 +78,12 @@ public class BukkitEventListener extends EventListener implements Listener { * Events to cancel if the player has not been set yet */ - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onDropItem(@NotNull PlayerDropItemEvent event) { event.setCancelled(cancelPlayerEvent(BukkitPlayer.adapt(event.getPlayer()))); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPickupItem(@NotNull EntityPickupItemEvent event) { if (event.getEntity() instanceof Player player) { event.setCancelled(cancelPlayerEvent(BukkitPlayer.adapt(player))); @@ -90,23 +91,29 @@ public class BukkitEventListener extends EventListener implements Listener { } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerInteract(@NotNull PlayerInteractEvent event) { event.setCancelled(cancelPlayerEvent(BukkitPlayer.adapt(event.getPlayer()))); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(@NotNull BlockPlaceEvent event) { event.setCancelled(cancelPlayerEvent(BukkitPlayer.adapt(event.getPlayer()))); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(@NotNull BlockBreakEvent event) { event.setCancelled(cancelPlayerEvent(BukkitPlayer.adapt(event.getPlayer()))); + } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onInventoryClick(@NotNull InventoryClickEvent event) { + if (event.getWhoClicked() instanceof Player player) { + event.setCancelled(cancelInventoryClick(BukkitPlayer.adapt(player))); + } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInventoryOpen(@NotNull InventoryOpenEvent event) { if (event.getPlayer() instanceof Player player) { event.setCancelled(cancelPlayerEvent(BukkitPlayer.adapt(player))); diff --git a/common/src/main/java/net/william278/husksync/editor/DataEditor.java b/common/src/main/java/net/william278/husksync/editor/DataEditor.java index 54ebbade..8e24a0fa 100644 --- a/common/src/main/java/net/william278/husksync/editor/DataEditor.java +++ b/common/src/main/java/net/william278/husksync/editor/DataEditor.java @@ -65,7 +65,7 @@ public class DataEditor { * @param user The online user with an inventory open to check * @return {@code true} if edits to the inventory or ender chest menu are allowed; {@code false} otherwise, including if they don't have an inventory open */ - public boolean cancelInventoryEdit(@NotNull OnlineUser user) { + public boolean cancelMenuEdit(@NotNull OnlineUser user) { if (this.openInventoryMenus.containsKey(user.uuid)) { return !this.openInventoryMenus.get(user.uuid).canEdit; } diff --git a/common/src/main/java/net/william278/husksync/listener/EventListener.java b/common/src/main/java/net/william278/husksync/listener/EventListener.java index 3a483b7c..1bfc6d4b 100644 --- a/common/src/main/java/net/william278/husksync/listener/EventListener.java +++ b/common/src/main/java/net/william278/husksync/listener/EventListener.java @@ -165,11 +165,8 @@ public abstract class EventListener { plugin.getDataEditor().closeInventoryMenu(user, menuInventory); } - public final boolean cancelMenuClick(@NotNull OnlineUser user) { - if (disabling) { - return true; - } - return plugin.getDataEditor().cancelInventoryEdit(user); + public final boolean cancelInventoryClick(@NotNull OnlineUser user) { + return plugin.getDataEditor().cancelMenuEdit(user) || cancelPlayerEvent(user); } public final boolean cancelPlayerEvent(@NotNull OnlineUser user) {