diff --git a/CHANGELOG.md b/CHANGELOG.md index c96ff6761..a2ff0f4a7 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.4.8 - Fixed missing config categories in ingame config (raoulvdberge) - Fixed Controller not working anymore after changing redstone setting (raoulvdberge) +- Fixed crash when placing or destroying network blocks (raoulvdberge) ### 1.4.7 - Fixed bug where Portable Grid would dupe in inventory (raoulvdberge) 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 aa03aed85..ee7b7b361 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 @@ -38,11 +38,6 @@ public interface INetworkNodeManager { */ Collection all(); - /** - * Clears all the nodes. - */ - void clear(); - /** * Marks the network node manager for saving. */ 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 be8c62aa8..bf6bdac82 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java @@ -20,7 +20,7 @@ public class NetworkNodeListener { if (e.phase == TickEvent.Phase.END) { for (INetworkNode node : API.instance().getNetworkNodeManager(e.world).all()) { - if (e.world.isBlockLoaded(node.getPos())) { + if (node.getWorld() != null && e.world.isBlockLoaded(node.getPos())) { node.update(); } } 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 d8eb7146a..e27b9d185 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeManager.java @@ -12,8 +12,8 @@ import net.minecraftforge.common.util.Constants; import javax.annotation.Nullable; import java.util.Collection; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; public class NetworkNodeManager extends WorldSavedData implements INetworkNodeManager { @@ -24,7 +24,7 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa private static final String NBT_NODE_DATA = "Data"; private static final String NBT_NODE_POS = "Pos"; - private Map nodes = new HashMap<>(); + private Map nodes = new ConcurrentHashMap<>(); public NetworkNodeManager(String s) { super(s); @@ -32,7 +32,7 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa @Override public void readFromNBT(NBTTagCompound tag) { - clear(); + Map newNodes = new ConcurrentHashMap<>(); if (tag.hasKey(NBT_NODES)) { NBTTagList list = tag.getTagList(NBT_NODES, Constants.NBT.TAG_COMPOUND); @@ -53,7 +53,7 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa Function factory = API.instance().getNetworkNodeRegistry().get(id); if (factory != null) { - setNode(pos, factory.apply(data)); + newNodes.put(pos, factory.apply(data)); RSUtils.debugLog("Node at " + pos + " read... (" + (++read) + "/" + toRead + ")"); } else { @@ -65,6 +65,8 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa } else { RSUtils.debugLog("Cannot read nodes, as there is no 'nodes' tag on this WorldSavedData"); } + + this.nodes = newNodes; } @Override @@ -117,13 +119,6 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa return nodes.values(); } - @Override - public void clear() { - RSUtils.debugLog("Clearing all nodes!"); - - nodes.clear(); - } - @Override public void markForSaving() { markDirty(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java index 106f07176..95a8e00c9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java @@ -105,7 +105,7 @@ public abstract class TileNode extends TileBase implement NetworkNode node = (NetworkNode) API.instance().getNetworkNodeManager(getWorld()).getNode(pos); if (node == null) { - throw new IllegalStateException("Node cannot be null!"); + throw new IllegalStateException("Node cannot be null at " + pos + "!"); } if (node.getContainer().world() == null) {