diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 3a8b271..0452264 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -29,8 +29,11 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import com.google.common.base.Preconditions; +import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.file.FileCollection; import org.gradle.api.file.RegularFileProperty; @@ -59,6 +62,7 @@ public class RemapJarTask extends Jar { private final RegularFileProperty input; private final Property addNestedDependencies; private final Property remapAccessWidener; + private final List> remapOptions = new ArrayList<>(); public JarRemapper jarRemapper; private FileCollection classpath; @@ -107,6 +111,11 @@ public class RemapJarTask extends Jar { } } + // Apply any requested options to tiny remapper + for (Action remapOption : this.remapOptions) { + remapOption.execute(remapperBuilder); + } + project.getLogger().lifecycle(":remapping " + input.getFileName()); StringBuilder rc = new StringBuilder("Remap classpath: "); @@ -181,6 +190,9 @@ public class RemapJarTask extends Jar { } } + // Add remap options to the jar remapper + jarRemapper.addOptions(this.remapOptions); + jarRemapper.scheduleRemap(input, output) .supplyAccessWidener((remapData, remapper) -> { if (getRemapAccessWidener().getOrElse(false) && extension.accessWidener != null) { @@ -251,6 +263,10 @@ public class RemapJarTask extends Jar { return remapAccessWidener; } + public void remapOptions(Action action) { + this.remapOptions.add(action); + } + public RemapJarTask classpath(FileCollection collection) { if (this.classpath == null) { this.classpath = collection; diff --git a/src/main/java/net/fabricmc/loom/util/JarRemapper.java b/src/main/java/net/fabricmc/loom/util/JarRemapper.java index bd070c5..1b7b841 100644 --- a/src/main/java/net/fabricmc/loom/util/JarRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/JarRemapper.java @@ -34,6 +34,7 @@ import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import org.gradle.api.Action; import org.objectweb.asm.commons.Remapper; import net.fabricmc.stitch.util.Pair; @@ -46,6 +47,7 @@ public class JarRemapper { private final List mappingProviders = new ArrayList<>(); private final Set classPath = new HashSet<>(); private final List remapData = new ArrayList<>(); + private List> remapOptions; public void addMappings(IMappingProvider mappingProvider) { mappingProviders.add(mappingProvider); @@ -65,6 +67,12 @@ public class JarRemapper { TinyRemapper.Builder remapperBuilder = TinyRemapper.newRemapper(); mappingProviders.forEach(remapperBuilder::withMappings); + if (remapOptions != null) { + for (Action remapOption : remapOptions) { + remapOption.execute(remapperBuilder); + } + } + TinyRemapper remapper = remapperBuilder.build(); Path[] remapClasspath = classPath.stream() @@ -102,6 +110,10 @@ public class JarRemapper { remapData.forEach(RemapData::complete); } + public void addOptions(List> remapOptions) { + this.remapOptions = remapOptions; + } + public static class RemapData { public final Path input; public final Path output;