From be0ce75cebdbd1d812f132478f72a7cc615b9113 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 25 Feb 2023 21:27:35 -0600 Subject: [PATCH] refactor and prevent a potential null pointer in DhClientWorld --- .../seibel/lod/core/world/DhClientWorld.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/com/seibel/lod/core/world/DhClientWorld.java b/core/src/main/java/com/seibel/lod/core/world/DhClientWorld.java index ea9d21ee3..edeb4aa2f 100644 --- a/core/src/main/java/com/seibel/lod/core/world/DhClientWorld.java +++ b/core/src/main/java/com/seibel/lod/core/world/DhClientWorld.java @@ -4,6 +4,7 @@ import com.seibel.lod.core.level.DhClientLevel; import com.seibel.lod.core.level.IDhLevel; import com.seibel.lod.core.file.structure.ClientOnlySaveStructure; import com.seibel.lod.core.config.Config; +import com.seibel.lod.core.level.states.ClientRenderState; import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.objects.EventLoop; import com.seibel.lod.core.util.LodUtil; @@ -96,10 +97,16 @@ public class DhClientWorld extends AbstractDhWorld implements IDhClientWorld while (iterator.hasNext()) { DhClientLevel level = iterator.next(); - if (level.ClientRenderStateRef.get().quadtree.blockRenderDistance != newBlockRenderDistance) + ClientRenderState clientRenderState = level.ClientRenderStateRef.get(); + + if (clientRenderState != null && clientRenderState.quadtree != null) { - level.close(); - iterator.remove(); + if (clientRenderState.quadtree.blockRenderDistance != newBlockRenderDistance) + { + // TODO is this the best way to handle changing the render distance? + level.close(); + iterator.remove(); + } } } @@ -119,10 +126,10 @@ public class DhClientWorld extends AbstractDhWorld implements IDhClientWorld public void close() { this.saveAndFlush().join(); - for (DhClientLevel level : this.levels.values()) + for (DhClientLevel dhClientLevel : this.levels.values()) { - LOGGER.info("Unloading level " + level.clientLevelWrapper.getDimensionType().getDimensionName()); - level.close(); + LOGGER.info("Unloading level " + dhClientLevel.getLevelWrapper().getDimensionType().getDimensionName()); + dhClientLevel.close(); } this.levels.clear();