From 8b05309eb83cd96576b4fd65e809d1cf22c61f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20G=C3=BCttinger?= <38906805+Luca-Guettinger@users.noreply.github.com> Date: Sat, 30 May 2026 01:52:02 +0200 Subject: [PATCH] Fix NPE from map corruption when sync handlers register entries during init --- .../modularui/value/sync/PanelSyncManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java b/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java index c05ac874d..a5933373f 100644 --- a/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java +++ b/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java @@ -60,7 +60,13 @@ public PanelSyncManager(ModularSyncManager msm, boolean main) { @ApiStatus.Internal public void initialize(String panelName) { this.panelName = panelName; - this.syncHandlers.forEach((mapKey, syncHandler) -> syncHandler.init(mapKey, this)); + var snapshotKeys = new ArrayList<>(this.syncHandlers.keySet()); + for (var mapKey : snapshotKeys) { + var syncHandler = this.syncHandlers.get(mapKey); + if (syncHandler != null) { + syncHandler.init(mapKey, this); + } + } this.locked = true; this.init = true; this.subPanels.forEach((s, syncHandler) -> this.modularSyncManager.getMainPSM().registerPanelSyncHandler(s, syncHandler));