From cc2febcb5cc983867ac7e0d68d21a46cf6fe9f11 Mon Sep 17 00:00:00 2001 From: Acuadragon100 <8165958-acuadragon100@users.noreply.gitlab.com> Date: Sun, 3 May 2026 17:58:13 +0200 Subject: [PATCH] Fix current level unloading on the client. --- .../core/world/DhClientServerWorld.java | 20 +++++++++++++------ .../core/world/DhClientWorld.java | 6 ++++-- .../core/world/DhServerWorld.java | 6 ++++-- .../distanthorizons/core/world/IDhWorld.java | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java index 937ed97a2..e943e8772 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java @@ -37,7 +37,7 @@ import java.util.concurrent.CompletableFuture; public class DhClientServerWorld extends AbstractDhServerWorld implements IDhClientWorld { - private final Set dhLevels = Collections.synchronizedSet(new HashSet<>()); + private final Map> dhLevels = Collections.synchronizedMap(new HashMap<>()); private final Timer clientTickTimer = TimerUtil.CreateTimer("ClientTickTimer"); @@ -57,7 +57,7 @@ public class DhClientServerWorld extends AbstractDhServerWorld Collections.synchronizedSet(new HashSet<>())); ApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelLoadEvent.class, new DhApiLevelLoadEvent.EventParam(wrapper)); return level; } @@ -119,13 +119,14 @@ public class DhClientServerWorld extends AbstractDhServerWorld wrappers = dhLevels.get(level); + wrappers.remove(wrapper); + if (wrappers.isEmpty()) { + level.stopRenderer(); + } wrapper.onUnload(); // We still want to unload the wrapper though. } ApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(wrapper)); + return true; } + return false; } @@ -165,7 +173,7 @@ public class DhClientServerWorld extends AbstractDhServerWorld } @Override - public void unloadLevel(@NotNull ILevelWrapper wrapper) + public boolean unloadLevel(@NotNull ILevelWrapper wrapper) { if (!(wrapper instanceof IServerLevelWrapper)) { - return; + return false; } if (this.dhLevelByLevelWrapper.containsKey(wrapper)) @@ -97,7 +97,9 @@ public class DhServerWorld extends AbstractDhServerWorld wrapper.onUnload(); this.dhLevelByLevelWrapper.remove(wrapper).close(); ApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(wrapper)); + return true; } + return false; } @Override diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/IDhWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/IDhWorld.java index f99db3c2b..c981c25cb 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/IDhWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/IDhWorld.java @@ -49,6 +49,6 @@ public interface IDhWorld extends Closeable Iterable getAllLoadedLevels(); int getLoadedLevelCount(); - void unloadLevel(@NotNull ILevelWrapper levelWrapper); + boolean unloadLevel(@NotNull ILevelWrapper levelWrapper); }