From 24ffed6f9e355ba35028617a0b3e37cd336558ee Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Mon, 6 Oct 2025 20:39:31 +0300 Subject: [PATCH] Update to Unprotect 2.0.1 Fixes #304 by removing transitive loader/ModLauncher deps. --- gradle/runtime.libs.versions.toml | 5 +++-- .../forge/dependency/ForgeLibrariesProvider.java | 14 ++++++++++++++ .../loom/configuration/LoomConfigurations.java | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gradle/runtime.libs.versions.toml b/gradle/runtime.libs.versions.toml index e43859f4..451591fc 100644 --- a/gradle/runtime.libs.versions.toml +++ b/gradle/runtime.libs.versions.toml @@ -22,7 +22,7 @@ forge-runtime = "2.0.9" access-transformers = "3.0.1" access-transformers-new = "8.0.5" access-transformers-neo = "10.0.2" -unprotect = "1.3.1" +unprotect = "2.0.1" asm = "9.7" access-transformers-log4j = "2.17.1" forge-installer-tools = "1.2.0" @@ -53,7 +53,8 @@ mcp-annotations = { module = "dev.architectury:mcp-annotations", version.ref = " access-transformers = { module = "net.minecraftforge:accesstransformers", version.ref = "access-transformers" } access-transformers-new = { module = "net.minecraftforge:accesstransformers", version.ref = "access-transformers-new" } access-transformers-neo = { module = "net.neoforged.accesstransformers:at-cli", version.ref = "access-transformers-neo" } -unprotect = { module = "io.github.juuxel:unprotect", version.ref = "unprotect" } +unprotect-fancymodloader10 = { module = "io.github.juuxel:unprotect-fancymodloader10", version.ref = "unprotect" } +unprotect-modlauncher = { module = "io.github.juuxel:unprotect-modlauncher", version.ref = "unprotect" } asm = { module = "org.ow2.asm:asm", version.ref = "asm" } access-transformers-log4j-bom = { module = "org.apache.logging.log4j:log4j-bom", version.ref = "access-transformers-log4j" } forge-installer-tools = { module = "net.minecraftforge:installertools", version.ref = "forge-installer-tools" } diff --git a/src/main/java/dev/architectury/loom/forge/dependency/ForgeLibrariesProvider.java b/src/main/java/dev/architectury/loom/forge/dependency/ForgeLibrariesProvider.java index d1bd2466..ab5baafc 100644 --- a/src/main/java/dev/architectury/loom/forge/dependency/ForgeLibrariesProvider.java +++ b/src/main/java/dev/architectury/loom/forge/dependency/ForgeLibrariesProvider.java @@ -39,6 +39,7 @@ import dev.architectury.loom.mappings.MappingOption; import dev.architectury.loom.neoforge.StringConstantPatcher; import dev.architectury.loom.util.ClassVisitorUtil; import dev.architectury.loom.util.PropertyUtil; +import dev.architectury.loom.util.Version; import org.gradle.api.Project; import org.gradle.api.artifacts.Dependency; import org.gradle.api.artifacts.ModuleDependency; @@ -58,6 +59,7 @@ import net.fabricmc.loom.util.Checksum; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.ExceptionUtil; import net.fabricmc.loom.util.FileSystemUtil; +import net.fabricmc.loom.util.LoomVersions; import net.fabricmc.loom.util.service.ScopedServiceFactory; import net.fabricmc.loom.util.service.ServiceFactory; import net.fabricmc.mappingio.tree.MappingTree; @@ -70,6 +72,7 @@ public class ForgeLibrariesProvider { private static final String FML_LOADER_NAME = "fmlloader"; private static final String FANCYML_LOADER_GROUP = "net.neoforged.fancymodloader"; private static final String FANCYML_LOADER_NAME = "loader"; + private static final Version FANCYML_LOADER_UNPROTECT_BACKEND_VERSION = Version.parse("10.0.14"); private static final String FORGE_OBJECT_HOLDER_FILE = "net/minecraftforge/fml/common/asm/ObjectHolderDefinalize.class"; private static final String FORGE_MOD_DIR_TRANSFORMER_DISCOVERER_FILE = "net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.class"; @@ -128,12 +131,20 @@ public class ForgeLibrariesProvider { .detachedConfiguration(dependencies.toArray(new Dependency[0])) .getResolvedConfiguration(); + boolean isFancyModLoader10OrNewer = false; + for (ResolvedArtifact artifact : config.getResolvedArtifacts()) { final ModuleVersionIdentifier id = artifact.getModuleVersion().getId(); final Object dep; final boolean isFML = FML_LOADER_GROUP.equals(id.getGroup()) && FML_LOADER_NAME.equals(id.getName()); final boolean isFancyML = FANCYML_LOADER_GROUP.equals(id.getGroup()) && FANCYML_LOADER_NAME.equals(id.getName()); + if (isFancyML && extension.isNeoForge() && Version.parse(id.getVersion()).compareTo(FANCYML_LOADER_UNPROTECT_BACKEND_VERSION) >= 0) { + // Note: check extension.isNeoForge() to prevent this check triggering on legacy "47.x" versions of FML + // from before Neo replaced the versioning scheme. + isFancyModLoader10OrNewer = true; + } + if (isFML || isFancyML) { // If FML, remap it. try (var serviceFactory = new ScopedServiceFactory()) { @@ -159,6 +170,9 @@ public class ForgeLibrariesProvider { DependencyProvider.addDependency(project, dep, Constants.Configurations.FORGE_DEPENDENCIES); } + + LoomVersions unprotect = isFancyModLoader10OrNewer ? LoomVersions.UNPROTECT_FANCYMODLOADER10 : LoomVersions.UNPROTECT_MODLAUNCHER; + DependencyProvider.addDependency(project, unprotect.mavenNotation(), Constants.Configurations.FORGE_EXTRA); } // Returns a Gradle dependency notation. diff --git a/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java b/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java index bb875393..6eec2199 100644 --- a/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java +++ b/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java @@ -207,7 +207,7 @@ public abstract class LoomConfigurations implements Runnable { extendsFrom(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.FORGE_EXTRA); // Add Forge/NeoForge shared dev-time dependencies - getDependencies().add(Constants.Configurations.FORGE_EXTRA, LoomVersions.UNPROTECT.mavenNotation()); + // TODO: Can we get rid of javax annotations on modern versions? getDependencies().add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, LoomVersions.JAVAX_ANNOTATIONS.mavenNotation()); // Add Forge-only dev-time dependencies