diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/DependencySetupDoneCheck.java b/common/src/main/java/com/seibel/lod/common/wrappers/DependencySetupDoneCheck.java index 1c906ba17..af9b3d9f8 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/DependencySetupDoneCheck.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/DependencySetupDoneCheck.java @@ -1,6 +1,8 @@ package com.seibel.lod.common.wrappers; +import java.util.function.Supplier; + public class DependencySetupDoneCheck { public static boolean isDone = false; - + public static Supplier getIsCurrentThreadDistantGeneratorThread = (() -> {return false;}); } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java index 571763106..7e136809c 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java @@ -42,6 +42,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import com.seibel.lod.common.wrappers.DependencySetupDoneCheck; import com.seibel.lod.common.wrappers.chunk.ChunkWrapper; import com.seibel.lod.common.wrappers.world.WorldWrapper; import com.seibel.lod.common.wrappers.worldGeneration.mimicObject.ChunkLoader; @@ -239,6 +240,10 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv return (isDistantGeneratorThread.get() != null); } + static { + DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread = BatchGenerationEnvironment::isCurrentThreadDistantGeneratorThread; + } + public ExecutorService executors = Executors.newFixedThreadPool( CONFIG.client().advanced().threading().getNumberOfWorldGenerationThreads(), threadFactory); diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinUtilBackgroudThread.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinUtilBackgroudThread.java index 29133bd55..5e006edcf 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinUtilBackgroudThread.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinUtilBackgroudThread.java @@ -9,28 +9,37 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.seibel.lod.common.wrappers.DependencySetupDoneCheck; import com.seibel.lod.common.wrappers.worldGeneration.BatchGenerationEnvironment; +import com.seibel.lod.core.util.SingletonHandler; +import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import net.minecraft.Util; @Mixin(Util.class) public class MixinUtilBackgroudThread { + private static boolean doTriggerOverride() { + try { + return DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread.get(); + } catch (NullPointerException e) { + return false; + } + } @Inject(method = "wrapThreadWithTaskName(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Runnable;", at = @At("HEAD"), cancellable = true) private static void overrideUtil$wrapThreadWithTaskName(String string, Runnable r, CallbackInfoReturnable ci) { - if (DependencySetupDoneCheck.isDone && BatchGenerationEnvironment.isCurrentThreadDistantGeneratorThread()) + if (DependencySetupDoneCheck.isDone && doTriggerOverride()) { // ClientApi.LOGGER.info("util wrapThreadWithTaskName(Runnable) triggered"); ci.setReturnValue(r); } } - + @Inject(method = "backgroundExecutor", at = @At("HEAD"), cancellable = true) private static void overrideUtil$backgroundExecutor(CallbackInfoReturnable ci) { - if (DependencySetupDoneCheck.isDone && BatchGenerationEnvironment.isCurrentThreadDistantGeneratorThread()) + if (DependencySetupDoneCheck.isDone && doTriggerOverride()) { // ClientApi.LOGGER.info("util backgroundExecutor triggered"); ci.setReturnValue(Runnable::run); diff --git a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinUtilBackgroudThread.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinUtilBackgroudThread.java index 1db0b78d1..9f7f60639 100644 --- a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinUtilBackgroudThread.java +++ b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinUtilBackgroudThread.java @@ -9,18 +9,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.seibel.lod.common.wrappers.DependencySetupDoneCheck; import com.seibel.lod.common.wrappers.worldGeneration.BatchGenerationEnvironment; +import com.seibel.lod.core.util.SingletonHandler; +import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import net.minecraft.Util; @Mixin(Util.class) public class MixinUtilBackgroudThread { + private static boolean doTriggerOverride() { + try { + return DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread.get(); + } catch (NullPointerException e) { + return false; + } + } @Inject(method = "wrapThreadWithTaskName(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Runnable;", at = @At("HEAD"), cancellable = true) private static void overrideUtil$wrapThreadWithTaskName(String string, Runnable r, CallbackInfoReturnable ci) { - if (DependencySetupDoneCheck.isDone && BatchGenerationEnvironment.isCurrentThreadDistantGeneratorThread()) + if (DependencySetupDoneCheck.isDone && doTriggerOverride()) { // ClientApi.LOGGER.info("util wrapThreadWithTaskName(Runnable) triggered"); ci.setReturnValue(r); @@ -30,7 +39,7 @@ public class MixinUtilBackgroudThread @Inject(method = "backgroundExecutor", at = @At("HEAD"), cancellable = true) private static void overrideUtil$backgroundExecutor(CallbackInfoReturnable ci) { - if (DependencySetupDoneCheck.isDone && BatchGenerationEnvironment.isCurrentThreadDistantGeneratorThread()) + if (DependencySetupDoneCheck.isDone && doTriggerOverride()) { // ClientApi.LOGGER.info("util backgroundExecutor triggered"); ci.setReturnValue(Runnable::run);