Files
Aphelion/src/main/java/net/xevianlight/aphelion/util/SidedSlotHandler.java
2026-01-16 17:51:41 -07:00

65 lines
2.0 KiB
Java

package net.xevianlight.aphelion.util;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.items.IItemHandler;
import net.neoforged.neoforge.items.IItemHandlerModifiable;
public class SidedSlotHandler implements IItemHandler {
private final IItemHandlerModifiable backing;
private final int[] slots;
private final boolean allowInsert;
private final boolean allowExtract;
public SidedSlotHandler(IItemHandlerModifiable backing, int[] slots, boolean allowInsert, boolean allowExtract) {
this.backing = backing;
this.slots = slots;
this.allowInsert = allowInsert;
this.allowExtract = allowExtract;
}
private int toBackingSlot(int localSlot) {
if (localSlot < 0 || localSlot >= slots.length) return -1;
return slots[localSlot];
}
@Override
public int getSlots() {
return slots.length;
}
@Override
public ItemStack getStackInSlot(int slot) {
int s = toBackingSlot(slot);
return s < 0 ? ItemStack.EMPTY : backing.getStackInSlot(s);
}
@Override
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
if (!allowInsert || stack.isEmpty()) return stack;
int s = toBackingSlot(slot);
return s < 0 ? stack : backing.insertItem(s, stack, simulate);
}
@Override
public ItemStack extractItem(int slot, int amount, boolean simulate) {
if (!allowExtract || amount <= 0) return ItemStack.EMPTY;
int s = toBackingSlot(slot);
return s < 0 ? ItemStack.EMPTY : backing.extractItem(s, amount, simulate);
}
@Override
public int getSlotLimit(int slot) {
int s = toBackingSlot(slot);
return s < 0 ? 0 : backing.getSlotLimit(s);
}
@Override
public boolean isItemValid(int slot, ItemStack stack) {
if (!allowInsert) return false;
int s = toBackingSlot(slot);
return s >= 0 && backing.isItemValid(s, stack);
}
}