From 0c59813f1d5645583a6d2f50cd94f5191f35d3b8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 22 May 2016 18:18:02 +0200 Subject: [PATCH] Interface item handler --- .../inventory/InterfaceItemHandler.java | 32 +++++++++++++++++++ .../refinedstorage/tile/TileInterface.java | 20 ++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100755 src/main/java/refinedstorage/inventory/InterfaceItemHandler.java diff --git a/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java b/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java new file mode 100755 index 000000000..e3539e569 --- /dev/null +++ b/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java @@ -0,0 +1,32 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +public class InterfaceItemHandler extends ProxyItemHandler { + private EnumFacing side; + + public InterfaceItemHandler(BasicItemHandler interfaceHandler, EnumFacing side) { + super(interfaceHandler); + + this.side = side; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (side != EnumFacing.DOWN && slot >= 0 && slot <= 8) { + return super.insertItem(slot, stack, simulate); + } + + return stack; + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (side == EnumFacing.DOWN && slot >= 18 && slot <= 26) { + return super.extractItem(slot, amount, simulate); + } + + return null; + } +} diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 01388832a..cb7f99697 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -4,6 +4,9 @@ import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorageItems; @@ -11,10 +14,10 @@ import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerInterface; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.InterfaceItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; -// @TODO: Write a capability handler for this public class TileInterface extends TileMachine implements ICompareConfig { public static final String NBT_COMPARE = "Compare"; @@ -127,7 +130,6 @@ public class TileInterface extends TileMachine implements ICompareConfig { } - @Override public void receiveContainerData(ByteBuf buf) { super.receiveContainerData(buf); @@ -173,4 +175,18 @@ public class TileInterface extends TileMachine implements ICompareConfig { return dummy; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) new InterfaceItemHandler(items, facing); + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } }