mirror of
https://github.com/songoda/SongodaCore.git
synced 2024-10-22 12:20:26 +02:00
Fix item stacking when using large numbers
This commit is contained in:
parent
98e03a2861
commit
abd51e0e82
@ -8,6 +8,7 @@ import org.bukkit.entity.LivingEntity;
|
|||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -70,21 +71,23 @@ public class DropUtils {
|
|||||||
List<StackedItem> stacks = new ArrayList<>();
|
List<StackedItem> stacks = new ArrayList<>();
|
||||||
int maxSize = UltimateStackerApi.getSettings().getMaxItemStackSize() - 64;
|
int maxSize = UltimateStackerApi.getSettings().getMaxItemStackSize() - 64;
|
||||||
for (ItemStack item : items) {
|
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) {
|
if (stack == null) {
|
||||||
stacks.add(new StackedItem(item, item.getAmount()));
|
stacks.add(new StackedItem(item, item.getAmount()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int newAmount = stack.getAmount() + item.getAmount();
|
BigDecimal newAmount = BigDecimal.valueOf(stack.getAmount() + item.getAmount());
|
||||||
while (newAmount > maxSize) {
|
//newAmount > maxSize
|
||||||
newAmount -= maxSize;
|
while (newAmount.compareTo(BigDecimal.valueOf(maxSize)) > 0) {
|
||||||
|
//newAmount -= maxSize;
|
||||||
|
newAmount = newAmount.subtract(BigDecimal.valueOf(maxSize));
|
||||||
stacks.add(new StackedItem(item, maxSize));
|
stacks.add(new StackedItem(item, maxSize));
|
||||||
}
|
}
|
||||||
stack.setAmount(newAmount);
|
stack.setAmount(newAmount.intValue());
|
||||||
}
|
}
|
||||||
Bukkit.getScheduler().runTask(UltimateStackerApi.getPlugin(), () -> {
|
Bukkit.getScheduler().runTask(UltimateStackerApi.getPlugin(), () -> {
|
||||||
for (StackedItem stack : stacks) {
|
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;
|
return;
|
||||||
@ -126,6 +129,11 @@ public class DropUtils {
|
|||||||
return this.item;
|
return this.item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack getItemToDrop() {
|
||||||
|
this.item.setAmount(32);
|
||||||
|
return this.item;
|
||||||
|
}
|
||||||
|
|
||||||
public int getAmount() {
|
public int getAmount() {
|
||||||
return this.amount;
|
return this.amount;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user