From 932146eea855184ce82c8bd9f3e4524440b788ba Mon Sep 17 00:00:00 2001 From: TomTheFurry Date: Fri, 1 Jul 2022 18:17:07 +0800 Subject: [PATCH] Milestone!! Both fabric:runclient & fabric:runserver now works!!!!! (in 1.18.2 for now) --- .../lod/core/a7/level/DhClientLevel.java | 7 +++++ .../core/a7/level/DhClientServerLevel.java | 4 +++ .../lod/core/a7/level/DhServerLevel.java | 7 +++++ .../a7/save/structure/LocalSaveStructure.java | 7 ++++- .../seibel/lod/core/a7/util/FileScanner.java | 4 +-- .../core/a7/world/DhClientServerWorld.java | 2 ++ .../lod/core/a7/world/DhClientWorld.java | 2 ++ .../lod/core/a7/world/DhServerWorld.java | 2 ++ .../core/config/file/ConfigFileHandling.java | 3 +- .../dependencyInjection/SingletonHandler.java | 5 +++- .../com/seibel/lod/core/util/ColorUtil.java | 2 -- .../com/seibel/lod/core/util/LodUtil.java | 28 +++++++++---------- 12 files changed, 52 insertions(+), 21 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 3198e80f6..c4e853eb9 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 @@ -9,15 +9,18 @@ import com.seibel.lod.core.a7.render.RenderBufferHandler; import com.seibel.lod.core.a7.save.structure.ClientOnlySaveStructure; import com.seibel.lod.core.config.Config; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.objects.math.Mat4f; import com.seibel.lod.core.render.a7LodRenderer; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper; import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; +import org.apache.logging.log4j.Logger; import java.util.concurrent.CompletableFuture; public class DhClientLevel implements IClientLevel { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(); private static final IMinecraftClientWrapper MC_CLIENT = SingletonHandler.get(IMinecraftClientWrapper.class); public final ClientOnlySaveStructure save; public final RemoteDataFileHandler dataFileHandler; @@ -29,6 +32,8 @@ public class DhClientLevel implements IClientLevel { public DhClientLevel(ClientOnlySaveStructure save, ILevelWrapper level) { this.save = save; + save.getDataFolder(level).mkdirs(); + save.getRenderCacheFolder(level).mkdirs(); dataFileHandler = new RemoteDataFileHandler(); renderFileHandler = new RenderFileHandler(dataFileHandler, this, save.getRenderCacheFolder(level)); tree = new LodQuadTree(Config.Client.Graphics.Quality.lodChunkRenderDistance.get()*16, @@ -36,6 +41,7 @@ public class DhClientLevel implements IClientLevel { renderBufferHandler = new RenderBufferHandler(tree); this.level = level; FileScanner.scanFile(save, level, dataFileHandler, renderFileHandler); + LOGGER.info("Started DHLevel for {} with saves at {}", level, save); } @Override @@ -75,5 +81,6 @@ public class DhClientLevel implements IClientLevel { @Override public void close() { 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 f4cbd3317..be8875531 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 @@ -33,7 +33,10 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel { public DhClientServerLevel(LocalSaveStructure save, ILevelWrapper level) { this.level = level; this.save = save; + save.getDataFolder(level).mkdirs(); + save.getRenderCacheFolder(level).mkdirs(); dataFileHandler = new LocalDataFileHandler(this, save.getDataFolder(level)); + LOGGER.info("Started DHLevel for {} with saves at {}", level, save); } public void clientTick() { @@ -105,6 +108,7 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel { @Override public void close() { dataFileHandler.close(); + LOGGER.info("Closed DHLevel for {}", level); } @Override 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 51383db09..5ef304d23 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 @@ -3,11 +3,15 @@ package com.seibel.lod.core.a7.level; import com.seibel.lod.core.a7.util.FileScanner; import com.seibel.lod.core.a7.save.io.file.LocalDataFileHandler; 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 org.apache.logging.log4j.Logger; import java.util.concurrent.CompletableFuture; public class DhServerLevel implements IServerLevel { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + public final LocalSaveStructure save; public final LocalDataFileHandler dataFileHandler; public final ILevelWrapper level; @@ -15,8 +19,10 @@ public class DhServerLevel implements IServerLevel { public DhServerLevel(LocalSaveStructure save, ILevelWrapper level) { this.save = save; this.level = level; + save.getDataFolder(level).mkdirs(); dataFileHandler = new LocalDataFileHandler(this, save.getDataFolder(level)); FileScanner.scanFile(save, level, dataFileHandler, null); + LOGGER.info("Started DHLevel for {} with saves at {}", level, save); } public void serverTick() { @@ -35,6 +41,7 @@ public class DhServerLevel implements IServerLevel { @Override public void close() { dataFileHandler.close(); + LOGGER.info("Closed DHLevel for {}", level); } @Override public CompletableFuture save() { diff --git a/src/main/java/com/seibel/lod/core/a7/save/structure/LocalSaveStructure.java b/src/main/java/com/seibel/lod/core/a7/save/structure/LocalSaveStructure.java index 001c8bc4f..15f906c9b 100644 --- a/src/main/java/com/seibel/lod/core/a7/save/structure/LocalSaveStructure.java +++ b/src/main/java/com/seibel/lod/core/a7/save/structure/LocalSaveStructure.java @@ -11,22 +11,27 @@ import java.io.File; public class LocalSaveStructure extends SaveStructure { private static final IMinecraftSharedWrapper MC = SingletonHandler.get(IMinecraftSharedWrapper.class); + private File debugPath = new File(""); + // Fit for Client_Server & Server_Only environment public LocalSaveStructure() { } @Override public File tryGetLevelFolder(ILevelWrapper wrapper) { + debugPath = new File(wrapper.getSaveFolder(), "Distant_Horizons"); return new File(wrapper.getSaveFolder(), "Distant_Horizons"); } @Override public File getRenderCacheFolder(ILevelWrapper level) { + debugPath = new File(level.getSaveFolder(), "Distant_Horizons"); return new File(new File(level.getSaveFolder(), "Distant_Horizons"), RENDER_CACHE_FOLDER); } @Override public File getDataFolder(ILevelWrapper level) { + debugPath = new File(level.getSaveFolder(), "Distant_Horizons"); return new File(new File(level.getSaveFolder(), "Distant_Horizons"), DATA_FOLDER); } @@ -37,6 +42,6 @@ public class LocalSaveStructure extends SaveStructure { @Override public String toString() { - return "[LocalSave]"; + return "[LocalSave at ["+debugPath+"] ]"; } } diff --git a/src/main/java/com/seibel/lod/core/a7/util/FileScanner.java b/src/main/java/com/seibel/lod/core/a7/util/FileScanner.java index 32e6537f3..ae026808b 100644 --- a/src/main/java/com/seibel/lod/core/a7/util/FileScanner.java +++ b/src/main/java/com/seibel/lod/core/a7/util/FileScanner.java @@ -28,7 +28,7 @@ public class FileScanner { ).map(Path::toFile).collect(Collectors.toList()) ); } catch (Exception e) { - LOGGER.error("Failed to scan and collect data files for {} in {}", level, save); + LOGGER.error("Failed to scan and collect data files for {} in {}", level, save, e); } } if (renderSource != null) { @@ -38,7 +38,7 @@ public class FileScanner { ).map(Path::toFile).collect(Collectors.toList()) ); } catch (Exception e) { - LOGGER.error("Failed to scan and collect data files for {} in {}", level, save); + LOGGER.error("Failed to scan and collect data files for {} in {}", level, save, e); } } } 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 e53087b88..ad2613c57 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 @@ -23,6 +23,7 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe super(WorldEnvironment.Client_Server); saveStructure = new LocalSaveStructure(); levels = new HashMap<>(); + LOGGER.info("Started DhWorld of type {}", environment); } @Override @@ -86,6 +87,7 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe level.close(); } levels.clear(); + LOGGER.info("Closed DhWorld of type {}", environment); } public void enableRendering(ILevelWrapper 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 80f41c2ec..0faa10288 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 @@ -25,6 +25,7 @@ public class DhClientWorld extends DhWorld implements IClientWorld { super(WorldEnvironment.Client_Only); saveStructure = new ClientOnlySaveStructure(); levels = new HashMap<>(); + LOGGER.info("Started DhWorld of type {}", environment); } @Override @@ -81,5 +82,6 @@ public class DhClientWorld extends DhWorld implements IClientWorld { level.close(); } levels.clear(); + LOGGER.info("Closed DhWorld of type {}", environment); } } 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 624618d1c..ae9d5e65e 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 @@ -17,6 +17,7 @@ public class DhServerWorld extends DhWorld implements IServerWorld { super(WorldEnvironment.Server_Only); saveStructure = new LocalSaveStructure(); levels = new HashMap<>(); + LOGGER.info("Started DhWorld of type {}", environment); } @Override @@ -63,6 +64,7 @@ public class DhServerWorld extends DhWorld implements IServerWorld { level.close(); } levels.clear(); + LOGGER.info("Closed DhWorld of type {}", environment); } diff --git a/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java b/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java index a9a1a6aef..4a51920ec 100644 --- a/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java +++ b/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java @@ -8,6 +8,7 @@ import com.seibel.lod.core.config.types.AbstractConfigType; import com.seibel.lod.core.config.types.ConfigEntry; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -23,7 +24,7 @@ import java.nio.file.Path; * @version 2022-5-26 */ public class ConfigFileHandling { - public static final Path ConfigPath = SingletonHandler.get(IMinecraftClientWrapper.class).getGameDirectory().toPath().resolve("config").resolve(ModInfo.NAME+".toml"); + public static final Path ConfigPath = SingletonHandler.get(IMinecraftSharedWrapper.class).getInstallationDirectory().toPath().resolve("config").resolve(ModInfo.NAME+".toml"); /** Saves the config to the file */ public static void saveToFile() { diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/SingletonHandler.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/SingletonHandler.java index 1a12305d2..676bb29fd 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/SingletonHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/SingletonHandler.java @@ -70,7 +70,10 @@ public class SingletonHandler return foundObject; } - + public static T getOrNull(Class interfaceClass) throws ClassCastException + { + return dependencyHandler.get(interfaceClass); + } /** * Should only be called after all Binds have been done. diff --git a/src/main/java/com/seibel/lod/core/util/ColorUtil.java b/src/main/java/com/seibel/lod/core/util/ColorUtil.java index 6b48a9227..3f6fd8cb9 100644 --- a/src/main/java/com/seibel/lod/core/util/ColorUtil.java +++ b/src/main/java/com/seibel/lod/core/util/ColorUtil.java @@ -41,8 +41,6 @@ public class ColorUtil public static final int RED = rgbToInt(255,0,0); - private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - public static int rgbToInt(int red, int green, int blue) { return (0xFF << 24) | (red << 16) | (green << 8) | blue; diff --git a/src/main/java/com/seibel/lod/core/util/LodUtil.java b/src/main/java/com/seibel/lod/core/util/LodUtil.java index 4c312b696..01150969a 100644 --- a/src/main/java/com/seibel/lod/core/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/core/util/LodUtil.java @@ -41,8 +41,11 @@ import com.seibel.lod.core.wrapperInterfaces.IVersionConstants; import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; /** * This class holds methods and constants that may be used in multiple places. @@ -52,11 +55,8 @@ import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; */ public class LodUtil { - private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - private static final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.get(IMinecraftRenderWrapper.class); - private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); - private static final IReflectionHandler REFLECTION_HANDLER = SingletonHandler.get(IReflectionHandler.class); - private static final IVersionConstants VERSION_CONSTANTS = SingletonHandler.get(IVersionConstants.class); + private static final IMinecraftClientWrapper MC_CLIENT = SingletonHandler.getOrNull(IMinecraftClientWrapper.class); + private static final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.getOrNull(IMinecraftRenderWrapper.class); /** * Vanilla render distances less than or equal to this will not allow partial @@ -167,10 +167,10 @@ public class LodUtil */ public static ILevelWrapper getServerWorldFromDimension(IDimensionTypeWrapper newDimension) { - if(!MC.hasSinglePlayerServer()) + if(!MC_CLIENT.hasSinglePlayerServer()) return null; - Iterable worlds = MC.getAllServerWorlds(); + Iterable worlds = MC_CLIENT.getAllServerWorlds(); ILevelWrapper returnWorld = null; for (ILevelWrapper world : worlds) @@ -202,7 +202,7 @@ public class LodUtil */ public static String getWorldID(ILevelWrapper world) { - if (MC.hasSinglePlayerServer()) + if (MC_CLIENT.hasSinglePlayerServer()) { // chop off the dimension ID as it is not needed/wanted String dimId = getDimensionIDFromWorld(world); @@ -231,7 +231,7 @@ public class LodUtil @Deprecated // FIXME: There are soooo many duplicated methods doing the same thing everywhere public static String getDimensionIDFromWorld(ILevelWrapper world) { - if (MC.hasSinglePlayerServer()) + if (MC_CLIENT.hasSinglePlayerServer()) { // this will return the world save location // and the dimension folder @@ -254,7 +254,7 @@ public class LodUtil public static String getServerFolderName() { // parse the current server's IP - ParsedIp parsedIp = new ParsedIp(MC.getCurrentServerIp()); + ParsedIp parsedIp = new ParsedIp(MC_CLIENT.getCurrentServerIp()); String serverIpCleaned = parsedIp.ip.replaceAll(INVALID_FILE_CHARACTERS_REGEX, ""); String serverPortCleaned = parsedIp.port != null ? parsedIp.port.replaceAll(INVALID_FILE_CHARACTERS_REGEX, "") : ""; @@ -276,8 +276,8 @@ public class LodUtil } - String serverName = MC.getCurrentServerName().replaceAll(INVALID_FILE_CHARACTERS_REGEX, ""); - String serverMcVersion = MC.getCurrentServerVersion().replaceAll(INVALID_FILE_CHARACTERS_REGEX, ""); + String serverName = MC_CLIENT.getCurrentServerName().replaceAll(INVALID_FILE_CHARACTERS_REGEX, ""); + String serverMcVersion = MC_CLIENT.getCurrentServerVersion().replaceAll(INVALID_FILE_CHARACTERS_REGEX, ""); // generate the folder name String folderName = ""; @@ -387,8 +387,8 @@ public class LodUtil return new Pos2D(pos.getX(), pos.getZ()); } }, - MC.getPlayerChunkPos().getX() - renderDist, - MC.getPlayerChunkPos().getZ() - renderDist, + MC_CLIENT.getPlayerChunkPos().getX() - renderDist, + MC_CLIENT.getPlayerChunkPos().getZ() - renderDist, renderDist * 2 + 1); }