From fd8cc101203a58b44187dbc4cf4509fcf45e8ccb Mon Sep 17 00:00:00 2001 From: modmuss Date: Tue, 12 Aug 2025 08:55:36 +0100 Subject: [PATCH] Fix unpick remapping classpath (#1350) --- .../task/service/TinyRemapperService.java | 43 ++++++++++++++++--- .../task/service/UnpickRemapperService.java | 3 +- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java index 6090ad87..2ab2ae17 100644 --- a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java @@ -52,6 +52,7 @@ import org.gradle.api.tasks.Optional; import org.jetbrains.annotations.Nullable; import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.extension.RemapperExtensionHolder; import net.fabricmc.loom.task.AbstractRemapJarTask; import net.fabricmc.loom.util.Constants; @@ -117,13 +118,10 @@ public class TinyRemapperService extends Service im }); } - public static Provider createSimple(Project project, Provider from, Provider to) { + public static Provider createSimple(Project project, Provider from, Provider to, ClasspathLibraries classpathLibraries) { return TYPE.create(project, options -> { final LoomGradleExtension extension = LoomGradleExtension.get(project); - final ConfigurationContainer configurations = project.getConfigurations(); - final FileCollection classpath = configurations.getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME) - .minus(configurations.getByName(Constants.Configurations.MINECRAFT_COMPILE_LIBRARIES)) - .minus(configurations.getByName(Constants.Configurations.MINECRAFT_RUNTIME_LIBRARIES)); + final FileCollection classpath = getRemapClasspath(project, from, classpathLibraries); options.getFrom().set(from); options.getTo().set(to); @@ -135,6 +133,41 @@ public class TinyRemapperService extends Service im }); } + private static FileCollection getRemapClasspath(Project project, Provider from, ClasspathLibraries classpathLibraries) { + final LoomGradleExtension extension = LoomGradleExtension.get(project); + final ConfigurationContainer configurations = project.getConfigurations(); + + if (from.get().equals(MappingsNamespace.INTERMEDIARY.toString())) { + ConfigurableFileCollection files = project.files(extension.getMinecraftJars(MappingsNamespace.INTERMEDIARY)); + + if (classpathLibraries == ClasspathLibraries.INCLUDE) { + files = files.from(configurations.getByName(Constants.Configurations.MINECRAFT_COMPILE_LIBRARIES)); + } + + return files; + } + + if (classpathLibraries == ClasspathLibraries.INCLUDE) { + return configurations.getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME); + } + + return configurations.getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME) + .minus(configurations.getByName(Constants.Configurations.MINECRAFT_COMPILE_LIBRARIES)) + .minus(configurations.getByName(Constants.Configurations.MINECRAFT_RUNTIME_LIBRARIES)); + } + + public enum ClasspathLibraries { + /** + * Default, in most cases the Minecraft libraries are not required as they are not obfuscated and do not need to be queried. + */ + EXCLUDE, + + /** + * Uses more memory, but provides a complete index of all the classes within the libraries. + */ + INCLUDE + } + private TinyRemapper tinyRemapper; @Nullable private KotlinRemapperClassloader kotlinRemapperClassloader; diff --git a/src/main/java/net/fabricmc/loom/task/service/UnpickRemapperService.java b/src/main/java/net/fabricmc/loom/task/service/UnpickRemapperService.java index 39789783..3838c8de 100644 --- a/src/main/java/net/fabricmc/loom/task/service/UnpickRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/UnpickRemapperService.java @@ -67,7 +67,8 @@ public class UnpickRemapperService extends Service { options.getTinyRemapper().set(TinyRemapperService.createSimple(project, project.provider(metadata::namespace), - project.provider(MappingsNamespace.NAMED::toString) + project.provider(MappingsNamespace.NAMED::toString), + TinyRemapperService.ClasspathLibraries.INCLUDE // Must include the full set of libraries on classpath so fields can be looked up. This does use a lot of memory however... )); }); }