aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/fabricmc/loom/util')
-rw-r--r--src/main/java/net/fabricmc/loom/util/ModProcessor.java2
-rw-r--r--src/main/java/net/fabricmc/loom/util/SourceRemapper.java3
-rw-r--r--src/main/java/net/fabricmc/loom/util/srg/AtRemapper.java52
-rw-r--r--src/main/java/net/fabricmc/loom/util/srg/CoreModClassRemapper.java32
-rw-r--r--src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java21
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());
+ }
+ }
+ }
+}