diff options
Diffstat (limited to 'src/main/java/net/fabricmc/loom/util')
5 files changed, 64 insertions, 46 deletions
diff --git a/src/main/java/net/fabricmc/loom/util/ModProcessor.java b/src/main/java/net/fabricmc/loom/util/ModProcessor.java index f6d08935..a835ff61 100644 --- a/src/main/java/net/fabricmc/loom/util/ModProcessor.java +++ b/src/main/java/net/fabricmc/loom/util/ModProcessor.java @@ -139,7 +139,7 @@ public class ModProcessor { MinecraftMappedProvider mappedProvider = extension.getMinecraftMappedProvider(); MappingsProvider mappingsProvider = extension.getMappingsProvider(); - Path mc = mappedProvider.getIntermediaryJar().toPath(); + Path mc = extension.isForge() ? mappedProvider.getSrgJar().toPath() : mappedProvider.getIntermediaryJar().toPath(); Path[] mcDeps = mappedProvider.getMapperPaths().stream().map(File::toPath).toArray(Path[]::new); List<ModDependencyInfo> remapList = processList.stream().filter(ModDependencyInfo::requiresRemapping).collect(Collectors.toList()); diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java index 1f901aea..a1c04887 100644 --- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java @@ -178,6 +178,9 @@ public class SourceRemapper { m.getClassPath().add(extension.getMinecraftMappedProvider().getMappedJar().toPath()); m.getClassPath().add(extension.getMinecraftMappedProvider().getIntermediaryJar().toPath()); + if (extension.isForge()) { + m.getClassPath().add(extension.getMinecraftMappedProvider().getSrgJar().toPath()); + } Dependency annotationDependency = extension.getDependencyManager().getProvider(LaunchProvider.class).annotationDependency; Set<File> files = project.getConfigurations().getByName("compileOnly") diff --git a/src/main/java/net/fabricmc/loom/util/srg/AtRemapper.java b/src/main/java/net/fabricmc/loom/util/srg/AtRemapper.java index 5795fd4e..38b2a0a8 100644 --- a/src/main/java/net/fabricmc/loom/util/srg/AtRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/srg/AtRemapper.java @@ -24,21 +24,19 @@ package net.fabricmc.loom.util.srg; -import java.io.IOException; -import java.net.URI; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; - -import com.google.common.collect.ImmutableMap; - import net.fabricmc.loom.util.function.CollectionUtil; import net.fabricmc.mapping.tree.TinyTree; import org.apache.commons.lang3.StringUtils; import org.gradle.api.logging.Logger; +import org.zeroturnaround.zip.ZipUtil; +import org.zeroturnaround.zip.transform.StringZipEntryTransformer; +import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipEntry; /** * Remaps AT classes from SRG to Yarn. @@ -47,21 +45,20 @@ import org.gradle.api.logging.Logger; */ public final class AtRemapper { public static void remap(Logger logger, Path jar, TinyTree mappings) throws IOException { - try (FileSystem fs = FileSystems.newFileSystem(URI.create("jar:" + jar.toUri()), ImmutableMap.of("create", false))) { - Path atPath = fs.getPath("META-INF", "accesstransformer.cfg"); - - if (Files.exists(atPath)) { - List<String> lines = Files.readAllLines(atPath); - List<String> output = new ArrayList<>(lines.size()); - - for (int i = 0; i < lines.size(); i++) { - String line = lines.get(i).trim(); - + ZipUtil.transformEntries(jar.toFile(), new ZipEntryTransformerEntry[]{(new ZipEntryTransformerEntry("META-INF/accesstransformer.cfg", new StringZipEntryTransformer() { + @Override + protected String transform(ZipEntry zipEntry, String input) { + String[] lines = input.split("\n"); + List<String> output = new ArrayList<>(lines.length); + + for (int i = 0; i < lines.length; i++) { + String line = lines[i].trim(); + if (line.startsWith("#") || StringUtils.isBlank(line)) { output.add(i, line); continue; } - + String[] parts = line.split(" "); if (parts.length < 2) { logger.warn("Invalid AT Line: " + line); @@ -73,15 +70,12 @@ public final class AtRemapper { mappings.getClasses(), def -> def.getName("srg").equals(name) ).map(def -> def.getName("named")).orElse(name).replace('/', '.'); - + output.add(i, String.join(" ", parts)); } - - if (!lines.equals(output)) { - Files.delete(atPath); - Files.write(atPath, output); - } + + return String.join("\n", output); } - } + }))}); } } diff --git a/src/main/java/net/fabricmc/loom/util/srg/CoreModClassRemapper.java b/src/main/java/net/fabricmc/loom/util/srg/CoreModClassRemapper.java index bb36794e..2ee9b69c 100644 --- a/src/main/java/net/fabricmc/loom/util/srg/CoreModClassRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/srg/CoreModClassRemapper.java @@ -24,28 +24,27 @@ package net.fabricmc.loom.util.srg; +import com.google.common.collect.ImmutableMap; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.fabricmc.loom.util.function.CollectionUtil; +import net.fabricmc.mapping.tree.TinyTree; +import org.apache.logging.log4j.util.Strings; +import org.gradle.api.logging.Logger; + import java.io.IOException; import java.io.Reader; +import java.io.Writer; import java.net.URI; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.charset.StandardCharsets; +import java.nio.file.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import org.gradle.api.logging.Logger; - -import net.fabricmc.loom.util.function.CollectionUtil; -import net.fabricmc.mapping.tree.TinyTree; - /** * Remaps coremod class names from SRG to Yarn. * @@ -102,10 +101,11 @@ public final class CoreModClassRemapper { } } } - + if (!lines.equals(output)) { - Files.delete(js); - Files.write(js, output); + try (Writer writer = Files.newBufferedWriter(js, StandardCharsets.UTF_8, StandardOpenOption.WRITE)) { + writer.write(String.join(Strings.LINE_SEPARATOR, output)); + } } } } diff --git a/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java b/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java new file mode 100644 index 00000000..98315615 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java @@ -0,0 +1,21 @@ +package net.fabricmc.loom.util.srg; + +import net.fabricmc.lorenztiny.TinyMappingsReader; +import net.fabricmc.mapping.tree.TinyTree; +import org.cadixdev.lorenz.io.srg.SrgWriter; +import org.gradle.api.logging.Logger; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class SrgNamedWriter { + public static void writeTo(Logger logger, Path srgFile, TinyTree mappings) throws IOException { + Files.deleteIfExists(srgFile); + try (SrgWriter writer = new SrgWriter(Files.newBufferedWriter(srgFile))) { + try (TinyMappingsReader reader = new TinyMappingsReader(mappings, "srg", "named")) { + writer.write(reader.read()); + } + } + } +} |