From d1126afc44549b8736bcad2ec5d921be599154eb Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 23 Aug 2022 22:43:08 -0500 Subject: [PATCH] Add DhWorld.GetAllLevels() and ILevel.GetLevelWrapper() --- .../lod/core/a7/level/DhClientLevel.java | 9 +++++++- .../core/a7/level/DhClientServerLevel.java | 9 +++++++- .../lod/core/a7/level/DhServerLevel.java | 11 +++++++++- .../com/seibel/lod/core/a7/level/ILevel.java | 7 ++++++- .../core/a7/world/DhClientServerWorld.java | 21 +++++++++++++++++-- .../lod/core/a7/world/DhClientWorld.java | 19 ++++++++++++++++- .../lod/core/a7/world/DhServerWorld.java | 19 ++++++++++++++++- .../com/seibel/lod/core/a7/world/DhWorld.java | 6 ++++-- 8 files changed, 91 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/a7/level/DhClientLevel.java b/src/main/java/com/seibel/lod/core/a7/level/DhClientLevel.java index 34a54204d..66c711a78 100644 --- a/src/main/java/com/seibel/lod/core/a7/level/DhClientLevel.java +++ b/src/main/java/com/seibel/lod/core/a7/level/DhClientLevel.java @@ -81,7 +81,13 @@ public class DhClientLevel implements IClientLevel { public IClientLevelWrapper getClientLevelWrapper() { return level; } - + + @Override + public ILevelWrapper getLevelWrapper() + { + return this.level; + } + @Override public int getMinY() { return level.getMinHeight(); @@ -97,4 +103,5 @@ public class DhClientLevel implements IClientLevel { renderFileHandler.close(); LOGGER.info("Closed DHLevel for {}", level); } + } diff --git a/src/main/java/com/seibel/lod/core/a7/level/DhClientServerLevel.java b/src/main/java/com/seibel/lod/core/a7/level/DhClientServerLevel.java index a700a5609..d0fe7eb5f 100644 --- a/src/main/java/com/seibel/lod/core/a7/level/DhClientServerLevel.java +++ b/src/main/java/com/seibel/lod/core/a7/level/DhClientServerLevel.java @@ -22,6 +22,7 @@ import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper; +import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper; import org.apache.logging.log4j.Logger; @@ -129,7 +130,13 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel { public IClientLevelWrapper getClientLevelWrapper() { return clientLevel; } - + + @Override + public ILevelWrapper getLevelWrapper() + { + return this.serverLevel; + } + @Override public void dumpRamUsage() { //TODO diff --git a/src/main/java/com/seibel/lod/core/a7/level/DhServerLevel.java b/src/main/java/com/seibel/lod/core/a7/level/DhServerLevel.java index c184b76ec..f643eaab0 100644 --- a/src/main/java/com/seibel/lod/core/a7/level/DhServerLevel.java +++ b/src/main/java/com/seibel/lod/core/a7/level/DhServerLevel.java @@ -4,12 +4,14 @@ import com.seibel.lod.core.a7.util.FileScanner; import com.seibel.lod.core.a7.save.io.file.DataFileHandler; import com.seibel.lod.core.a7.save.structure.LocalSaveStructure; import com.seibel.lod.core.logging.DhLoggerBuilder; +import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper; import org.apache.logging.log4j.Logger; import java.util.concurrent.CompletableFuture; -public class DhServerLevel implements IServerLevel { +public class DhServerLevel implements IServerLevel +{ private static final Logger LOGGER = DhLoggerBuilder.getLogger(); public final LocalSaveStructure save; @@ -57,4 +59,11 @@ public class DhServerLevel implements IServerLevel { public IServerLevelWrapper getServerLevelWrapper() { return level; } + + @Override + public ILevelWrapper getLevelWrapper() + { + return this.level; + } + } diff --git a/src/main/java/com/seibel/lod/core/a7/level/ILevel.java b/src/main/java/com/seibel/lod/core/a7/level/ILevel.java index 5370ca7af..a6c4c311a 100644 --- a/src/main/java/com/seibel/lod/core/a7/level/ILevel.java +++ b/src/main/java/com/seibel/lod/core/a7/level/ILevel.java @@ -4,9 +4,14 @@ import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; import java.util.concurrent.CompletableFuture; -public interface ILevel extends AutoCloseable { +public interface ILevel extends AutoCloseable +{ int getMinY(); CompletableFuture save(); void dumpRamUsage(); + + /** May return either a client or server level wrapper. */ + ILevelWrapper getLevelWrapper(); + } diff --git a/src/main/java/com/seibel/lod/core/a7/world/DhClientServerWorld.java b/src/main/java/com/seibel/lod/core/a7/world/DhClientServerWorld.java index 55528a9fb..61279c272 100644 --- a/src/main/java/com/seibel/lod/core/a7/world/DhClientServerWorld.java +++ b/src/main/java/com/seibel/lod/core/a7/world/DhClientServerWorld.java @@ -1,6 +1,7 @@ package com.seibel.lod.core.a7.world; import com.seibel.lod.core.a7.level.DhClientServerLevel; +import com.seibel.lod.core.a7.level.ILevel; import com.seibel.lod.core.a7.save.structure.LocalSaveStructure; import com.seibel.lod.core.config.Config; import com.seibel.lod.core.util.EventLoop; @@ -16,7 +17,8 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; -public class DhClientServerWorld extends DhWorld implements IClientWorld, IServerWorld { +public class DhClientServerWorld extends DhWorld implements IClientWorld, IServerWorld +{ private final HashMap levels; public final LocalSaveStructure saveStructure; public ExecutorService dhTickerThread = LodUtil.makeSingleThreadPool("DHTickerThread", 2); @@ -54,7 +56,22 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe public DhClientServerLevel getLevel(ILevelWrapper wrapper) { return levels.get(wrapper); } - + + @Override + public ILevel[] getAllLoadedLevels() + { + ILevel[] array = new ILevel[this.levels.size()]; + + int i = 0; + for (ILevel level : this.levels.values()) + { + array[i] = level; + i++; + } + + return array; + } + @Override public void unloadLevel(ILevelWrapper wrapper) { if (levels.containsKey(wrapper)) { diff --git a/src/main/java/com/seibel/lod/core/a7/world/DhClientWorld.java b/src/main/java/com/seibel/lod/core/a7/world/DhClientWorld.java index 06eec718f..42f648ea5 100644 --- a/src/main/java/com/seibel/lod/core/a7/world/DhClientWorld.java +++ b/src/main/java/com/seibel/lod/core/a7/world/DhClientWorld.java @@ -2,6 +2,7 @@ package com.seibel.lod.core.a7.world; import com.seibel.lod.core.a7.level.DhClientLevel; import com.seibel.lod.core.a7.level.DhClientServerLevel; +import com.seibel.lod.core.a7.level.ILevel; import com.seibel.lod.core.a7.save.structure.ClientOnlySaveStructure; import com.seibel.lod.core.config.Config; import com.seibel.lod.core.util.DetailDistanceUtil; @@ -16,7 +17,8 @@ import java.util.Iterator; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; -public class DhClientWorld extends DhWorld implements IClientWorld { +public class DhClientWorld extends DhWorld implements IClientWorld +{ private final HashMap levels; public final ClientOnlySaveStructure saveStructure; public ExecutorService dhTickerThread = LodUtil.makeSingleThreadPool("DHTickerThread", 2); @@ -45,6 +47,21 @@ public class DhClientWorld extends DhWorld implements IClientWorld { if (!(wrapper instanceof IClientLevelWrapper)) return null; return levels.get(wrapper); } + + @Override + public ILevel[] getAllLoadedLevels() + { + ILevel[] array = new ILevel[this.levels.size()]; + + int i = 0; + for (ILevel level : this.levels.values()) + { + array[i] = level; + i++; + } + + return array; + } @Override public void unloadLevel(ILevelWrapper wrapper) { diff --git a/src/main/java/com/seibel/lod/core/a7/world/DhServerWorld.java b/src/main/java/com/seibel/lod/core/a7/world/DhServerWorld.java index 5990ed46b..b4d3681f8 100644 --- a/src/main/java/com/seibel/lod/core/a7/world/DhServerWorld.java +++ b/src/main/java/com/seibel/lod/core/a7/world/DhServerWorld.java @@ -1,6 +1,7 @@ package com.seibel.lod.core.a7.world; import com.seibel.lod.core.a7.level.DhServerLevel; +import com.seibel.lod.core.a7.level.ILevel; import com.seibel.lod.core.a7.save.structure.LocalSaveStructure; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; @@ -10,7 +11,8 @@ import java.io.File; import java.util.HashMap; import java.util.concurrent.CompletableFuture; -public class DhServerWorld extends DhWorld implements IServerWorld { +public class DhServerWorld extends DhWorld implements IServerWorld +{ private final HashMap levels; public final LocalSaveStructure saveStructure; @@ -36,6 +38,21 @@ public class DhServerWorld extends DhWorld implements IServerWorld { if (!(wrapper instanceof IServerLevelWrapper)) return null; return levels.get(wrapper); } + + @Override + public ILevel[] getAllLoadedLevels() + { + ILevel[] array = new ILevel[this.levels.size()]; + + int i = 0; + for (ILevel level : this.levels.values()) + { + array[i] = level; + i++; + } + + return array; + } @Override public void unloadLevel(ILevelWrapper wrapper) { diff --git a/src/main/java/com/seibel/lod/core/a7/world/DhWorld.java b/src/main/java/com/seibel/lod/core/a7/world/DhWorld.java index c879ae89f..2ec0d60c5 100644 --- a/src/main/java/com/seibel/lod/core/a7/world/DhWorld.java +++ b/src/main/java/com/seibel/lod/core/a7/world/DhWorld.java @@ -8,7 +8,8 @@ import org.apache.logging.log4j.Logger; import java.io.Closeable; import java.util.concurrent.CompletableFuture; -public abstract class DhWorld implements Closeable { +public abstract class DhWorld implements Closeable +{ protected static final Logger LOGGER = DhLoggerBuilder.getLogger(); public final WorldEnvironment environment; @@ -19,7 +20,8 @@ public abstract class DhWorld implements Closeable { public abstract ILevel getOrLoadLevel(ILevelWrapper wrapper); public abstract ILevel getLevel(ILevelWrapper wrapper); - + public abstract ILevel[] getAllLoadedLevels(); + public abstract void unloadLevel(ILevelWrapper wrapper); public abstract CompletableFuture saveAndFlush();