aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-12-27 13:02:10 +0800
committershedaniel <daniel@shedaniel.me>2020-12-27 13:02:10 +0800
commit6647f77d95ba870e07adc83cc32ac78faf8415b6 (patch)
treece2984a2bbface3872b6a2f082eaec2f14193eaf /src/main
parent4b93054ddbc64bce9b9e37a0e1f23122fa2c50b2 (diff)
downloadarchitectury-loom-6647f77d95ba870e07adc83cc32ac78faf8415b6.tar.gz
architectury-loom-6647f77d95ba870e07adc83cc32ac78faf8415b6.tar.bz2
architectury-loom-6647f77d95ba870e07adc83cc32ac78faf8415b6.zip
Proper mod depending
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/net/fabricmc/loom/providers/LaunchProvider.java5
-rw-r--r--src/main/java/net/fabricmc/loom/providers/MappingsProvider.java7
-rw-r--r--src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java56
-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
8 files changed, 108 insertions, 70 deletions
diff --git a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java
index a2aafaba..48fe2e50 100644
--- a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java
@@ -81,7 +81,10 @@ public class LaunchProvider extends DependencyProvider {
.argument("client", "fmluserdevclient")
.argument("server", "--launchTarget")
- .argument("server", "fmluserdevserver");
+ .argument("server", "fmluserdevserver")
+
+ .property("mixin.env.remapRefMap", "true")
+ .property("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", getExtension().getMappingsProvider().srgToNamedSrg.getAbsolutePath());
String mixinConfig = getExtension().mixinConfig;
diff --git a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java
index 9c944595..88b3be0e 100644
--- a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java
@@ -40,6 +40,7 @@ import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.net.UrlEscapers;
+import net.fabricmc.loom.util.srg.SrgNamedWriter;
import org.apache.commons.io.FileUtils;
import org.apache.tools.ant.util.StringUtils;
import org.gradle.api.Project;
@@ -83,6 +84,7 @@ public class MappingsProvider extends DependencyProvider {
public File mappingsMixinExport;
public Path tinyMappingsWithSrg;
public File mixinTinyMappingsWithSrg; // FORGE: The mixin mappings have srg names in intermediary.
+ public File srgToNamedSrg; // FORGE: srg to named in srg file format
public MappingsProvider(Project project) {
super(project);
@@ -152,6 +154,7 @@ public class MappingsProvider extends DependencyProvider {
tinyMappingsJar = new File(getExtension().getUserCache(), mappingsJar.getName().replace(".jar", "-" + jarClassifier + ".jar"));
tinyMappingsWithSrg = mappingsDir.resolve(StringUtils.removeSuffix(mappingsJar.getName(), ".jar") + "-srg.tiny");
mixinTinyMappingsWithSrg = mappingsDir.resolve(StringUtils.removeSuffix(mappingsJar.getName(), ".jar") + "-mixin-srg.tiny").toFile();
+ srgToNamedSrg = mappingsDir.resolve(StringUtils.removeSuffix(mappingsJar.getName(), ".jar") + "-srg-named.srg").toFile();
if (!tinyMappings.exists() || isRefreshDeps()) {
storeMappings(getProject(), minecraftProvider, mappingsJar.toPath());
@@ -172,6 +175,10 @@ public class MappingsProvider extends DependencyProvider {
Files.deleteIfExists(mixinTinyMappingsWithSrg.toPath());
Files.write(mixinTinyMappingsWithSrg.toPath(), lines);
}
+
+ if (!srgToNamedSrg.exists() || isRefreshDeps()) {
+ SrgNamedWriter.writeTo(getProject().getLogger(), srgToNamedSrg.toPath(), getMappingsWithSrg());
+ }
}
addDependency(tinyMappingsJar, Constants.Configurations.MAPPINGS_FINAL);
diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java
index decc6223..be4f5cbc 100644
--- a/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java
@@ -24,11 +24,20 @@
package net.fabricmc.loom.providers;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import com.google.common.collect.ImmutableMap;
+import net.fabricmc.loom.util.Constants;
+import net.fabricmc.loom.util.DependencyProvider;
+import net.fabricmc.loom.util.TinyRemapperMappingsHelper;
+import net.fabricmc.loom.util.srg.AtRemapper;
+import net.fabricmc.loom.util.srg.CoreModClassRemapper;
+import net.fabricmc.mapping.tree.TinyTree;
+import net.fabricmc.tinyremapper.NonClassCopyMode;
+import net.fabricmc.tinyremapper.OutputConsumerPath;
+import net.fabricmc.tinyremapper.TinyRemapper;
+import org.gradle.api.Project;
+import org.zeroturnaround.zip.ZipUtil;
+
+import java.io.*;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
@@ -41,19 +50,6 @@ import java.util.function.Consumer;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
-import com.google.common.collect.ImmutableMap;
-import org.gradle.api.Project;
-
-import net.fabricmc.loom.util.TinyRemapperMappingsHelper;
-import net.fabricmc.loom.util.srg.AtRemapper;
-import net.fabricmc.loom.util.srg.CoreModClassRemapper;
-import net.fabricmc.mapping.tree.TinyTree;
-import net.fabricmc.tinyremapper.NonClassCopyMode;
-import net.fabricmc.tinyremapper.OutputConsumerPath;
-import net.fabricmc.tinyremapper.TinyRemapper;
-import net.fabricmc.loom.util.Constants;
-import net.fabricmc.loom.util.DependencyProvider;
-
public class MinecraftMappedProvider extends DependencyProvider {
private static final Map<String, String> JSR_TO_JETBRAINS = new ImmutableMap.Builder<String, String>()
.put("javax/annotation/Nullable", "org/jetbrains/annotations/Nullable")
@@ -64,6 +60,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
private File inputJar;
private File minecraftMappedJar;
private File minecraftIntermediaryJar;
+ private File minecraftSrgJar;
private MinecraftProvider minecraftProvider;
@@ -83,7 +80,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
boolean isForgeAtDirty = getExtension().isForge() && getExtension().getMappingsProvider().patchedProvider.isAtDirty();
- if (!minecraftMappedJar.exists() || !getIntermediaryJar().exists() || isRefreshDeps() || isForgeAtDirty) {
+ if (!minecraftMappedJar.exists() || !getIntermediaryJar().exists() || (getExtension().isForge() && !getSrgJar().exists()) || isRefreshDeps() || isForgeAtDirty) {
if (minecraftMappedJar.exists()) {
minecraftMappedJar.delete();
}
@@ -93,6 +90,10 @@ public class MinecraftMappedProvider extends DependencyProvider {
if (minecraftIntermediaryJar.exists()) {
minecraftIntermediaryJar.delete();
}
+
+ if (getExtension().isForge() && minecraftSrgJar.exists()) {
+ minecraftSrgJar.delete();
+ }
try {
mapMinecraftJar();
@@ -100,6 +101,9 @@ public class MinecraftMappedProvider extends DependencyProvider {
// Cleanup some some things that may be in a bad state now
minecraftMappedJar.delete();
minecraftIntermediaryJar.delete();
+ if (getExtension().isForge()) {
+ minecraftSrgJar.delete();
+ }
getExtension().getMappingsProvider().cleanFiles();
throw new RuntimeException("Failed to remap minecraft", t);
}
@@ -120,9 +124,10 @@ public class MinecraftMappedProvider extends DependencyProvider {
Path input = inputJar.toPath();
Path outputMapped = minecraftMappedJar.toPath();
Path outputIntermediary = minecraftIntermediaryJar.toPath();
+ Path outputSrg = minecraftSrgJar == null ? null : minecraftSrgJar.toPath();
- for (String toM : Arrays.asList("named", "intermediary")) {
- Path output = "named".equals(toM) ? outputMapped : outputIntermediary;
+ for (String toM : (getExtension().isForge() ? Arrays.asList("named", "intermediary", "srg") : Arrays.asList("named", "intermediary"))) {
+ Path output = "named".equals(toM) ? outputMapped : "srg".equals(toM) ? outputSrg : outputIntermediary;
getProject().getLogger().lifecycle(":remapping minecraft (TinyRemapper, " + fromM + " -> " + toM + ")");
@@ -144,7 +149,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
remapper.finish();
}
- if (getExtension().isForge()) {
+ if (getExtension().isForge() && !"srg".equals(toM)) {
getProject().getLogger().lifecycle(":running forge finalising tasks");
// TODO: Relocate this to its own class
@@ -183,7 +188,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
public TinyRemapper getTinyRemapper(String fromM, String toM) throws IOException {
TinyRemapper.Builder builder = TinyRemapper.newRemapper()
- .withMappings(TinyRemapperMappingsHelper.create(getExtension().getMappingsProvider().getMappings(), fromM, toM, true))
+ .withMappings(TinyRemapperMappingsHelper.create(getExtension().isForge() ? getExtension().getMappingsProvider().getMappingsWithSrg() : getExtension().getMappingsProvider().getMappings(), fromM, toM, true))
.renameInvalidLocals(true)
.rebuildSourceFilenames(true);
@@ -213,6 +218,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
public void initFiles(MinecraftProvider minecraftProvider, MappingsProvider mappingsProvider) {
this.minecraftProvider = minecraftProvider;
minecraftIntermediaryJar = new File(getExtension().getUserCache(), "minecraft-" + getJarVersionString("intermediary") + ".jar");
+ minecraftSrgJar = !getExtension().isForge() ? null : new File(getExtension().getUserCache(), "minecraft-" + getJarVersionString("srg") + ".jar");
minecraftMappedJar = new File(getJarDirectory(getExtension().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("mapped") + ".jar");
inputJar = getExtension().isForge() ? mappingsProvider.patchedProvider.getMergedJar() : minecraftProvider.getMergedJar();
}
@@ -232,6 +238,10 @@ public class MinecraftMappedProvider extends DependencyProvider {
public File getIntermediaryJar() {
return minecraftIntermediaryJar;
}
+
+ public File getSrgJar() {
+ return minecraftSrgJar;
+ }
public File getMappedJar() {
return minecraftMappedJar;
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());
+ }
+ }
+ }
+}