From ae729bcd151585adcafaf422a436470d9ef50613 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 29 Apr 2025 11:14:26 -0400 Subject: [PATCH 1/2] Enable use of FML's unused TracingPrintStream for tracking mod messages on System.out We implement this ourselves because we need it on 1.20.1 anyway, it will eventually be implemented upstream in NeoForge, at which point this feature will be removed: https://github.com/neoforged/FancyModLoader/issues/277 --- .../modernfix/core/config/ModernFixEarlyConfig.java | 1 + .../platform/forge/ModernFixPlatformHooksImpl.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index c92f0907..b488e4c0 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -182,6 +182,7 @@ public class ModernFixEarlyConfig { .put("mixin.feature.snapshot_easter_egg", true) .put("mixin.feature.warn_missing_perf_mods", true) .put("mixin.feature.spark_profile_launch", false) + .put("mixin.feature.log_stdout_in_log_files", true) .put("mixin.devenv", isDevEnv) .put("mixin.perf.remove_spawn_chunks", isDevEnv) .putConditionally(() -> !isFabric, "mixin.bugfix.fix_config_crashes", true) diff --git a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java index bfef2132..dbf8edf9 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java +++ b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java @@ -17,6 +17,7 @@ import net.minecraftforge.fml.ModLoader; import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.fml.loading.LoadingModList; +import net.minecraftforge.fml.loading.TracingPrintStream; import net.minecraftforge.fml.loading.moddiscovery.ModInfo; import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.server.ServerLifecycleHooks; @@ -33,6 +34,7 @@ import org.embeddedt.modernfix.spark.SparkLaunchProfiler; import org.embeddedt.modernfix.util.CommonModUtil; import org.embeddedt.modernfix.util.DummyList; import org.objectweb.asm.tree.ClassNode; +import org.slf4j.LoggerFactory; import org.spongepowered.asm.mixin.injection.struct.InjectorGroupInfo; import java.lang.reflect.Field; @@ -112,6 +114,11 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { CommonModUtil.runWithoutCrash(() -> SparkLaunchProfiler.start("launch"), "Failed to start profiler"); } + if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.log_stdout_in_log_files.PrintStreamReplacement")) { + System.setOut(new TracingPrintStream(LoggerFactory.getLogger("STDOUT"), System.out)); + System.setErr(new TracingPrintStream(LoggerFactory.getLogger("STDERR"), System.err)); + } + NightConfigFixer.monitorFileWatcher(); NightConfigWatchThrottler.throttle(); } From e253833b685e0bb4ee5de62860ce81b7d886a311 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 29 Apr 2025 18:26:20 -0400 Subject: [PATCH 2/2] Use CHM's built-in set instead of newSetFromMap --- .../bugfix/model_data_manager_cme/ModelDataManagerMixin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/model_data_manager_cme/ModelDataManagerMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/model_data_manager_cme/ModelDataManagerMixin.java index 5fba1b2e..f8ba7cfb 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/model_data_manager_cme/ModelDataManagerMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/model_data_manager_cme/ModelDataManagerMixin.java @@ -12,7 +12,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.Redirect; -import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -34,7 +33,7 @@ public abstract class ModelDataManagerMixin { */ @ModifyArg(method = "requestRefresh", at = @At(value = "INVOKE", target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;", ordinal = 0), index = 1, remap = false) private Function> changeTypeOfSetUsed(Function> mappingFunction) { - return pos -> Collections.newSetFromMap(new ConcurrentHashMap<>()); + return pos -> ConcurrentHashMap.newKeySet(); } @Redirect(method = "getAt(Lnet/minecraft/world/level/ChunkPos;)Ljava/util/Map;", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/model/data/ModelDataManager;refreshAt(Lnet/minecraft/world/level/ChunkPos;)V"), remap = false)