From a3aa343683fcba5e1b158a739d5055de4ee3e6ca Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 28 Aug 2022 13:34:02 +0200 Subject: [PATCH] Add new feature to InventoryFiller Signed-off-by: yoyosource --- BauSystem_Main/src/BauSystem.properties | 1 + .../features/util/InventoryFiller.java | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index 1c9fa5aa..63752202 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -1242,6 +1242,7 @@ SELECT_ITEM_BAUPLATTFORM=§eBuild platform SELECT_ITEM_TESTBLOCK=§eDummy CHESTFILLER_FILLED = §eChest filled +CHESTFILLER_COUNT = §7{0}§8: §e§l{1} # Warp WARP_DISALLOWED = §cYou are not allowed to use the warp here diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/util/InventoryFiller.java b/BauSystem_Main/src/de/steamwar/bausystem/features/util/InventoryFiller.java index 8c03f355..a91549c4 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/util/InventoryFiller.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/util/InventoryFiller.java @@ -23,11 +23,13 @@ import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.bausystem.linkage.Linked; import net.md_5.bungee.api.ChatMessageType; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Container; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -50,4 +52,64 @@ public class InventoryFiller implements Listener { } BauSystem.MESSAGE.sendPrefixless("CHESTFILLER_FILLED", event.getPlayer(), ChatMessageType.ACTION_BAR); } + + /** + * For MacOS user: https://www.curseforge.com/minecraft/mc-mods/shift-scroll-fix/download + */ + @EventHandler + public void onPlayerItemHeld(PlayerItemHeldEvent event) { + if (!event.getPlayer().isSneaking()) return; + ItemStack itemStack = event.getPlayer().getInventory().getItemInMainHand(); + if (itemStack.getType() == Material.AIR) return; + Block block = event.getPlayer().getTargetBlockExact(5); + if (block == null) return; + if (!(block.getState() instanceof Container)) return; + Container container = (Container) block.getState(); + Inventory inventory = container.getInventory(); + event.setCancelled(true); + + int upperBound = event.getPreviousSlot() + 5; + if (upperBound > 8) upperBound -= 8; + int lowerBound = event.getPreviousSlot() - 5; + if (lowerBound < 0) lowerBound += 8; + + int direction = 0; + if (event.getNewSlot() > event.getPreviousSlot() || event.getNewSlot() < upperBound) { + direction = -1; + } else if (event.getNewSlot() < event.getPreviousSlot() || event.getNewSlot() > lowerBound) { + direction = 1; + } + + int count = 0; + int emptySlot = -1; + int filledSlot = -1; + for (int i = 0; i < inventory.getSize(); i++) { + ItemStack current = inventory.getItem(i); + if (current == null) { + if (emptySlot == -1) emptySlot = i; + continue; + } + if (current.getType() == itemStack.getType()) { + count += current.getAmount(); + int emptyAmount = itemStack.getType().getMaxStackSize() - current.getAmount(); + if (direction == -1) filledSlot = Math.max(filledSlot, i); + if (emptyAmount > 0) filledSlot = Math.min(i, filledSlot); + if (emptyAmount > 0 && filledSlot == -1) filledSlot = i; + } + } + + int slotToUse = direction == -1 ? filledSlot : (filledSlot == -1 ? emptySlot : filledSlot); + if (slotToUse == -1) return; + + ItemStack current = inventory.getItem(slotToUse); + if (current == null) { + ItemStack now = itemStack.clone(); + now.setAmount(1); + inventory.setItem(slotToUse, now); + } else { + current.setAmount(current.getAmount() + direction); + } + + BauSystem.MESSAGE.sendPrefixless("CHESTFILLER_COUNT", event.getPlayer(), ChatMessageType.ACTION_BAR, itemStack.getType(), count + direction); + } }