diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 013ef74d6aa..8a886de0f66 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -43,6 +43,7 @@ import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; @@ -995,6 +996,26 @@ private boolean isPreventBindingHat(User user, PlayerInventory inventory) { return false; } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onInventoryDragEvent(final InventoryDragEvent event) { + final InventoryViewProvider provider = ess.provider(InventoryViewProvider.class); + final Inventory top = provider.getTopInventory(event.getView()); + if (top.getType() != InventoryType.PLAYER) { + return; + } + final User user = ess.getUser((Player) event.getWhoClicked()); + if (!user.isInvSee()) { + return; + } + + for (int slot : event.getNewItems().keySet()) { + if (Inventories.isBottomInventorySlot(slot)) { + event.setCancelled(true); + break; + } + } + } + @EventHandler(priority = EventPriority.MONITOR) public void onInventoryCloseEvent(final InventoryCloseEvent event) { Player refreshPlayer = null; diff --git a/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java b/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java index d88ed26d612..db754a19426 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java +++ b/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java @@ -424,4 +424,8 @@ public static boolean isContortedSlot(final int slot) { private static boolean isArmorSlot(final int slot) { return slot == HELM_SLOT || slot == CHEST_SLOT || slot == LEG_SLOT || slot == BOOT_SLOT; } + + public static boolean isBottomInventorySlot(final int slot) { + return slot > 35; + } }