From dd2096bf1b5fa17e36b533556b6e378aa6fcafd1 Mon Sep 17 00:00:00 2001 From: tom lee Date: Sat, 12 Feb 2022 23:52:20 +0800 Subject: [PATCH] Frontported the forge mixin issue fix. (It may work without that but...) --- .../common/wrappers/DependencySetupDoneCheck.java | 3 +++ .../worldGeneration/BatchGenerationEnvironment.java | 5 +++++ .../lod/forge/mixins/MixinUtilBackgroudThread.java | 13 ++++++++----- 3 files changed, 16 insertions(+), 5 deletions(-) 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 97b640568..95d873edd 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,7 +1,10 @@ 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 a63b5bc7e..711dbe4b7 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 @@ -41,6 +41,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/forge/src/main/java/com/seibel/lod/forge/mixins/MixinUtilBackgroudThread.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinUtilBackgroudThread.java index 972bdf665..7f19467b4 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,8 +9,6 @@ import org.spongepowered.asm.mixin.injection.Inject; 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.api.ClientApi; import com.seibel.lod.core.util.DummyRunExecutorService; import net.minecraft.Util; @@ -19,11 +17,16 @@ import net.minecraft.Util; public class MixinUtilBackgroudThread { + private static boolean shouldApplyOverride() { + return DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread.get(); + } + + @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 && shouldApplyOverride()) { //ClientApi.LOGGER.info("util wrapThreadWithTaskName(Runnable) triggered"); ci.setReturnValue(r); @@ -33,7 +36,7 @@ public class MixinUtilBackgroudThread at = @At("HEAD"), cancellable = true) private static void overrideUtil$wrapThreadWithTaskNameForSupplier(String string, Supplier r, CallbackInfoReturnable> ci) { - if (DependencySetupDoneCheck.isDone && BatchGenerationEnvironment.isCurrentThreadDistantGeneratorThread()) + if (DependencySetupDoneCheck.isDone && shouldApplyOverride()) { //ClientApi.LOGGER.info("util wrapThreadWithTaskName(Supplier) triggered"); ci.setReturnValue(r); @@ -43,7 +46,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 && shouldApplyOverride()) { //ClientApi.LOGGER.info("util backgroundExecutor triggered"); ci.setReturnValue(new DummyRunExecutorService());