equivalent-exchange-3/src/main/java/com/pahimar/ee3/inventory/ContainerEE.java
2023-01-03 17:47:36 +01:00

80 lines
3 KiB
Java

package com.pahimar.ee3.inventory;
import com.pahimar.ee3.util.ItemStackUtils;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public abstract class ContainerEE extends Container {
protected final int PLAYER_INVENTORY_ROWS = 3;
protected final int PLAYER_INVENTORY_COLUMNS = 9;
@Override
protected boolean
mergeItemStack(ItemStack itemStack, int slotMin, int slotMax, boolean ascending) {
boolean slotFound = false;
int currentSlotIndex = ascending ? slotMax - 1 : slotMin;
Slot slot;
ItemStack stackInSlot;
if (itemStack.isStackable()) {
while (itemStack.stackSize > 0
&& (!ascending && currentSlotIndex < slotMax
|| ascending && currentSlotIndex >= slotMin)) {
slot = (Slot) this.inventorySlots.get(currentSlotIndex);
stackInSlot = slot.getStack();
if (slot.isItemValid(itemStack)
&& ItemStackUtils.equalsIgnoreStackSize(itemStack, stackInSlot)) {
int combinedStackSize = stackInSlot.stackSize + itemStack.stackSize;
int slotStackSizeLimit = Math.min(
stackInSlot.getMaxStackSize(), slot.getSlotStackLimit()
);
if (combinedStackSize <= slotStackSizeLimit) {
itemStack.stackSize = 0;
stackInSlot.stackSize = combinedStackSize;
slot.onSlotChanged();
slotFound = true;
} else if (stackInSlot.stackSize < slotStackSizeLimit) {
itemStack.stackSize -= slotStackSizeLimit - stackInSlot.stackSize;
stackInSlot.stackSize = slotStackSizeLimit;
slot.onSlotChanged();
slotFound = true;
}
}
currentSlotIndex += ascending ? -1 : 1;
}
}
if (itemStack.stackSize > 0) {
currentSlotIndex = ascending ? slotMax - 1 : slotMin;
while (!ascending && currentSlotIndex < slotMax
|| ascending && currentSlotIndex >= slotMin) {
slot = (Slot) this.inventorySlots.get(currentSlotIndex);
stackInSlot = slot.getStack();
if (slot.isItemValid(itemStack) && stackInSlot == null) {
slot.putStack(ItemStackUtils.clone(
itemStack, Math.min(itemStack.stackSize, slot.getSlotStackLimit())
));
slot.onSlotChanged();
if (slot.getStack() != null) {
itemStack.stackSize -= slot.getStack().stackSize;
slotFound = true;
}
break;
}
currentSlotIndex += ascending ? -1 : 1;
}
}
return slotFound;
}
}