diff --git a/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java b/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java index 4a64ad6..f963120 100644 --- a/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java +++ b/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java @@ -11,71 +11,43 @@ package cpw.mods.ironchest.common.lib; import javax.annotation.Nonnull; import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; public class ICChestInventoryHandler implements IItemHandlerModifiable { - int slots; - TileEntityIronChest inv; - int slotOffset; - - boolean[] canInsert; - - boolean[] canExtract; - - public ICChestInventoryHandler(int slots, TileEntityIronChest inventory, int slotOffset, boolean[] canInsert, boolean[] canExtract) + public ICChestInventoryHandler(TileEntityIronChest inventory) { - this.slots = slots; this.inv = inventory; - this.slotOffset = slotOffset; - this.canInsert = canInsert; - this.canExtract = canExtract; - } - - public ICChestInventoryHandler(int slots, TileEntityIronChest inventory) - { - this(slots, inventory, 0, new boolean[slots], new boolean[slots]); - for (int i = 0; i < slots; i++) - this.canExtract[i] = this.canInsert[i] = true; - } - - public ICChestInventoryHandler(int slots, TileEntityIronChest inventory, int slotOffset, boolean canInsert, boolean canExtract) - { - this(slots, inventory, slotOffset, new boolean[slots], new boolean[slots]); - for (int i = 0; i < slots; i++) - { - this.canInsert[i] = canInsert; - this.canExtract[i] = canExtract; - } } @Override public int getSlots() { - return slots; + return this.inv.getSizeInventory(); } @Override public ItemStack getStackInSlot(int slot) { - return this.inv.getItems().get(this.slotOffset + slot); + return this.inv.getStackInSlot(slot); } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (!canInsert[slot] || stack.isEmpty()) + if (stack.isEmpty()) return stack; stack = stack.copy(); - if (!inv.isItemValidForSlot(this.slotOffset + slot, stack)) + if (!inv.isItemValidForSlot(slot, stack)) return stack; - int offsetSlot = this.slotOffset + slot; + int offsetSlot = slot; ItemStack currentStack = inv.getItems().get(offsetSlot); if (currentStack.isEmpty()) @@ -144,10 +116,10 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (!canExtract[slot] || amount == 0) + if (amount == 0) return ItemStack.EMPTY; - int offsetSlot = this.slotOffset + slot; + int offsetSlot = slot; ItemStack currentStack = inv.getItems().get(offsetSlot); if (currentStack.isEmpty()) @@ -172,13 +144,18 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable @Override public int getSlotLimit(int slot) { - return 64; + return getInv().getInventoryStackLimit(); } @Override public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - inv.getItems().set(this.slotOffset + slot, stack); + inv.getItems().set(slot, stack); inv.markDirty(); } + + public IInventory getInv() + { + return inv; + } } diff --git a/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java b/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java index 2209d4c..0233e97 100644 --- a/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java +++ b/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java @@ -11,71 +11,43 @@ package cpw.mods.ironchest.common.lib; import javax.annotation.Nonnull; import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; public class ICShulkerInventoryHandler implements IItemHandlerModifiable { - int slots; - TileEntityIronShulkerBox inv; - int slotOffset; - - boolean[] canInsert; - - boolean[] canExtract; - - public ICShulkerInventoryHandler(int slots, TileEntityIronShulkerBox inventory, int slotOffset, boolean[] canInsert, boolean[] canExtract) + public ICShulkerInventoryHandler(TileEntityIronShulkerBox inventory) { - this.slots = slots; this.inv = inventory; - this.slotOffset = slotOffset; - this.canInsert = canInsert; - this.canExtract = canExtract; - } - - public ICShulkerInventoryHandler(int slots, TileEntityIronShulkerBox inventory) - { - this(slots, inventory, 0, new boolean[slots], new boolean[slots]); - for (int i = 0; i < slots; i++) - this.canExtract[i] = this.canInsert[i] = true; - } - - public ICShulkerInventoryHandler(int slots, TileEntityIronShulkerBox inventory, int slotOffset, boolean canInsert, boolean canExtract) - { - this(slots, inventory, slotOffset, new boolean[slots], new boolean[slots]); - for (int i = 0; i < slots; i++) - { - this.canInsert[i] = canInsert; - this.canExtract[i] = canExtract; - } } @Override public int getSlots() { - return slots; + return this.inv.getSizeInventory(); } @Override public ItemStack getStackInSlot(int slot) { - return this.inv.getItems().get(this.slotOffset + slot); + return this.inv.getStackInSlot(slot); } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (!canInsert[slot] || stack.isEmpty()) + if (stack.isEmpty()) return stack; stack = stack.copy(); - if (!inv.isItemValidForSlot(this.slotOffset + slot, stack)) + if (!inv.isItemValidForSlot(slot, stack)) return stack; - int offsetSlot = this.slotOffset + slot; + int offsetSlot = slot; ItemStack currentStack = inv.getItems().get(offsetSlot); if (currentStack.isEmpty()) @@ -144,10 +116,10 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (!canExtract[slot] || amount == 0) + if (amount == 0) return ItemStack.EMPTY; - int offsetSlot = this.slotOffset + slot; + int offsetSlot = slot; ItemStack currentStack = inv.getItems().get(offsetSlot); if (currentStack.isEmpty()) @@ -172,13 +144,18 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable @Override public int getSlotLimit(int slot) { - return 64; + return getInv().getInventoryStackLimit(); } @Override public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - inv.getItems().set(this.slotOffset + slot, stack); + inv.getItems().set(slot, stack); inv.markDirty(); } + + public IInventory getInv() + { + return inv; + } } diff --git a/src/main/java/cpw/mods/ironchest/common/tileentity/chest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/common/tileentity/chest/TileEntityIronChest.java index 75e30fc..bbdb9fd 100755 --- a/src/main/java/cpw/mods/ironchest/common/tileentity/chest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/common/tileentity/chest/TileEntityIronChest.java @@ -653,14 +653,20 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick return super.hasCapability(capability, facing); } - IItemHandler insertionHandler = new ICChestInventoryHandler(this.getType().size, this); + private IItemHandler itemHandler; + + @Override + protected IItemHandler createUnSidedHandler() + { + return new ICChestInventoryHandler(this); + } @SuppressWarnings("unchecked") @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return (T) insertionHandler; + return (T) (itemHandler == null ? (itemHandler = createUnSidedHandler()) : itemHandler); return super.getCapability(capability, facing); } } diff --git a/src/main/java/cpw/mods/ironchest/common/tileentity/shulker/TileEntityIronShulkerBox.java b/src/main/java/cpw/mods/ironchest/common/tileentity/shulker/TileEntityIronShulkerBox.java index 622e745..77c1651 100644 --- a/src/main/java/cpw/mods/ironchest/common/tileentity/shulker/TileEntityIronShulkerBox.java +++ b/src/main/java/cpw/mods/ironchest/common/tileentity/shulker/TileEntityIronShulkerBox.java @@ -844,22 +844,26 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityIronShulkerBox.class, new String[] { "Items" })); } - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) - { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return true; - return super.hasCapability(capability, facing); - } + private IItemHandler itemHandler; - IItemHandler insertionHandler = new ICShulkerInventoryHandler(this.getType().size, this); + @Override + protected IItemHandler createUnSidedHandler() + { + return new ICShulkerInventoryHandler(this); + } @SuppressWarnings("unchecked") @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return (T) insertionHandler; + return (T) (itemHandler == null ? (itemHandler = createUnSidedHandler()) : itemHandler); return super.getCapability(capability, facing); } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @javax.annotation.Nullable net.minecraft.util.EnumFacing facing) + { + return capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } }