diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeManager.java index ad6cd4894..8c1eb71a4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeManager.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.api.network.node; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import javax.annotation.Nullable; import java.util.Collection; @@ -42,4 +43,11 @@ public interface INetworkNodeManager { * Clears all the nodes. */ void clear(); + + /** + * Marks the nodes dirty. + * + * @param world the world + */ + void markDirty(World world); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java index b03e4b2a3..c8022abce 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java @@ -2,7 +2,9 @@ package com.raoulvdberge.refinedstorage.apiimpl.network; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.WorldSavedDataNetworkNode; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import javax.annotation.Nullable; import java.util.Collection; @@ -37,4 +39,9 @@ public class NetworkNodeManager implements INetworkNodeManager { public void clear() { nodes.clear(); } + + @Override + public void markDirty(World world) { + WorldSavedDataNetworkNode.get(world).markDirty(); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index d6bc63fba..728b032a1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkNeighborhoodAware; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.util.IWrenchable; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode; import net.minecraft.block.state.IBlockState; import net.minecraft.item.Item; @@ -84,7 +85,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA @Override public void markDirty() { if (holder.world() != null) { - WorldSavedDataNetworkNode.get(holder.world()).markDirty(); + API.instance().getNetworkNodeManager(holder.world().provider.getDimension()).markDirty(holder.world()); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java index 40117e2de..b1b5559be 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java @@ -28,8 +28,8 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, public static final String ID = "fluid_storage"; class StorageFluid extends StorageDiskFluid { - public StorageFluid() { - super(NetworkNodeFluidStorage.this.getStorageTag(), NetworkNodeFluidStorage.this.getCapacity()); + public StorageFluid(NBTTagCompound tag) { + super(tag, NetworkNodeFluidStorage.this.getCapacity()); } @Override @@ -74,9 +74,8 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, private ItemHandlerFluid filters = new ItemHandlerFluid(9, new ItemHandlerListenerNetworkNode(this)); - private NBTTagCompound storageTag = StorageDiskFluid.getTag(); - - private StorageFluid storage; + private StorageFluid storage = new StorageFluid(StorageDiskFluid.getTag()); + private NBTTagCompound storageTagToRead; private EnumFluidStorageType type; @@ -99,15 +98,23 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, public void update() { super.update(); - if (storage == null && storageTag != null) { - storage = new StorageFluid(); + if (storageTagToRead != null) { + storage = new StorageFluid(storageTagToRead); + + storage.readFromNBT(); if (network != null) { network.getFluidStorageCache().invalidate(); } + + storageTagToRead = null; } } + public void onPlacedWithStorage(NBTTagCompound tag) { + storageTagToRead = tag; + } + public void onBreak() { if (storage != null) { storage.writeToNBT(); @@ -138,7 +145,7 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, super.read(tag); if (tag.hasKey(NBT_STORAGE)) { - storageTag = tag.getCompoundTag(NBT_STORAGE); + storageTagToRead = tag.getCompoundTag(NBT_STORAGE); } } @@ -151,11 +158,9 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - if (storage != null) { - storage.writeToNBT(); - } + storage.writeToNBT(); - tag.setTag(NBT_STORAGE, storageTag); + tag.setTag(NBT_STORAGE, storage.getStorageTag()); return tag; } @@ -202,7 +207,7 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, } public EnumFluidStorageType getType() { - if (type == null && holder.world().getBlockState(holder.pos()).getBlock() == RSBlocks.FLUID_STORAGE) { + if (type == null && holder.world() != null && holder.world().getBlockState(holder.pos()).getBlock() == RSBlocks.FLUID_STORAGE) { type = (EnumFluidStorageType) holder.world().getBlockState(holder.pos()).getValue(BlockFluidStorage.TYPE); } @@ -233,14 +238,6 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, markDirty(); } - public NBTTagCompound getStorageTag() { - return storageTag; - } - - public void setStorageTag(NBTTagCompound storageTag) { - this.storageTag = storageTag; - } - public StorageDiskFluid getStorage() { return storage; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java index bfde86fd1..e85c50911 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java @@ -28,8 +28,8 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto public static final String ID = "storage"; class StorageItem extends StorageDiskItem { - public StorageItem() { - super(NetworkNodeStorage.this.getStorageTag(), NetworkNodeStorage.this.getCapacity()); + public StorageItem(NBTTagCompound tag) { + super(tag, NetworkNodeStorage.this.getCapacity()); } @Override @@ -73,9 +73,8 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto private ItemHandlerBasic filters = new ItemHandlerBasic(9, new ItemHandlerListenerNetworkNode(this)); - private NBTTagCompound storageTag = StorageDiskItem.getTag(); - - private StorageItem storage; + private StorageItem storage = new StorageItem(StorageDiskItem.getTag()); + private NBTTagCompound storageTagToRead = null; private EnumItemStorageType type; @@ -89,28 +88,34 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto super(holder); } - @Override - public int getEnergyUsage() { - return RS.INSTANCE.config.storageUsage; - } - @Override public void update() { super.update(); - if (storage == null && storageTag != null) { - storage = new StorageItem(); + if (storageTagToRead != null) { + storage = new StorageItem(storageTagToRead); + + storage.readFromNBT(); if (network != null) { network.getItemStorageCache().invalidate(); } + + storageTagToRead = null; } } + public void onPlacedWithStorage(NBTTagCompound tag) { + storageTagToRead = tag; + } + + @Override + public int getEnergyUsage() { + return RS.INSTANCE.config.storageUsage; + } + public void onBreak() { - if (storage != null) { - storage.writeToNBT(); - } + storage.writeToNBT(); } @Override @@ -122,9 +127,7 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto @Override public void addItemStorages(List> storages) { - if (storage != null) { - storages.add(storage); - } + storages.add(storage); } @Override @@ -137,7 +140,7 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto super.read(tag); if (tag.hasKey(NBT_STORAGE)) { - storageTag = tag.getCompoundTag(NBT_STORAGE); + storageTagToRead = tag.getCompoundTag(NBT_STORAGE); } } @@ -150,11 +153,9 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - if (storage != null) { - storage.writeToNBT(); - } + storage.writeToNBT(); - tag.setTag(NBT_STORAGE, storageTag); + tag.setTag(NBT_STORAGE, storage.getStorageTag()); return tag; } @@ -201,7 +202,7 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto } public EnumItemStorageType getType() { - if (type == null && holder.world().getBlockState(holder.pos()).getBlock() == RSBlocks.STORAGE) { + if (type == null && holder.world() != null && holder.world().getBlockState(holder.pos()).getBlock() == RSBlocks.STORAGE) { type = (EnumItemStorageType) holder.world().getBlockState(holder.pos()).getValue(BlockStorage.TYPE); } @@ -244,14 +245,6 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto markDirty(); } - public NBTTagCompound getStorageTag() { - return storageTag; - } - - public void setStorageTag(NBTTagCompound storageTag) { - this.storageTag = storageTag; - } - public StorageDiskItem getStorage() { return storage; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java index 34418fd42..f37ebbe96 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java @@ -32,6 +32,10 @@ public class StorageDiskFluid implements IStorageDisk { this.capacity = capacity; } + public NBTTagCompound getStorageTag() { + return tag; + } + @Override public void readFromNBT() { NBTTagList list = (NBTTagList) tag.getTag(NBT_FLUIDS); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java index d09af790c..003890cec 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java @@ -46,6 +46,10 @@ public class StorageDiskItem implements IStorageDisk { this.capacity = capacity; } + public NBTTagCompound getStorageTag() { + return tag; + } + @Override public void readFromNBT() { NBTTagList list = (NBTTagList) tag.getTag(NBT_ITEMS); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidStorage.java index 09075a278..f84e84a02 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidStorage.java @@ -77,7 +77,7 @@ public class BlockFluidStorage extends BlockNode { super.onBlockPlacedBy(world, pos, state, player, stack); if (!world.isRemote && stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeFluidStorage.NBT_STORAGE)) { - ((TileFluidStorage) world.getTileEntity(pos)).getNode().setStorageTag(stack.getTagCompound().getCompoundTag(NetworkNodeFluidStorage.NBT_STORAGE)); + ((TileFluidStorage) world.getTileEntity(pos)).getNode().onPlacedWithStorage(stack.getTagCompound().getCompoundTag(NetworkNodeFluidStorage.NBT_STORAGE)); } } @@ -96,7 +96,10 @@ public class BlockFluidStorage extends BlockNode { ItemStack stack = new ItemStack(RSBlocks.FLUID_STORAGE, 1, getMetaFromState(state)); stack.setTagCompound(new NBTTagCompound()); - stack.getTagCompound().setTag(NetworkNodeFluidStorage.NBT_STORAGE, ((TileFluidStorage) world.getTileEntity(pos)).getNode().getStorageTag()); + + storage.getNode().getStorage().writeToNBT(); + + stack.getTagCompound().setTag(NetworkNodeFluidStorage.NBT_STORAGE, storage.getNode().getStorage().getStorageTag()); drops.add(stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java index 818cdb076..a77630835 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java @@ -57,6 +57,7 @@ public abstract class BlockNode extends BlockBase { INetworkNode node = manager.getNode(pos); manager.removeNode(pos); + manager.markDirty(world); if (node.getNetwork() != null) { node.getNetwork().getNodeGraph().rebuild(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorage.java index cdd7899eb..b6224dcc5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorage.java @@ -77,7 +77,7 @@ public class BlockStorage extends BlockNode { super.onBlockPlacedBy(world, pos, state, player, stack); if (!world.isRemote && stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeStorage.NBT_STORAGE)) { - ((TileStorage) world.getTileEntity(pos)).getNode().setStorageTag(stack.getTagCompound().getCompoundTag(NetworkNodeStorage.NBT_STORAGE)); + ((TileStorage) world.getTileEntity(pos)).getNode().onPlacedWithStorage(stack.getTagCompound().getCompoundTag(NetworkNodeStorage.NBT_STORAGE)); } } @@ -96,7 +96,10 @@ public class BlockStorage extends BlockNode { ItemStack stack = new ItemStack(RSBlocks.STORAGE, 1, getMetaFromState(state)); stack.setTagCompound(new NBTTagCompound()); - stack.getTagCompound().setTag(NetworkNodeStorage.NBT_STORAGE, ((TileStorage) world.getTileEntity(pos)).getNode().getStorageTag()); + + storage.getNode().getStorage().writeToNBT(); + + stack.getTagCompound().setTag(NetworkNodeStorage.NBT_STORAGE, storage.getNode().getStorage().getStorageTag()); drops.add(stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java index e5d0fec05..b907017ee 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidStorage.java @@ -2,7 +2,6 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidStorage; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskFluid; import com.raoulvdberge.refinedstorage.tile.config.*; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; @@ -19,7 +18,7 @@ public class TileFluidStorage extends TileNode { public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileFluidStorage tile) { - return StorageDiskFluid.getStored(tile.getNode().getStorageTag()); + return tile.getNode().getStorage().getStored(); } }); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java index 682e20b70..3ca1bb5ef 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorage.java @@ -2,7 +2,6 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorage; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskItem; import com.raoulvdberge.refinedstorage.tile.config.*; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; @@ -18,7 +17,7 @@ public class TileStorage extends TileNode { public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { - return StorageDiskItem.getStored(tile.getNode().getStorageTag()); + return tile.getNode().getStorage().getStored(); } }); public static final TileDataParameter VOID_EXCESS = IExcessVoidable.createParameter();