diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java index 37b25c252..f157f94bb 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java @@ -1,7 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.storage.AccessType; @@ -12,10 +11,6 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.INetworkNodeHolder; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskFluid; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskItem; -import com.raoulvdberge.refinedstorage.block.FluidStorageType; -import com.raoulvdberge.refinedstorage.block.ItemStorageType; import com.raoulvdberge.refinedstorage.inventory.IItemValidator; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; @@ -309,38 +304,12 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS @Override public int getStored() { - int stored = 0; - - for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack disk = disks.getStackInSlot(i); - - if (!disk.isEmpty()) { - stored += disk.getItem() == RSItems.STORAGE_DISK ? StorageDiskItem.getStored(disk.getTagCompound()) : StorageDiskFluid.getStored(disk.getTagCompound()); - } - } - - return stored; + return TileDiskDrive.STORED.getValue(); } @Override public int getCapacity() { - int capacity = 0; - - for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack disk = disks.getStackInSlot(i); - - if (!disk.isEmpty()) { - int diskCapacity = disk.getItem() == RSItems.STORAGE_DISK ? ItemStorageType.getById(disk.getItemDamage()).getCapacity() : FluidStorageType.getById(disk.getItemDamage()).getCapacity(); - - if (diskCapacity == -1) { - return -1; - } - - capacity += diskCapacity; - } - } - - return capacity; + return TileDiskDrive.CAPACITY.getValue(); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java index cd56b6b2d..052c3921c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java @@ -4,8 +4,10 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.IStorageDisk; import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive; import com.raoulvdberge.refinedstorage.tile.config.*; +import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; @@ -20,6 +22,46 @@ public class TileDiskDrive extends TileNode { public static final TileDataParameter TYPE = IType.createParameter(); public static final TileDataParameter VOID_EXCESS = IExcessVoidable.createParameter(); public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); + public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { + @Override + public Integer getValue(TileDiskDrive tile) { + int stored = 0; + + for (IStorageDisk storage : tile.getNode().getItemStorages()) { + if (storage != null) { + stored += storage.getStored(); + } + } + + for (IStorageDisk storage : tile.getNode().getFluidStorages()) { + if (storage != null) { + stored += storage.getStored(); + } + } + + return stored; + } + }); + public static final TileDataParameter CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { + @Override + public Integer getValue(TileDiskDrive tile) { + int capacity = 0; + + for (IStorageDisk storage : tile.getNode().getItemStorages()) { + if (storage != null) { + capacity += storage.getCapacity(); + } + } + + for (IStorageDisk storage : tile.getNode().getFluidStorages()) { + if (storage != null) { + capacity += storage.getCapacity(); + } + } + + return capacity; + } + }); private static final String NBT_DISK_STATE = "DiskState_%d"; @@ -38,6 +80,8 @@ public class TileDiskDrive extends TileNode { dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(VOID_EXCESS); dataManager.addWatchedParameter(ACCESS_TYPE); + dataManager.addWatchedParameter(STORED); + dataManager.addWatchedParameter(CAPACITY); initDiskState(diskState); }