From 29c5b2c5b7cd1f852dd4919a49cabd0f2a02999b Mon Sep 17 00:00:00 2001 From: tanyaofei Date: Mon, 12 Aug 2024 10:30:04 +0800 Subject: [PATCH] Fix invsee might cause items to disappear (#3065) --- .../essentials/EssentialsPlayerListener.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 0b3ad90b8..8176e214d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -36,10 +36,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.*; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; @@ -960,6 +957,21 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { return false; } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onInventoryDragEvent(final InventoryDragEvent event) { + final Inventory top = ess.getInventoryViewProvider().getTopInventory(event.getView()); + if (top.getType() != InventoryType.PLAYER) { + return; + } + final User user = ess.getUser((Player) event.getWhoClicked()); + if (!user.isInvSee()) { + return; + } + if (event.getNewItems().keySet().stream().anyMatch(slot -> slot > 35)) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.MONITOR) public void onInventoryCloseEvent(final InventoryCloseEvent event) { Player refreshPlayer = null;