diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerDiskManipulator.java index 7926e4a47..887c9a02b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerDiskManipulator.java @@ -16,11 +16,11 @@ public class ContainerDiskManipulator extends ContainerBase { } for (int i = 0; i < 6; ++i) { - addSlotToContainer(new SlotItemHandler(manipulator.getDisks(), i, 26 + (i % 2 * 18), ((i / 2) * 18) + 57)); + addSlotToContainer(new SlotItemHandler(manipulator.getInputDisks(), i, 26 + (i % 2 * 18), ((i / 2) * 18) + 57)); } for (int i = 0; i < 6; ++i) { - addSlotToContainer(new SlotItemHandler(manipulator.getDisks(), 6 + i, 116 + (i % 2 * 18), ((i / 2) * 18) + 57)); + addSlotToContainer(new SlotItemHandler(manipulator.getOutputDisks(), i, 116 + (i % 2 * 18), ((i / 2) * 18) + 57)); } for (int i = 0; i < 9; ++i) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java index 26083995b..9f0dd4a31 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java @@ -29,6 +29,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; import java.util.ArrayList; @@ -75,7 +76,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); - private ItemHandlerBasic disks = new ItemHandlerBasic(12, this, IItemValidator.STORAGE_DISK) { + private ItemHandlerBasic inputDisks = new ItemHandlerBasic(6, this, IItemValidator.STORAGE_DISK) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); @@ -100,6 +101,8 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } }; + private ItemHandlerBasic outputDisks = new ItemHandlerBasic(6, this, IItemValidator.STORAGE_DISK); + public class ItemStorage extends ItemStorageNBT { public ItemStorage(ItemStack disk) { super(disk.getTagCompound(), EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskManipulator.this); @@ -373,15 +376,14 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } private void moveDriveToOutput(int slot) { - ItemStack disk = disks.getStackInSlot(slot); + ItemStack disk = inputDisks.getStackInSlot(slot); if (disk != null) { - int i = 6; - - while (i < 12 && disks.getStackInSlot(i) != null) { + int i = 0; + while (i < 6 && outputDisks.getStackInSlot(i) != null) { i++; } - if (i == 12) { + if (i == 6) { return; } @@ -396,9 +398,8 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte fluidStorages[slot] = null; } } - - disks.extractItem(slot, 1, false); - disks.insertItem(i, disk, false); + inputDisks.extractItem(slot, 1, false); + outputDisks.insertItem(i, disk, false); } } @@ -437,8 +438,12 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return this.mode; } - public IItemHandler getDisks() { - return disks; + public IItemHandler getInputDisks() { + return inputDisks; + } + + public IItemHandler getOutputDisks() { + return outputDisks; } public IItemHandler getUpgrades() { @@ -449,10 +454,24 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte public void read(NBTTagCompound tag) { super.read(tag); - RSUtils.readItems(disks, 0, tag); + // Backwards Compatibility + ItemHandlerBasic oldDisks = new ItemHandlerBasic(12, this, IItemValidator.STORAGE_DISK); + RSUtils.readItems(oldDisks, 0, tag); + for (int i = 0; i < 12; ++i) { + ItemStack stack = oldDisks.extractItem(i, 1, false); + if (stack != null) { + if (i < 6) { + inputDisks.insertItem(i, stack, false); + } else { + outputDisks.insertItem(i, stack, false); + } + } + } + RSUtils.readItems(itemFilters, 1, tag); RSUtils.readItems(fluidFilters, 2, tag); RSUtils.readItems(upgrades, 3, tag); + RSUtils.readItems(outputDisks, 4, tag); if (tag.hasKey(NBT_COMPARE)) { compare = tag.getInteger(NBT_COMPARE); @@ -475,10 +494,13 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RSUtils.writeItems(disks, 0, tag); + onBreak(); + + RSUtils.writeItems(inputDisks, 0, tag); RSUtils.writeItems(itemFilters, 1, tag); RSUtils.writeItems(fluidFilters, 2, tag); RSUtils.writeItems(upgrades, 3, tag); + RSUtils.writeItems(outputDisks, 4, tag); tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); @@ -490,13 +512,13 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte @Override public IItemHandler getDrops() { - return disks; + return new CombinedInvWrapper(inputDisks, outputDisks, upgrades); } @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) disks; + return facing == EnumFacing.DOWN ? (T) outputDisks : (T) inputDisks; } return super.getCapability(capability, facing);