From abd51e0e8287547b7ae3d364770659d083f5f166 Mon Sep 17 00:00:00 2001 From: ceze88 Date: Mon, 17 Jul 2023 12:20:48 +0200 Subject: [PATCH] Fix item stacking when using large numbers --- .../core/lootables/loot/DropUtils.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Core/src/main/java/com/craftaro/core/lootables/loot/DropUtils.java b/Core/src/main/java/com/craftaro/core/lootables/loot/DropUtils.java index b2c67527..e4f9c44d 100644 --- a/Core/src/main/java/com/craftaro/core/lootables/loot/DropUtils.java +++ b/Core/src/main/java/com/craftaro/core/lootables/loot/DropUtils.java @@ -8,6 +8,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -70,21 +71,23 @@ public class DropUtils { List stacks = new ArrayList<>(); int maxSize = UltimateStackerApi.getSettings().getMaxItemStackSize() - 64; for (ItemStack item : items) { - StackedItem stack = stacks.stream().filter(stackedItem -> stackedItem.getItem().getType() == item.getType()).findFirst().orElse(null); + StackedItem stack = stacks.stream().filter(stackedItem -> stackedItem.getItem().getType() == item.getType()).filter(stackedItem -> stackedItem.getAmount() < Integer.MAX_VALUE/2).findFirst().orElse(null); if (stack == null) { stacks.add(new StackedItem(item, item.getAmount())); continue; } - int newAmount = stack.getAmount() + item.getAmount(); - while (newAmount > maxSize) { - newAmount -= maxSize; + BigDecimal newAmount = BigDecimal.valueOf(stack.getAmount() + item.getAmount()); + //newAmount > maxSize + while (newAmount.compareTo(BigDecimal.valueOf(maxSize)) > 0) { + //newAmount -= maxSize; + newAmount = newAmount.subtract(BigDecimal.valueOf(maxSize)); stacks.add(new StackedItem(item, maxSize)); } - stack.setAmount(newAmount); + stack.setAmount(newAmount.intValue()); } Bukkit.getScheduler().runTask(UltimateStackerApi.getPlugin(), () -> { for (StackedItem stack : stacks) { - UltimateStackerApi.getStackedItemManager().createStack(stack.getItem(), event.getEntity().getLocation(), stack.getAmount()); + UltimateStackerApi.getStackedItemManager().createStack(stack.getItemToDrop(), event.getEntity().getLocation(), stack.getAmount()); } }); return; @@ -126,6 +129,11 @@ public class DropUtils { return this.item; } + public ItemStack getItemToDrop() { + this.item.setAmount(32); + return this.item; + } + public int getAmount() { return this.amount; }