From 830c49c6f7b9ed66328ce318d1a31a92abab4c48 Mon Sep 17 00:00:00 2001 From: Giacomello Nathan <0ddlyokoOfficial@gmail.com> Date: Sun, 23 Feb 2020 16:48:26 +0100 Subject: [PATCH] Fix bug (https://www.youtube.com/watch?v=5eGjTv18OfY) --- .../com/songoda/ultimatestacker/UltimateStacker.java | 5 ++++- .../ultimatestacker/listeners/ItemListeners.java | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java index 2b7ed3e..40afc80 100644 --- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java +++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java @@ -398,6 +398,9 @@ public class UltimateStacker extends SongodaPlugin { item.removeMetadata("US_AMT", INSTANCE); itemStack.setAmount(newAmount); } + // If amount is 0, Minecraft change the type to AIR + if (itemStack.getType() == Material.AIR) + return; item.setItemStack(itemStack); if ((blacklisted && !Settings.ITEM_HOLOGRAM_BLACKLIST.getBoolean()) @@ -419,7 +422,7 @@ public class UltimateStacker extends SongodaPlugin { public static int getActualItemAmount(Item item) { ItemStack itemStack = item.getItemStack(); int amount = itemStack.getAmount(); - if (amount >= (itemStack.getMaxStackSize() / 2) && item.hasMetadata("US_AMT")) { + if (/*amount >= (itemStack.getMaxStackSize() / 2) && */item.hasMetadata("US_AMT")) { return item.getMetadata("US_AMT").get(0).asInt(); } else { return amount; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java index 0c98a43..347f664 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/ItemListeners.java @@ -81,12 +81,18 @@ public class ItemListeners implements Listener { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPickup(PlayerPickupItemEvent event) { if (!Settings.STACK_ITEMS.getBoolean()) return; - if (event.getItem().getItemStack().getAmount() < (event.getItem().getItemStack().getMaxStackSize() / 2)) return; + // Amount here is not the total amount of item (32 if more than 32) but the amount of item the player can retrieve + // ie there is x64 diamonds blocks (so 32), the player pick 8 items so the amount is 8 and not 32 + int amount = UltimateStacker.getActualItemAmount(event.getItem()); + if (/*event.getItem().getItemStack().getAmount()*/amount < (event.getItem().getItemStack().getMaxStackSize() / 2)) { + // Update + UltimateStacker.updateItemAmount(event.getItem(), event.getRemaining()); + return; + } event.setCancelled(true); event.getPlayer().playSound(event.getPlayer().getLocation(), CompatibleSound.ENTITY_ITEM_PICKUP.getSound(), .2f, (float) (1 + Math.random())); Methods.updateInventory(event.getItem(), event.getPlayer().getInventory()); } - }