Fix access widener remapping

dev/0.11
modmuss50 2020-05-14 01:07:54 +01:00
parent 58fe59491a
commit 7a56779368
1 changed files with 10 additions and 15 deletions

View File

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