From 93ac94c251d0d512920defb8ba06b640db3e62ae Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 10 Dec 2022 16:01:03 +0100 Subject: [PATCH] Catch crash for network node desync. #3424 --- .../blockentity/NetworkNodeBlockEntity.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java b/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java index d7629fb53..ec6f3ab35 100644 --- a/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java +++ b/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java @@ -62,16 +62,26 @@ public abstract class NetworkNodeBlockEntity extends Base INetworkNodeManager manager = API.instance().getNetworkNodeManager((ServerLevel) level); - INetworkNode node = manager.getNode(worldPosition); + try { + INetworkNode node = manager.getNode(worldPosition); - if (node == null) { - LOGGER.warn("Expected a node @ {} but couldn't find it, creating a new one...", worldPosition); - node = createNode(level, worldPosition); - manager.setNode(worldPosition, node); - manager.markForSaving(); + if (node == null) { + LOGGER.warn("Expected a node @ {} but couldn't find it, creating a new one...", worldPosition); + node = createAndSetNode(manager); + } + + return (N) node; + } catch (ClassCastException e) { + LOGGER.warn("Node @ {} got desynced with it's block entity container, recreating", worldPosition, e); + return (N) createAndSetNode(manager); } + } - return (N) node; + private INetworkNode createAndSetNode(INetworkNodeManager manager) { + INetworkNode node = createNode(level, worldPosition); + manager.setNode(worldPosition, node); + manager.markForSaving(); + return node; } @Override