diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageDisk.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageDisk.java index ea6978739..64874562e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageDisk.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageDisk.java @@ -28,9 +28,11 @@ public interface IStorageDisk extends IStorage { boolean isValid(ItemStack stack); /** - * Called when the storage changes. + * Sets a listener that is called when the storage changes. + * + * @param listener the listener */ - void onChanged(); + void setListener(Runnable listener); /** * Reads the storage from NBT. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java index 99ae26c8a..22bc22b89 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java @@ -54,18 +54,11 @@ public class NetworkNodeListener { } } - @SubscribeEvent - public void onWorldSave(WorldEvent.Save e) { - WorldSavedDataNetworkNode.get(e.getWorld()); - } - @SubscribeEvent public void onWorldLoad(WorldEvent.Load e) { - WorldSavedDataNetworkNode.get(e.getWorld()); - } - - @SubscribeEvent - public void onWorldUnload(WorldEvent.Unload e) { + // Clear all data from a possible previous load, so we start with a clean slate API.instance().getNetworkNodeManager(e.getWorld().provider.getDimension()).clear(); + + WorldSavedDataNetworkNode.getOrLoadData(e.getWorld()); } } 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 c8022abce..21ae36999 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java @@ -42,6 +42,6 @@ public class NetworkNodeManager implements INetworkNodeManager { @Override public void markDirty(World world) { - WorldSavedDataNetworkNode.get(world).markDirty(); + WorldSavedDataNetworkNode.getOrLoadData(world).markDirty(); } } 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 b1b5559be..259110657 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 @@ -30,6 +30,8 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, class StorageFluid extends StorageDiskFluid { public StorageFluid(NBTTagCompound tag) { super(tag, NetworkNodeFluidStorage.this.getCapacity()); + + this.setListener(NetworkNodeFluidStorage.this::markDirty); } @Override @@ -56,13 +58,6 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, public boolean isVoiding() { return voidExcess; } - - @Override - public void onChanged() { - super.onChanged(); - - markDirty(); - } } public static final String NBT_STORAGE = "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 e85c50911..98aa32c4f 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 @@ -30,6 +30,8 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto class StorageItem extends StorageDiskItem { public StorageItem(NBTTagCompound tag) { super(tag, NetworkNodeStorage.this.getCapacity()); + + this.setListener(NetworkNodeStorage.this::markDirty); } @Override @@ -55,13 +57,6 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto public boolean isVoiding() { return voidExcess; } - - @Override - public void onChanged() { - super.onChanged(); - - markDirty(); - } } public static final String NBT_STORAGE = "Storage"; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/WorldSavedDataNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/WorldSavedDataNetworkNode.java index 82f17f674..dc29528a6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/WorldSavedDataNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/WorldSavedDataNetworkNode.java @@ -77,7 +77,7 @@ public class WorldSavedDataNetworkNode extends WorldSavedData { return tag; } - public static WorldSavedDataNetworkNode get(World world) { + public static WorldSavedDataNetworkNode getOrLoadData(World world) { MapStorage storage = world.getPerWorldStorage(); WorldSavedDataNetworkNode instance = (WorldSavedDataNetworkNode) storage.getOrLoadData(WorldSavedDataNetworkNode.class, NAME); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java index 76268dbfc..f693f2ec5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageFluidDiskDrive.java @@ -21,6 +21,17 @@ public class StorageFluidDiskDrive implements IStorageDisk { public StorageFluidDiskDrive(NetworkNodeDiskDrive diskDrive, IStorageDisk parent) { this.diskDrive = diskDrive; this.parent = parent; + this.parent.setListener(() -> { + diskDrive.markDirty(); + + int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); + + if (lastState != currentState) { + lastState = currentState; + + RSUtils.updateBlock(diskDrive.getHolder().world(), diskDrive.getHolder().pos()); + } + }); this.lastState = TileDiskDrive.getDiskState(getStored(), getCapacity()); } @@ -81,18 +92,8 @@ public class StorageFluidDiskDrive implements IStorageDisk { } @Override - public void onChanged() { - parent.onChanged(); - - diskDrive.markDirty(); - - int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); - - if (lastState != currentState) { - lastState = currentState; - - RSUtils.updateBlock(diskDrive.getHolder().world(), diskDrive.getHolder().pos()); - } + public void setListener(Runnable listener) { + // NO OP } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java index 5b4ccf56b..cf4c5aa34 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/StorageItemDiskDrive.java @@ -21,6 +21,17 @@ public class StorageItemDiskDrive implements IStorageDisk { public StorageItemDiskDrive(NetworkNodeDiskDrive diskDrive, IStorageDisk parent) { this.diskDrive = diskDrive; this.parent = parent; + this.parent.setListener(() -> { + diskDrive.markDirty(); + + int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); + + if (lastState != currentState) { + lastState = currentState; + + RSUtils.updateBlock(diskDrive.getHolder().world(), diskDrive.getHolder().pos()); + } + }); this.lastState = TileDiskDrive.getDiskState(getStored(), getCapacity()); } @@ -81,18 +92,8 @@ public class StorageItemDiskDrive implements IStorageDisk { } @Override - public void onChanged() { - parent.onChanged(); - - diskDrive.markDirty(); - - int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); - - if (lastState != currentState) { - lastState = currentState; - - RSUtils.updateBlock(diskDrive.getHolder().world(), diskDrive.getHolder().pos()); - } + public void setListener(Runnable listener) { + // NO OP } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java index ae04fe526..1d1a25f81 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageFluidDiskManipulator.java @@ -20,6 +20,17 @@ public class StorageFluidDiskManipulator implements IStorageDisk { public StorageFluidDiskManipulator(NetworkNodeDiskManipulator diskManipulator, IStorageDisk parent) { this.diskManipulator = diskManipulator; this.parent = parent; + this.parent.setListener(() -> { + diskManipulator.markDirty(); + + int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); + + if (lastState != currentState) { + lastState = currentState; + + RSUtils.updateBlock(diskManipulator.getHolder().world(), diskManipulator.getHolder().pos()); + } + }); this.lastState = TileDiskDrive.getDiskState(getStored(), getCapacity()); } @@ -39,18 +50,8 @@ public class StorageFluidDiskManipulator implements IStorageDisk { } @Override - public void onChanged() { - parent.onChanged(); - - diskManipulator.markDirty(); - - int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); - - if (lastState != currentState) { - lastState = currentState; - - RSUtils.updateBlock(diskManipulator.getHolder().world(), diskManipulator.getHolder().pos()); - } + public void setListener(Runnable listener) { + // NO OP } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java index fbeaa8466..7eb481d41 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/StorageItemDiskManipulator.java @@ -20,6 +20,17 @@ public class StorageItemDiskManipulator implements IStorageDisk { public StorageItemDiskManipulator(NetworkNodeDiskManipulator diskManipulator, IStorageDisk parent) { this.diskManipulator = diskManipulator; this.parent = parent; + this.parent.setListener(() -> { + diskManipulator.markDirty(); + + int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); + + if (lastState != currentState) { + lastState = currentState; + + RSUtils.updateBlock(diskManipulator.getHolder().world(), diskManipulator.getHolder().pos()); + } + }); this.lastState = TileDiskDrive.getDiskState(getStored(), getCapacity()); } @@ -39,18 +50,8 @@ public class StorageItemDiskManipulator implements IStorageDisk { } @Override - public void onChanged() { - parent.onChanged(); - - diskManipulator.markDirty(); - - int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity()); - - if (lastState != currentState) { - lastState = currentState; - - RSUtils.updateBlock(diskManipulator.getHolder().world(), diskManipulator.getHolder().pos()); - } + public void setListener(Runnable listener) { + // NO OP } @Override 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 f37ebbe96..aa43937aa 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskFluid.java @@ -27,6 +27,9 @@ public class StorageDiskFluid implements IStorageDisk { private NonNullList stacks = NonNullList.create(); + private Runnable listener = () -> { + }; + public StorageDiskFluid(NBTTagCompound tag, int capacity) { this.tag = tag; this.capacity = capacity; @@ -92,7 +95,7 @@ public class StorageDiskFluid implements IStorageDisk { otherStack.amount += remainingSpace; - onChanged(); + listener.run(); } return isVoiding() ? null : RSUtils.copyStackWithSize(otherStack, size - remainingSpace); @@ -102,7 +105,7 @@ public class StorageDiskFluid implements IStorageDisk { otherStack.amount += size; - onChanged(); + listener.run(); } return null; @@ -126,7 +129,7 @@ public class StorageDiskFluid implements IStorageDisk { stacks.add(RSUtils.copyStackWithSize(stack, remainingSpace)); - onChanged(); + listener.run(); } return isVoiding() ? null : RSUtils.copyStackWithSize(stack, size - remainingSpace); @@ -136,7 +139,7 @@ public class StorageDiskFluid implements IStorageDisk { stacks.add(RSUtils.copyStackWithSize(stack, size)); - onChanged(); + listener.run(); } return null; @@ -161,7 +164,7 @@ public class StorageDiskFluid implements IStorageDisk { tag.setInteger(NBT_STORED, getStored() - size); - onChanged(); + listener.run(); } return RSUtils.copyStackWithSize(otherStack, size); @@ -171,11 +174,6 @@ public class StorageDiskFluid implements IStorageDisk { return null; } - @Override - public void onChanged() { - // NO OP - } - @Override public int getStored() { return getStored(tag); @@ -216,6 +214,11 @@ public class StorageDiskFluid implements IStorageDisk { return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_FLUIDS) && stack.getTagCompound().hasKey(NBT_STORED); } + @Override + public void setListener(Runnable listener) { + this.listener = listener; + } + public static NBTTagCompound getShareTag(NBTTagCompound tag) { NBTTagCompound otherTag = new NBTTagCompound(); 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 003890cec..0f8d0301f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageDiskItem.java @@ -35,6 +35,9 @@ public class StorageDiskItem implements IStorageDisk { private NBTTagCompound tag; private int capacity; + private Runnable listener = () -> { + }; + private NonNullList stacks = NonNullList.create(); /** @@ -136,7 +139,7 @@ public class StorageDiskItem implements IStorageDisk { otherStack.grow(remainingSpace); - onChanged(); + listener.run(); } return isVoiding() ? null : ItemHandlerHelper.copyStackWithSize(otherStack, size - remainingSpace); @@ -146,7 +149,7 @@ public class StorageDiskItem implements IStorageDisk { otherStack.grow(size); - onChanged(); + listener.run(); } return null; @@ -170,7 +173,7 @@ public class StorageDiskItem implements IStorageDisk { stacks.add(ItemHandlerHelper.copyStackWithSize(stack, remainingSpace)); - onChanged(); + listener.run(); } return isVoiding() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); @@ -180,7 +183,7 @@ public class StorageDiskItem implements IStorageDisk { stacks.add(ItemHandlerHelper.copyStackWithSize(stack, size)); - onChanged(); + listener.run(); } return null; @@ -205,7 +208,7 @@ public class StorageDiskItem implements IStorageDisk { tag.setInteger(NBT_STORED, getStored() - size); - onChanged(); + listener.run(); } return ItemHandlerHelper.copyStackWithSize(otherStack, size); @@ -236,13 +239,13 @@ public class StorageDiskItem implements IStorageDisk { } @Override - public void onChanged() { - // NO OP + public boolean isValid(ItemStack stack) { + return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_ITEMS) && stack.getTagCompound().hasKey(NBT_STORED); } @Override - public boolean isValid(ItemStack stack) { - return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_ITEMS) && stack.getTagCompound().hasKey(NBT_STORED); + public void setListener(Runnable listener) { + this.listener = listener; } @Override