diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java index 0fa27d15..e169cc87 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java @@ -29,6 +29,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.BiConsumer; import dev.architectury.tinyremapper.OutputConsumerPath; @@ -42,6 +43,7 @@ import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.SignatureFixerApplyVisitor; import net.fabricmc.loom.util.TinyRemapperHelper; +import net.fabricmc.loom.util.srg.InnerClassRemapper; public abstract class AbstractMappedMinecraftProvider implements MappedMinecraftProvider.ProviderImpl { protected final M minecraftProvider; @@ -121,11 +123,12 @@ public abstract class AbstractMappedMinecraftProvider classNames = extension.isForge() ? InnerClassRemapper.readClassNames(remappedJars.inputJar()) : Set.of(); final Map remappedSignatures = SignatureFixerApplyVisitor.getRemappedSignatures(getTargetNamespace() == MappingsNamespace.INTERMEDIARY, mappingsProvider, project, toM); TinyRemapper remapper = TinyRemapperHelper.getTinyRemapper(project, fromM, toM, true, (builder) -> { builder.extraPostApplyVisitor(new SignatureFixerApplyVisitor(remappedSignatures)); configureRemapper(remappedJars, builder); - }); + }, classNames); try (OutputConsumerPath outputConsumer = new OutputConsumerPath.Builder(remappedJars.outputJar()).build()) { outputConsumer.addNonClassFiles(remappedJars.inputJar()); diff --git a/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java b/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java index c79d568e..8e34f9ee 100644 --- a/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java +++ b/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java @@ -30,6 +30,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Consumer; import java.util.regex.Pattern; @@ -44,6 +45,7 @@ import org.gradle.api.Project; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.util.srg.InnerClassRemapper; import net.fabricmc.mappingio.MappingReader; import net.fabricmc.mappingio.tree.MappingTree; import net.fabricmc.mappingio.tree.MemoryMappingTree; @@ -67,17 +69,25 @@ public final class TinyRemapperHelper { } public static TinyRemapper getTinyRemapper(Project project, String fromM, String toM) throws IOException { - return getTinyRemapper(project, fromM, toM, false, (builder) -> { }); + return getTinyRemapper(project, fromM, toM, false, (builder) -> { }, Set.of()); } - public static TinyRemapper getTinyRemapper(Project project, String fromM, String toM, boolean fixRecords, Consumer builderConsumer) throws IOException { + public static TinyRemapper getTinyRemapper(Project project, String fromM, String toM, boolean fixRecords, Consumer builderConsumer, Set fromClassNames) throws IOException { LoomGradleExtension extension = LoomGradleExtension.get(project); TinyRemapper remapper = _getTinyRemapper(project, fixRecords, builderConsumer).getLeft(); - remapper.replaceMappings(ImmutableSet.of( - TinyRemapperHelper.create((fromM.equals("srg") || toM.equals("srg")) && extension.isForge() ? extension.getMappingsProvider().getMappingsWithSrg() : extension.getMappingsProvider().getMappings(), fromM, toM, true), - out -> TinyRemapperHelper.JSR_TO_JETBRAINS.forEach(out::acceptClass) - )); + ImmutableSet.Builder providers = ImmutableSet.builder(); + providers.add(TinyRemapperHelper.create((fromM.equals("srg") || toM.equals("srg")) && extension.isForge() ? extension.getMappingsProvider().getMappingsWithSrg() : extension.getMappingsProvider().getMappings(), fromM, toM, true)); + + if (extension.isForge()) { + if (!fromClassNames.isEmpty()) { + providers.add(InnerClassRemapper.of(fromClassNames, extension.getMappingsProvider().getMappingsWithSrg(), fromM, toM)); + } + } else { + providers.add(out -> TinyRemapperHelper.JSR_TO_JETBRAINS.forEach(out::acceptClass)); + } + + remapper.replaceMappings(providers.build()); return remapper; }