diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 1b5ee44c5..0e7d61581 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -74,6 +74,7 @@ public final class RefinedStorage { public int networkTransmitterUsage; public float networkTransmitterPerBlockUsage; public int networkReceiverUsage; + public int diskManipulatorUsage; public int controllerCapacity; public boolean controllerUsesEnergy; @@ -128,6 +129,7 @@ public final class RefinedStorage { networkTransmitterUsage = config.getInt("networkTransmitter", "energy", 50, 0, Integer.MAX_VALUE, "The base energy used by Network Transmitters"); networkTransmitterPerBlockUsage = config.getFloat("networkTransmitterPerBlock", "energy", 4, 0, Float.MAX_VALUE, "The additional energy per block that the Network Transmitter uses, gets rounded up"); networkReceiverUsage = config.getInt("networkReceiver", "energy", 15, 0, Integer.MAX_VALUE, "The energy used by Network Receivers"); + diskManipulatorUsage = config.getInt("diskManipulator", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators"); controllerCapacity = config.getInt("capacity", "controller", 32000, 0, Integer.MAX_VALUE, "The energy capacity of the Controller"); controllerUsesEnergy = config.getBoolean("usesEnergy", "controller", true, "Whether the Controller uses energy"); diff --git a/src/main/java/refinedstorage/container/ContainerDiskManipulator.java b/src/main/java/refinedstorage/container/ContainerDiskManipulator.java index 0bb549016..4a25d399e 100644 --- a/src/main/java/refinedstorage/container/ContainerDiskManipulator.java +++ b/src/main/java/refinedstorage/container/ContainerDiskManipulator.java @@ -11,6 +11,10 @@ public class ContainerDiskManipulator extends ContainerBase { public ContainerDiskManipulator(TileDiskManipulator manipulator, EntityPlayer player) { super(manipulator, player); + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(manipulator.getUpgrades(), i, 187, 6 + (i * 18))); + } + for (int i = 0; i < 6; ++i) { addSlotToContainer(new SlotItemHandler(manipulator.getDisks(), i, 26 + (i % 2 * 18), ((i / 2) * 18) + 57)); } @@ -35,12 +39,12 @@ public class ContainerDiskManipulator extends ContainerBase { if (slot != null && slot.getHasStack()) { stack = slot.getStack(); - if (index < 12) { - if (!mergeItemStack(stack, 12 + 9, inventorySlots.size(), false)) { + if (index < 4 + 12) { + if (!mergeItemStack(stack, 4 + 12 + 9, inventorySlots.size(), false)) { return null; } - } else if (!mergeItemStack(stack, 0, 12, false)) { - return mergeItemStackToSpecimen(stack, 12, 12 + 9); + } else if (!mergeItemStack(stack, 0, 16, false)) { + return mergeItemStackToSpecimen(stack, 4 + 12, 4 + 12 + 9); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/gui/GuiDiskManipulator.java b/src/main/java/refinedstorage/gui/GuiDiskManipulator.java index 3ce80b208..b6ca2672b 100644 --- a/src/main/java/refinedstorage/gui/GuiDiskManipulator.java +++ b/src/main/java/refinedstorage/gui/GuiDiskManipulator.java @@ -7,7 +7,7 @@ import refinedstorage.tile.TileDiskManipulator; public class GuiDiskManipulator extends GuiBase { public GuiDiskManipulator(ContainerDiskManipulator container) { - super(container, 176, 211); + super(container, 211, 211); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/refinedstorage/tile/TileDiskManipulator.java index bf3c5b2de..dc74db230 100755 --- a/src/main/java/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/refinedstorage/tile/TileDiskManipulator.java @@ -11,6 +11,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.fluid.FluidUtils; @@ -20,6 +21,8 @@ import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.IItemValidator; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; +import refinedstorage.inventory.ItemHandlerUpgrade; +import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IType; @@ -70,6 +73,8 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte dataManager.addWatchedParameter(IO_MODE); } + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); + private ItemHandlerBasic disks = new ItemHandlerBasic(12, this, IItemValidator.STORAGE_DISK) { @Override protected void onContentsChanged(int slot) { @@ -158,11 +163,14 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte @Override public int getEnergyUsage() { - return 0; + return RefinedStorage.INSTANCE.diskManipulatorUsage + upgrades.getEnergyUsage(); } @Override public void updateNode() { + if (ticks % upgrades.getSpeed() != 0) { + return; + } int slot = 0; if (type == IType.ITEMS) { while (slot < itemStorages.length && itemStorages[slot] == null) { @@ -199,6 +207,10 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } } + private int getInteractStackSize() { + return upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; + } + private void insertIntoNetwork(ItemStorage storage, int slot) { if (storage.getStored() == 0) { moveDriveToOutput(slot); @@ -216,7 +228,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } if (stack != null) { - extracted = storage.extractItem(stack, 1, compare); + extracted = storage.extractItem(stack, getInteractStackSize(), compare); } } while (storage.getItems().size() > i && extracted == null); @@ -252,7 +264,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } if (toExtract != null) { - extracted = network.extractItem(toExtract, 1, compare); + extracted = network.extractItem(toExtract, getInteractStackSize(), compare); } } else { while (itemFilters.getSlots() > i && extracted == null) { @@ -263,7 +275,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } if (stack != null) { - extracted = network.extractItem(stack, 1, compare); + extracted = network.extractItem(stack, getInteractStackSize(), compare); } } } @@ -297,7 +309,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } if (stack != null) { - extracted = storage.extractFluid(stack, 1, compare); + extracted = storage.extractFluid(stack, getInteractStackSize(), compare); } } while (extracted == null && storage.getStacks().size() > i); @@ -333,7 +345,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } if (toExtract != null) { - extracted = network.extractFluid(toExtract, 1, compare); + extracted = network.extractFluid(toExtract, getInteractStackSize(), compare); } } else { while (fluidFilters.getSlots() > i && extracted == null) { @@ -344,7 +356,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte } if (stack != null) { - extracted = network.extractFluid(stack, 1, compare); + extracted = network.extractFluid(stack, getInteractStackSize(), compare); } } } @@ -430,6 +442,10 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return disks; } + public IItemHandler getUpgrades() { + return upgrades; + } + @Override public void read(NBTTagCompound tag) { super.read(tag); @@ -437,6 +453,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte readItems(disks, 0, tag); readItems(itemFilters, 1, tag); readItems(fluidFilters, 2, tag); + readItems(upgrades, 3, tag); if (tag.hasKey(NBT_COMPARE)) { compare = tag.getInteger(NBT_COMPARE); @@ -462,6 +479,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte writeItems(disks, 0, tag); writeItems(itemFilters, 1, tag); writeItems(fluidFilters, 2, tag); + writeItems(upgrades, 3, tag); tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); diff --git a/src/main/resources/assets/refinedstorage/textures/gui/disk_manipulator.png b/src/main/resources/assets/refinedstorage/textures/gui/disk_manipulator.png index 77cf93f68..1812d18b0 100644 Binary files a/src/main/resources/assets/refinedstorage/textures/gui/disk_manipulator.png and b/src/main/resources/assets/refinedstorage/textures/gui/disk_manipulator.png differ