From a8a0a1082ceb05258f460d26b1684306052c87fa Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 14 Feb 2017 20:38:50 +0100 Subject: [PATCH] API improvements --- .../refinedstorage/api/IRSAPI.java | 7 +++++++ .../api/network/node/INetworkNodeManager.java | 13 +++--------- .../refinedstorage/apiimpl/API.java | 12 +++++++---- .../apiimpl/network/NetworkNodeManager.java | 21 ++++++++++++------- .../apiimpl/network/node/NetworkNode.java | 2 +- .../refinedstorage/block/BlockNode.java | 10 +++------ .../block/BlockStorageMonitor.java | 4 ++-- .../network/MessageNodeRemove.java | 2 +- 8 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java index 81961e5d5..643be038c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java @@ -42,6 +42,13 @@ public interface IRSAPI { */ INetworkNodeManager getNetworkNodeManager(int dimension); + /** + * Marks the network node saved data dirty for a given world. + * + * @param world the world + */ + void markNetworkNodesDirty(World world); + /** * @return the default storage disk behavior */ 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 8c1eb71a4..3e01abb98 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,7 +1,6 @@ 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; @@ -22,9 +21,10 @@ public interface INetworkNodeManager { /** * Removes a node from the registry at a given position. * - * @param pos the position + * @param pos the position + * @param notifyClient whether to notify the client of the removal */ - void removeNode(BlockPos pos); + void removeNode(BlockPos pos, boolean notifyClient); /** * Sets a node in the registry at a given position. @@ -43,11 +43,4 @@ 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/API.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java index 88bd71cc5..55b6e62d8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java @@ -23,6 +23,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPrev import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskRegistry; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeManager; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeRegistry; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.WorldSavedDataNetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterChannel; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRegistry; import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRegistry; @@ -44,10 +45,8 @@ import net.minecraftforge.fml.relauncher.Side; import javax.annotation.Nonnull; import java.lang.reflect.Field; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.function.BiPredicate; public class API implements IRSAPI { private static final IRSAPI INSTANCE = new API(); @@ -98,10 +97,15 @@ public class API implements IRSAPI { } @Override - public INetworkNodeManager getNetworkNodeManager(int dimension) { + public INetworkNodeManager getNetworkNodeManager(final int dimension) { Map provider = FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT ? networkNodeProviderClient : networkNodeProviderServer; - return provider.computeIfAbsent(dimension, r -> new NetworkNodeManager()); + return provider.computeIfAbsent(dimension, r -> new NetworkNodeManager(dimension)); + } + + @Override + public void markNetworkNodesDirty(World world) { + WorldSavedDataNetworkNode.getOrLoadData(world).markDirty(); } @Override 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 21ae36999..f1fc6767d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java @@ -1,10 +1,10 @@ package com.raoulvdberge.refinedstorage.apiimpl.network; +import com.raoulvdberge.refinedstorage.RS; 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 com.raoulvdberge.refinedstorage.network.MessageNodeRemove; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import javax.annotation.Nullable; import java.util.Collection; @@ -14,6 +14,12 @@ import java.util.Map; public class NetworkNodeManager implements INetworkNodeManager { private Map nodes = new HashMap<>(); + private int dimension; + + public NetworkNodeManager(int dimension) { + this.dimension = dimension; + } + @Override @Nullable public INetworkNode getNode(BlockPos pos) { @@ -21,8 +27,12 @@ public class NetworkNodeManager implements INetworkNodeManager { } @Override - public void removeNode(BlockPos pos) { + public void removeNode(BlockPos pos, boolean notifyClient) { nodes.remove(pos); + + if (notifyClient) { + RS.INSTANCE.network.sendToAll(new MessageNodeRemove(dimension, pos)); + } } @Override @@ -39,9 +49,4 @@ public class NetworkNodeManager implements INetworkNodeManager { public void clear() { nodes.clear(); } - - @Override - public void markDirty(World world) { - WorldSavedDataNetworkNode.getOrLoadData(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 728b032a1..9268ccca1 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 @@ -85,7 +85,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA @Override public void markDirty() { if (holder.world() != null) { - API.instance().getNetworkNodeManager(holder.world().provider.getDimension()).markDirty(holder.world()); + API.instance().markNetworkNodesDirty(holder.world()); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java index a77630835..9457b8605 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java @@ -1,10 +1,8 @@ package com.raoulvdberge.refinedstorage.block; -import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.network.MessageNodeRemove; import com.raoulvdberge.refinedstorage.tile.TileNode; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; @@ -56,15 +54,13 @@ public abstract class BlockNode extends BlockBase { INetworkNode node = manager.getNode(pos); - manager.removeNode(pos); - manager.markDirty(world); + manager.removeNode(pos, true); + + API.instance().markNetworkNodesDirty(world); if (node.getNetwork() != null) { node.getNetwork().getNodeGraph().rebuild(); } - - // Since Block#breakBlock is only called on the server and we can't trust TileEntity#invalidate: - RS.INSTANCE.network.sendToAll(new MessageNodeRemove(world.provider.getDimension(), pos)); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java index d9f968beb..bd1f563c8 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java @@ -31,9 +31,9 @@ public class BlockStorageMonitor extends BlockNode { if (!world.isRemote) { ItemStack holding = player.inventory.getCurrentItem(); - if (player.isSneaking() || holding.isEmpty()) { + if (player.isSneaking()) { tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side); - } else { + } else if (!holding.isEmpty()) { NetworkNodeStorageMonitor storageMonitor = ((TileStorageMonitor) world.getTileEntity(pos)).getNode(); if (storageMonitor.getType() != IType.ITEMS) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNodeRemove.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNodeRemove.java index 8fae2593e..a5184ca69 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNodeRemove.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNodeRemove.java @@ -38,7 +38,7 @@ public class MessageNodeRemove implements IMessage, IMessageHandler { INetworkNodeManager manager = API.instance().getNetworkNodeManager(message.dim); - manager.removeNode(message.pos); + manager.removeNode(message.pos, false); }); return null;