diff --git a/src/main/java/refinedstorage/inventory/SoldererItemHandler.java b/src/main/java/refinedstorage/inventory/SoldererItemHandler.java index 929719ce6..c76a2f0ec 100755 --- a/src/main/java/refinedstorage/inventory/SoldererItemHandler.java +++ b/src/main/java/refinedstorage/inventory/SoldererItemHandler.java @@ -2,22 +2,29 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; +import refinedstorage.tile.solderer.TileSolderer; public class SoldererItemHandler extends ProxyItemHandler { + private TileSolderer solderer; private EnumFacing side; - public SoldererItemHandler(BasicItemHandler soldererHandler, EnumFacing side) { - super(soldererHandler); + public SoldererItemHandler(TileSolderer solderer, EnumFacing side) { + super(solderer.getItems()); + this.solderer = solderer; this.side = side; } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (((side == EnumFacing.NORTH || side == EnumFacing.EAST) && slot == 0) || - ((side == EnumFacing.SOUTH || side == EnumFacing.WEST) && slot == 2) || - ((side == EnumFacing.UP && slot == 1))) { - return super.insertItem(slot, stack, simulate); + if (solderer.getDirection() == EnumFacing.DOWN || solderer.getDirection() == EnumFacing.UP) { + if (((side == EnumFacing.WEST || side == EnumFacing.SOUTH) && slot == 0) || ((side == EnumFacing.NORTH || side == EnumFacing.EAST) && slot == 2) || (side == EnumFacing.UP && slot == 1)) { + return super.insertItem(slot, stack, simulate); + } + } else { + if ((side == solderer.getDirection().rotateY() && slot == 0) || (side == solderer.getDirection().rotateYCCW() && slot == 2) || (side == EnumFacing.UP && slot == 1)) { + return super.insertItem(slot, stack, simulate); + } } return stack; diff --git a/src/main/java/refinedstorage/tile/solderer/TileSolderer.java b/src/main/java/refinedstorage/tile/solderer/TileSolderer.java index c88be4691..d8614298f 100755 --- a/src/main/java/refinedstorage/tile/solderer/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/solderer/TileSolderer.java @@ -24,6 +24,7 @@ public class TileSolderer extends TileMachine { private BasicItemHandler items = new BasicItemHandler(4, this); private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED)); + private SoldererItemHandler[] itemsFacade = new SoldererItemHandler[EnumFacing.values().length]; private ISoldererRecipe recipe; @@ -179,7 +180,7 @@ public class TileSolderer extends TileMachine { return (int) ((float) progress / (float) duration * (float) i); } - public IItemHandler getItems() { + public BasicItemHandler getItems() { return items; } @@ -195,7 +196,13 @@ public class TileSolderer extends TileMachine { @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) new SoldererItemHandler(items, facing); + int i = facing.ordinal(); + + if (itemsFacade[i] == null) { + itemsFacade[i] = new SoldererItemHandler(this, facing); + } + + return (T) itemsFacade[i]; } return super.getCapability(capability, facing);