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); }