From 6d29f84ee20b6f72185d456d7a9885e84ba05c3f Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 5 Jul 2025 08:59:12 +0200 Subject: [PATCH 1/4] feat: allow deobfuscating the game jar to a custom namespace in internal code --- .../net/fabricmc/loader/impl/game/GameProviderHelper.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java b/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java index d8a6f38c2..06185a76f 100644 --- a/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java +++ b/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java @@ -157,15 +157,17 @@ public static final class FindResult { private static boolean emittedInfo = false; public static Map deobfuscate(Map inputFileMap, String sourceNamespace, String gameId, String gameVersion, Path gameDir, FabricLauncher launcher) { - Log.debug(LogCategory.GAME_REMAP, "Requesting deobfuscation of %s", inputFileMap); + return deobfuscate(inputFileMap, sourceNamespace, launcher.getMappingConfiguration().getRuntimeNamespace(), gameId, gameVersion, gameDir, launcher); + } - MappingConfiguration mappingConfig = launcher.getMappingConfiguration(); - String targetNamespace = mappingConfig.getRuntimeNamespace(); + public static Map deobfuscate(Map inputFileMap, String sourceNamespace, String targetNamespace, String gameId, String gameVersion, Path gameDir, FabricLauncher launcher) { + Log.debug(LogCategory.GAME_REMAP, "Requesting deobfuscation of %s", inputFileMap); if (sourceNamespace.equals(targetNamespace)) { return inputFileMap; } + MappingConfiguration mappingConfig = launcher.getMappingConfiguration(); if (!mappingConfig.matches(gameId, gameVersion)) { String mappingsGameId = mappingConfig.getGameId(); String mappingsGameVersion = mappingConfig.getGameVersion(); From 42c51644908b399ff9d4bcbd591da78f8a811c81 Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:00:00 +0200 Subject: [PATCH 2/4] fix: remove duplicate conditions, print correct error messages --- .../net/fabricmc/loader/impl/game/GameProviderHelper.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java b/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java index 06185a76f..d1c3d5337 100644 --- a/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java +++ b/src/main/java/net/fabricmc/loader/impl/game/GameProviderHelper.java @@ -182,9 +182,7 @@ public static Map deobfuscate(Map inputFileMap, Stri List namespaces = mappingConfig.getNamespaces(); - if (namespaces == null - || !namespaces.contains(sourceNamespace) - || !namespaces.contains(targetNamespace)) { + if (namespaces == null) { Log.debug(LogCategory.GAME_REMAP, "No mappings, using input files"); return inputFileMap; } From b5a3b8add4ff6b99846d3ada2d6100b8b6ed794f Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:23:48 +0200 Subject: [PATCH 3/4] feat: allow enabling runtime md remapping using system properties --- .../java/net/fabricmc/loader/impl/FabricLoaderImpl.java | 2 +- .../net/fabricmc/loader/impl/launch/FabricLauncher.java | 2 ++ .../fabricmc/loader/impl/launch/FabricLauncherBase.java | 8 ++++++++ .../fabricmc/loader/impl/launch/FabricMixinBootstrap.java | 6 +++--- .../net/fabricmc/loader/impl/util/SystemProperties.java | 2 ++ 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java b/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java index 83e22d3bf..07aefaae2 100644 --- a/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java +++ b/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java @@ -207,7 +207,7 @@ public void load() { } private void setup() throws ModResolutionException { - boolean remapRegularMods = isDevelopmentEnvironment(); + boolean remapRegularMods = FabricLauncherBase.getLauncher().isRemapMods(); VersionOverrides versionOverrides = new VersionOverrides(); DependencyOverrides depOverrides = new DependencyOverrides(configDir); diff --git a/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncher.java b/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncher.java index ade90826a..70e2cdbdd 100644 --- a/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncher.java +++ b/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncher.java @@ -57,6 +57,8 @@ public interface FabricLauncher { boolean isDevelopment(); + boolean isRemapMods(); + String getEntrypoint(); String getDefaultRuntimeNamespace(); diff --git a/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncherBase.java b/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncherBase.java index 6db045ab3..36f711fba 100644 --- a/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncherBase.java +++ b/src/main/java/net/fabricmc/loader/impl/launch/FabricLauncherBase.java @@ -54,6 +54,14 @@ public final boolean isDevelopment() { return IS_DEVELOPMENT; } + @Override + public final boolean isRemapMods() { + String ret = System.getProperty(SystemProperties.REMAP_MODS); + if (ret != null) return SystemProperties.isSet(SystemProperties.REMAP_MODS); + + return IS_DEVELOPMENT; + } + @Override public MappingConfiguration getMappingConfiguration() { return mappingConfiguration; diff --git a/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java b/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java index 2c29161ae..9981beaea 100644 --- a/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java +++ b/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java @@ -60,7 +60,7 @@ public static void init(EnvType side, FabricLoaderImpl loader) { MixinBootstrap.init(); - if (FabricLauncherBase.getLauncher().isDevelopment()) { + if (FabricLauncherBase.getLauncher().isRemapMods()) { MappingConfiguration mappingConfiguration = FabricLauncherBase.getLauncher().getMappingConfiguration(); MappingTree mappings = mappingConfiguration.getMappings(); final String modNs = MappingConfiguration.INTERMEDIARY_NAMESPACE; @@ -76,9 +76,9 @@ public static void init(EnvType side, FabricLoaderImpl loader) { try { MixinIntermediaryDevRemapper remapper = new MixinIntermediaryDevRemapper(mappings, modNs, runtimeNs); MixinEnvironment.getDefaultEnvironment().getRemappers().add(remapper); - Log.info(LogCategory.MIXIN, "Loaded Fabric development mappings for mixin remapper!"); + Log.info(LogCategory.MIXIN, "Loaded Fabric refmap remapping mappings for mixin remapper!"); } catch (Exception e) { - Log.error(LogCategory.MIXIN, "Fabric development environment setup error - the game will probably crash soon!", e); + Log.error(LogCategory.MIXIN, "Fabric refmap remapping setup error - the game will probably crash soon!", e); } } } diff --git a/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java b/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java index 7a73071b6..99a8104a3 100644 --- a/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java +++ b/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java @@ -28,6 +28,8 @@ public final class SystemProperties { public static final String GAME_MAPPING_NAMESPACE = "fabric.gameMappingNamespace"; // mapping namespace to use at runtime, defaults to named if DEVELOPMENT is set or intermediary otherwise public static final String RUNTIME_MAPPING_NAMESPACE = "fabric.runtimeMappingNamespace"; + // remaps mods to the runtime mapping namespace, defaults to true if DEVELOPMENT is set or false otherwise + public static final String REMAP_MODS = "fabric.remapMods"; // skips the embedded MC game provider, letting ServiceLoader-provided ones take over public static final String SKIP_MC_PROVIDER = "fabric.skipMcProvider"; // game jar paths for common/client/server, replaces lookup from class path if present, env specific takes precedence From 898193107d596df0a17ed8033f29f47b32536d1f Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:33:27 +0200 Subject: [PATCH 4/4] fix: change log messages to be shorter & clearer --- .../net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java b/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java index 9981beaea..a4bd86f2d 100644 --- a/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java +++ b/src/main/java/net/fabricmc/loader/impl/launch/FabricMixinBootstrap.java @@ -76,9 +76,9 @@ public static void init(EnvType side, FabricLoaderImpl loader) { try { MixinIntermediaryDevRemapper remapper = new MixinIntermediaryDevRemapper(mappings, modNs, runtimeNs); MixinEnvironment.getDefaultEnvironment().getRemappers().add(remapper); - Log.info(LogCategory.MIXIN, "Loaded Fabric refmap remapping mappings for mixin remapper!"); + Log.info(LogCategory.MIXIN, "Loaded Fabric mappings for mixin remapper!"); } catch (Exception e) { - Log.error(LogCategory.MIXIN, "Fabric refmap remapping setup error - the game will probably crash soon!", e); + Log.error(LogCategory.MIXIN, "Fabric mixin remapper setup error - the game will probably crash soon!", e); } } }