From 145260bf6dd95f21eccee30cd4c274951db73ddd Mon Sep 17 00:00:00 2001 From: TomTheFurry Date: Thu, 2 Jun 2022 13:54:15 +0800 Subject: [PATCH] Fixup some init order errors and work on able to enter world. --- .../lod/core/handlers/ReflectionHandler.java | 31 ++++++++++--------- .../DependencyHandler.java | 14 +++++---- .../dependencyInjection/SingletonHandler.java | 5 ++- .../seibel/lod/core/objects/a7/DHWorld.java | 1 + .../core/objects/a7/io/DHFolderHandler.java | 3 +- .../minecraft/IMinecraftClientWrapper.java | 20 ++---------- 6 files changed, 33 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java b/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java index 69466ffa7..8f7dcc572 100644 --- a/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java @@ -22,11 +22,11 @@ package com.seibel.lod.core.handlers; import java.lang.invoke.MethodHandles; import java.lang.reflect.Field; +import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.logging.DhLoggerBuilder; -import org.apache.logging.log4j.LogManager; +import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import org.apache.logging.log4j.Logger; -import com.seibel.lod.core.ModInfo; import com.seibel.lod.core.enums.rendering.FogDrawMode; /** @@ -45,35 +45,36 @@ public class ReflectionHandler implements IReflectionHandler public static ReflectionHandler instance; private Field ofFogField = null; - private final Object mcOptionsObject; + private Object mcOptionsObject; private Boolean sodiumPresent = null; private boolean optifinePresent = false; - - - - - private ReflectionHandler(Field[] optionFields, Object newMcOptionsObject) + + @Override + public void finishDelayedSetup() { - mcOptionsObject = newMcOptionsObject; - - setupFogField(optionFields); + mcOptionsObject = SingletonHandler.get(IMinecraftClientWrapper.class).getOptionsObject(); + setupFogField(mcOptionsObject.getClass().getDeclaredFields()); + } + + + private ReflectionHandler() + { + mcOptionsObject = null; } /** - * @param optionFields the fields that should contain "ofFogType" - * @param newMcOptionsObject the object instance that contains "ofFogType" * @return the ReflectionHandler just created * @throws IllegalStateException if a ReflectionHandler already exists */ - public static ReflectionHandler createSingleton(Field[] optionFields, Object newMcOptionsObject) throws IllegalStateException + public static ReflectionHandler createSingleton() throws IllegalStateException { if (instance != null) { throw new IllegalStateException(); } - instance = new ReflectionHandler(optionFields, newMcOptionsObject); + instance = new ReflectionHandler(); return instance; } diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyHandler.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyHandler.java index caebf60ad..e3754a507 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/DependencyHandler.java @@ -148,12 +148,6 @@ public class DependencyHandler // (yes technically the binding isn't finished, // but this needs to be set to "true" so we can use "get") bindingFinished = true; - - for (Class interfaceKey : dependencies.keySet()) - { - IBindable concreteObject = get(interfaceKey); - concreteObject.finishDelayedSetup(); - } } /** returns whether the finishBinding method has been called */ @@ -161,4 +155,12 @@ public class DependencyHandler { return bindingFinished; } + + public void runDelayedSetup() { + for (Class interfaceKey : dependencies.keySet()) + { + IBindable concreteObject = get(interfaceKey); + concreteObject.finishDelayedSetup(); + } + } } 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 4e4188ca8..3ef26b55b 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 @@ -88,5 +88,8 @@ public class SingletonHandler { return dependencyHandler.getBindingFinished(); } - + + public static void runDelayedSetup() { + dependencyHandler.runDelayedSetup(); + } } diff --git a/src/main/java/com/seibel/lod/core/objects/a7/DHWorld.java b/src/main/java/com/seibel/lod/core/objects/a7/DHWorld.java index 43ed8242d..3a398d8dc 100644 --- a/src/main/java/com/seibel/lod/core/objects/a7/DHWorld.java +++ b/src/main/java/com/seibel/lod/core/objects/a7/DHWorld.java @@ -24,6 +24,7 @@ public class DHWorld implements Closeable { public EventLoop eventLoop = new EventLoop(dhTickerThread, this::tick); public DHWorld() { + //Note: this changes the singleplayer lod save location. saveDir = DHFolderHandler.getCurrentWorldFolder(); levels = new HashMap<>(); } diff --git a/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java b/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java index 739ebaa71..7d0e312f4 100644 --- a/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java +++ b/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java @@ -31,8 +31,7 @@ public class DHFolderHandler { if (MC.hasSinglePlayerServer()) { // local world - IWorldWrapper serverWorld = MC.getWrappedServerWorld(); - dimensionFolder = new File(serverWorld.getSaveFolder().getCanonicalFile().getPath() + File.separatorChar + "lod"); + dimensionFolder = new File(MC.getSinglePlayerServerFolder(), "lod"); } else { diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftClientWrapper.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftClientWrapper.java index 181840517..cd09c2ca2 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftClientWrapper.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftClientWrapper.java @@ -117,21 +117,7 @@ public interface IMinecraftClientWrapper extends IBindable */ void crashMinecraft(String errorMessage, Throwable exception); - - - - - - - - - - - - - - - - - + Object getOptionsObject(); + + File getSinglePlayerServerFolder(); }