diff --git a/src/main/java/net/fabricmc/loom/util/ModProcessor.java b/src/main/java/net/fabricmc/loom/util/ModProcessor.java index cb9d53f..b2e9746 100644 --- a/src/main/java/net/fabricmc/loom/util/ModProcessor.java +++ b/src/main/java/net/fabricmc/loom/util/ModProcessor.java @@ -36,7 +36,6 @@ import java.nio.file.Path; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.BiConsumer; import java.util.jar.JarFile; import java.util.zip.ZipEntry; @@ -97,7 +96,7 @@ public class ModProcessor { }))}); } - private static byte[] remapaccessWidener(byte[] input, Remapper remapper) { + private static byte[] remapAccessWidener(byte[] input, Remapper remapper) { try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(input), StandardCharsets.UTF_8))) { AccessWidener accessWidener = new AccessWidener(); accessWidener.read(bufferedReader); @@ -137,6 +136,7 @@ public class ModProcessor { final Map tagMap = new HashMap<>(); final Map outputConsumerMap = new HashMap<>(); + final Map accessWidenerMap = new HashMap<>(); for (ModDependencyInfo info : processList) { InputTag tag = remapper.createInputTag(); @@ -151,28 +151,23 @@ public class ModProcessor { outputConsumerMap.put(info, outputConsumer); String accessWidener = info.getAccessWidener(); - if (accessWidener == null) { - remapper.apply(outputConsumer, tagMap.get(info)); - } else { - remapper.apply(remapAccessWidener(remapper.getRemapper(), accessWidener, outputConsumer), tagMap.get(info)); + if (accessWidener != null) { + accessWidenerMap.put(info, remapAccessWidener(ZipUtil.unpackEntry(info.inputFile, accessWidener), remapper.getRemapper())); } + + remapper.apply(outputConsumer, tagMap.get(info)); } remapper.finish(); for (ModDependencyInfo info : processList) { outputConsumerMap.get(info).close(); - } - } + byte[] accessWidener = accessWidenerMap.get(info); - static BiConsumer remapAccessWidener(Remapper remapper, String accessWidener, BiConsumer output) { - return (s, bytes) -> { - if (s.equals(accessWidener)) { - output.accept(s, remapaccessWidener(bytes, remapper)); - } else { - output.accept(s, bytes); + if (accessWidener != null) { + ZipUtil.replaceEntry(info.getRemappedOutput(), info.getAccessWidener(), accessWidener); } - }; + } } static JsonObject readInstallerJson(File file, Project project) {