From 5897082f76cd09ed02fdb92c3aed8d8ac6abc931 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Thu, 6 Feb 2020 15:21:46 +0100 Subject: [PATCH] Allow items to be dropped into the backpack without opening it --- .../Minepacks/Bukkit/Listener/ItemFilter.java | 4 +- .../Bukkit/Listener/ItemShortcut.java | 39 +++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java index 90b9f68..4bff8e4 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemFilter.java @@ -38,9 +38,9 @@ public class ItemFilter extends MinepacksListener implements at.pcgamingfreaks.Minepacks.Bukkit.API.ItemFilter { - private final Message messageNotAllowedInBackpack; + public final Message messageNotAllowedInBackpack; + public final ItemNameResolver itemNameResolver; private final Collection blockedMaterials = new HashSet<>(); - private final ItemNameResolver itemNameResolver; public ItemFilter(final Minepacks plugin) { diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemShortcut.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemShortcut.java index 230bf2d..27933d7 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemShortcut.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Listener/ItemShortcut.java @@ -20,6 +20,7 @@ import at.pcgamingfreaks.Bukkit.HeadUtils; import at.pcgamingfreaks.Bukkit.MCVersion; import at.pcgamingfreaks.Bukkit.Message.Message; +import at.pcgamingfreaks.Minepacks.Bukkit.API.Backpack; import at.pcgamingfreaks.Minepacks.Bukkit.Database.Helper.WorldBlacklistMode; import at.pcgamingfreaks.Minepacks.Bukkit.Minepacks; @@ -41,6 +42,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Iterator; +import java.util.Map; import java.util.UUID; public class ItemShortcut implements Listener @@ -150,38 +152,59 @@ public void onItemFrameInteract(PlayerInteractEntityEvent event) } //endregion - //region Handle inventory acctions + //region Handle inventory actions @EventHandler(priority = EventPriority.LOWEST) public void onItemClick(InventoryClickEvent event) { if(event.getWhoClicked() instanceof Player) { + final Player player = (Player) event.getWhoClicked(); if(isItemShortcut(event.getCurrentItem())) { - if(event.getClick() == ClickType.RIGHT || event.getClick() == ClickType.SHIFT_RIGHT) + if(event.getAction() == InventoryAction.SWAP_WITH_CURSOR) { - ((Player) event.getWhoClicked()).performCommand("backpack open"); + if(plugin.isDisabled(player) != WorldBlacklistMode.None || !player.hasPermission("backpack.use")) return; + Backpack backpack = plugin.getBackpackCachedOnly(player); + if(backpack != null) + { + //TODO right click should place only one + final ItemStack stack = event.getCursor(); + if(plugin.getItemFilter() == null || !plugin.getItemFilter().isItemBlocked(stack)) + { + Map full = backpack.getInventory().addItem(stack); + stack.setAmount((full.isEmpty()) ? 0 : full.get(0).getAmount()); + event.setCancelled(true); + } + else + { + plugin.getItemFilter().messageNotAllowedInBackpack.send(player, plugin.getItemFilter().itemNameResolver.getName(stack)); + } + } + } + else if(event.getClick() == ClickType.RIGHT || event.getClick() == ClickType.SHIFT_RIGHT) + { + player.performCommand("backpack open"); event.setCancelled(true); } else if(event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY) { event.setCancelled(true); - messageDoNotRemoveItem.send(event.getWhoClicked()); + messageDoNotRemoveItem.send(player); } } else if((event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD || event.getAction() == InventoryAction.HOTBAR_SWAP) && event.getHotbarButton() != -1) { - ItemStack item = event.getWhoClicked().getInventory().getItem(event.getHotbarButton()); + ItemStack item = player.getInventory().getItem(event.getHotbarButton()); if(isItemShortcut(item)) { event.setCancelled(true); - messageDoNotRemoveItem.send(event.getWhoClicked()); + messageDoNotRemoveItem.send(player); } } - else if(isItemShortcut(event.getCursor()) && !event.getWhoClicked().getInventory().equals(event.getClickedInventory())) + else if(isItemShortcut(event.getCursor()) && !player.getInventory().equals(event.getClickedInventory())) { event.setCancelled(true); - messageDoNotRemoveItem.send(event.getWhoClicked()); + messageDoNotRemoveItem.send(player); } } }