aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/net/fabricmc/loom/task/RemapJarTask.java16
-rw-r--r--src/main/java/net/fabricmc/loom/util/LfWriter.java43
-rw-r--r--src/main/java/net/fabricmc/loom/util/aw2at/Aw2At.java35
-rw-r--r--src/test/groovy/net/fabricmc/loom/test/integration/forge/Aw2AtTest.groovy20
-rw-r--r--src/test/resources/projects/forge/aw2At/src/main/resources/my.accesswidener4
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtMojmap/build.gradle (renamed from src/test/resources/projects/forge/legacyAw2At/build.gradle)0
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtMojmap/expected.accesstransformer.cfg (renamed from src/test/resources/projects/forge/legacyAw2At/expected.accesstransformer.cfg)0
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtMojmap/gradle.properties (renamed from src/test/resources/projects/forge/legacyAw2At/gradle.properties)0
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtMojmap/settings.gradle (renamed from src/test/resources/projects/forge/legacyAw2At/settings.gradle)0
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtMojmap/src/main/resources/my.accesswidener (renamed from src/test/resources/projects/forge/legacyAw2At/src/main/resources/my.accesswidener)4
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtYarn/build.gradle89
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtYarn/expected.accesstransformer.cfg2
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtYarn/gradle.properties18
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtYarn/settings.gradle2
-rw-r--r--src/test/resources/projects/forge/legacyAw2AtYarn/src/main/resources/my.accesswidener3
15 files changed, 203 insertions, 33 deletions
diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java
index 5e395a02..1b9a1e48 100644
--- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java
+++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java
@@ -24,6 +24,7 @@
package net.fabricmc.loom.task;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -67,6 +68,7 @@ import dev.architectury.tinyremapper.TinyUtils;
import dev.architectury.tinyremapper.extension.mixin.MixinExtension;
import org.cadixdev.at.AccessTransformSet;
import org.cadixdev.at.io.AccessTransformFormats;
+import org.cadixdev.lorenz.MappingSet;
import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
@@ -101,6 +103,7 @@ import net.fabricmc.loom.configuration.accesswidener.AccessWidenerJarProcessor;
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.FileSystemUtil;
+import net.fabricmc.loom.util.LfWriter;
import net.fabricmc.loom.util.SourceRemapper;
import net.fabricmc.loom.util.TinyRemapperHelper;
import net.fabricmc.loom.util.ZipReprocessorUtil;
@@ -496,8 +499,8 @@ public class RemapJarTask extends Jar {
throw new NoSuchFileException("Could not find AW '" + aw + "' to convert into AT!");
}
- try (InputStream in = Files.newInputStream(awPath)) {
- at.merge(Aw2At.toAccessTransformSet(in));
+ try (BufferedReader reader = Files.newBufferedReader(awPath, StandardCharsets.UTF_8)) {
+ at.merge(Aw2At.toAccessTransformSet(reader));
}
Files.delete(awPath);
@@ -505,10 +508,13 @@ public class RemapJarTask extends Jar {
LoomGradleExtension extension = LoomGradleExtension.get(getProject());
TinyTree mappings = extension.shouldGenerateSrgTiny() ? extension.getMappingsProvider().getMappingsWithSrg() : extension.getMappingsProvider().getMappings();
- TinyMappingsReader reader = new TinyMappingsReader(mappings, fromM.get(), toM.get());
- at = at.remap(reader.read());
- try (Writer writer = Files.newBufferedWriter(atPath)) {
+ try (TinyMappingsReader reader = new TinyMappingsReader(mappings, fromM.get(), toM.get())) {
+ MappingSet mappingSet = reader.read();
+ at = at.remap(mappingSet);
+ }
+
+ try (Writer writer = new LfWriter(Files.newBufferedWriter(atPath))) {
AccessTransformFormats.FML.write(writer, at);
}
}
diff --git a/src/main/java/net/fabricmc/loom/util/LfWriter.java b/src/main/java/net/fabricmc/loom/util/LfWriter.java
new file mode 100644
index 00000000..cbd6540f
--- /dev/null
+++ b/src/main/java/net/fabricmc/loom/util/LfWriter.java
@@ -0,0 +1,43 @@
+/*
+ * This file is part of fabric-loom, licensed under the MIT License (MIT).
+ *
+ * Copyright (c) 2021 FabricMC
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.fabricmc.loom.util;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * A {@link BufferedWriter} that writes {@code \n} (LF) instead of {@link System#lineSeparator()}.
+ */
+public class LfWriter extends BufferedWriter {
+ public LfWriter(Writer out) {
+ super(out);
+ }
+
+ @Override
+ public void newLine() throws IOException {
+ write('\n');
+ }
+}
diff --git a/src/main/java/net/fabricmc/loom/util/aw2at/Aw2At.java b/src/main/java/net/fabricmc/loom/util/aw2at/Aw2At.java
index 8c9dbe08..2574b57a 100644
--- a/src/main/java/net/fabricmc/loom/util/aw2at/Aw2At.java
+++ b/src/main/java/net/fabricmc/loom/util/aw2at/Aw2At.java
@@ -27,9 +27,6 @@ package net.fabricmc.loom.util.aw2at;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import org.cadixdev.at.AccessChange;
@@ -82,27 +79,25 @@ public final class Aw2At {
remapJar.getAtAccessWideners().addAll(extension.getForge().getExtraAccessWideners());
}
- public static AccessTransformSet toAccessTransformSet(InputStream in) throws IOException {
+ public static AccessTransformSet toAccessTransformSet(BufferedReader reader) throws IOException {
AccessTransformSet atSet = AccessTransformSet.create();
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
- new AccessWidenerReader(new AccessWidenerReader.Visitor() {
- @Override
- public void visitClass(String name, AccessWidenerReader.AccessType access) {
- atSet.getOrCreateClass(name).merge(toAt(access));
- }
+ new AccessWidenerReader(new AccessWidenerReader.Visitor() {
+ @Override
+ public void visitClass(String name, AccessWidenerReader.AccessType access) {
+ atSet.getOrCreateClass(name).merge(toAt(access));
+ }
- @Override
- public void visitMethod(String owner, String name, String descriptor, AccessWidenerReader.AccessType access) {
- atSet.getOrCreateClass(owner).mergeMethod(MethodSignature.of(name, descriptor), toAt(access));
- }
+ @Override
+ public void visitMethod(String owner, String name, String descriptor, AccessWidenerReader.AccessType access) {
+ atSet.getOrCreateClass(owner).mergeMethod(MethodSignature.of(name, descriptor), toAt(access));
+ }
- @Override
- public void visitField(String owner, String name, String descriptor, AccessWidenerReader.AccessType access) {
- atSet.getOrCreateClass(owner).mergeField(name, toAt(access));
- }
- }).read(reader);
- }
+ @Override
+ public void visitField(String owner, String name, String descriptor, AccessWidenerReader.AccessType access) {
+ atSet.getOrCreateClass(owner).mergeField(name, toAt(access));
+ }
+ }).read(reader);
return atSet;
}
diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/forge/Aw2AtTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/forge/Aw2AtTest.groovy
index c6f6115c..92c0503d 100644
--- a/src/test/groovy/net/fabricmc/loom/test/integration/forge/Aw2AtTest.groovy
+++ b/src/test/groovy/net/fabricmc/loom/test/integration/forge/Aw2AtTest.groovy
@@ -31,7 +31,7 @@ import static net.fabricmc.loom.test.LoomTestConstants.*
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS
class Aw2AtTest extends Specification implements GradleProjectTestTrait {
- def "build"() {
+ def "build"() { // 1.17+ uses a new srg naming pattern
setup:
def gradle = gradleProject(project: "forge/aw2At", version: DEFAULT_GRADLE)
@@ -43,9 +43,9 @@ class Aw2AtTest extends Specification implements GradleProjectTestTrait {
gradle.getOutputZipEntry("fabric-example-mod-1.0.0.jar", "META-INF/accesstransformer.cfg") == expected(gradle).replaceAll('\r', '')
}
- def "legacy build"() {
+ def "legacy build (mojmap)"() { // old 1.16 srg names
setup:
- def gradle = gradleProject(project: "forge/legacyAw2At", version: DEFAULT_GRADLE)
+ def gradle = gradleProject(project: "forge/legacyAw2AtMojmap", version: DEFAULT_GRADLE)
when:
def result = gradle.run(task: "build")
@@ -55,7 +55,19 @@ class Aw2AtTest extends Specification implements GradleProjectTestTrait {
gradle.getOutputZipEntry("fabric-example-mod-1.0.0.jar", "META-INF/accesstransformer.cfg") == expected(gradle).replaceAll('\r', '')
}
- String expected(GradleProject gradle) {
+ def "legacy build (yarn)"() { // old 1.16 srg names
+ setup:
+ def gradle = gradleProject(project: "forge/legacyAw2AtYarn", version: DEFAULT_GRADLE)
+
+ when:
+ def result = gradle.run(task: "build")
+
+ then:
+ result.task(":build").outcome == SUCCESS
+ gradle.getOutputZipEntry("fabric-example-mod-1.0.0.jar", "META-INF/accesstransformer.cfg") == expected(gradle).replaceAll('\r', '')
+ }
+
+ private static String expected(GradleProject gradle) {
return new File(gradle.projectDir, "expected.accesstransformer.cfg").text
}
}
diff --git a/src/test/resources/projects/forge/aw2At/src/main/resources/my.accesswidener b/src/test/resources/projects/forge/aw2At/src/main/resources/my.accesswidener
index 2f88fa59..a9babdd7 100644
--- a/src/test/resources/projects/forge/aw2At/src/main/resources/my.accesswidener
+++ b/src/test/resources/projects/forge/aw2At/src/main/resources/my.accesswidener
@@ -1,3 +1,3 @@
accessWidener v1 named
-accessible method net/minecraft/world/level/GameRules$BooleanValue create (Z)Lnet/minecraft/world/GameRules$Type;
-extendable method net/minecraft/world/level/block/IronBarsBlock attchsTo (Lnet/minecraft/world/level/block/state/BlockState;Z)Z
+accessible method net/minecraft/world/level/GameRules$BooleanValue create (Z)Lnet/minecraft/world/level/GameRules$Type;
+extendable method net/minecraft/world/level/block/IronBarsBlock attachsTo (Lnet/minecraft/world/level/block/state/BlockState;Z)Z
diff --git a/src/test/resources/projects/forge/legacyAw2At/build.gradle b/src/test/resources/projects/forge/legacyAw2AtMojmap/build.gradle
index 1b319a1b..1b319a1b 100644
--- a/src/test/resources/projects/forge/legacyAw2At/build.gradle
+++ b/src/test/resources/projects/forge/legacyAw2AtMojmap/build.gradle
diff --git a/src/test/resources/projects/forge/legacyAw2At/expected.accesstransformer.cfg b/src/test/resources/projects/forge/legacyAw2AtMojmap/expected.accesstransformer.cfg
index f04789ab..f04789ab 100644
--- a/src/test/resources/projects/forge/legacyAw2At/expected.accesstransformer.cfg
+++ b/src/test/resources/projects/forge/legacyAw2AtMojmap/expected.accesstransformer.cfg
diff --git a/src/test/resources/projects/forge/legacyAw2At/gradle.properties b/src/test/resources/projects/forge/legacyAw2AtMojmap/gradle.properties
index f3b2ac32..f3b2ac32 100644
--- a/src/test/resources/projects/forge/legacyAw2At/gradle.properties
+++ b/src/test/resources/projects/forge/legacyAw2AtMojmap/gradle.properties
diff --git a/src/test/resources/projects/forge/legacyAw2At/settings.gradle b/src/test/resources/projects/forge/legacyAw2AtMojmap/settings.gradle
index c162c363..c162c363 100644
--- a/src/test/resources/projects/forge/legacyAw2At/settings.gradle
+++ b/src/test/resources/projects/forge/legacyAw2AtMojmap/settings.gradle
diff --git a/src/test/resources/projects/forge/legacyAw2At/src/main/resources/my.accesswidener b/src/test/resources/projects/forge/legacyAw2AtMojmap/src/main/resources/my.accesswidener
index 2f88fa59..a9babdd7 100644
--- a/src/test/resources/projects/forge/legacyAw2At/src/main/resources/my.accesswidener
+++ b/src/test/resources/projects/forge/legacyAw2AtMojmap/src/main/resources/my.accesswidener
@@ -1,3 +1,3 @@
accessWidener v1 named
-accessible method net/minecraft/world/level/GameRules$BooleanValue create (Z)Lnet/minecraft/world/GameRules$Type;
-extendable method net/minecraft/world/level/block/IronBarsBlock attchsTo (Lnet/minecraft/world/level/block/state/BlockState;Z)Z
+accessible method net/minecraft/world/level/GameRules$BooleanValue create (Z)Lnet/minecraft/world/level/GameRules$Type;
+extendable method net/minecraft/world/level/block/IronBarsBlock attachsTo (Lnet/minecraft/world/level/block/state/BlockState;Z)Z
diff --git a/src/test/resources/projects/forge/legacyAw2AtYarn/build.gradle b/src/test/resources/projects/forge/legacyAw2AtYarn/build.gradle
new file mode 100644
index 00000000..3e532cb5
--- /dev/null
+++ b/src/test/resources/projects/forge/legacyAw2AtYarn/build.gradle
@@ -0,0 +1,89 @@
+plugins {
+ id 'dev.architectury.loom'
+ id 'maven-publish'
+}
+
+sourceCompatibility = JavaVersion.VERSION_1_8
+targetCompatibility = JavaVersion.VERSION_1_8
+
+archivesBaseName = project.archives_base_name
+version = project.mod_version
+group = project.maven_group
+
+def mcVersion = '1.16.5'
+def forgeVersion = '36.2.2'
+
+loom {
+ accessWidenerPath = file('src/main/resources/my.accesswidener')
+
+ forge {
+ convertAccessWideners = true
+ }
+}
+
+repositories {
+ // Add repositories to retrieve artifacts from in here.
+ // You should only use this when depending on other mods because
+ // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
+ // See https://docs.gradle.org/current/userguide/declaring_repositories.html
+ // for more information about repositories.
+}
+
+dependencies {
+ // To change the versions see the gradle.properties file
+ minecraft "com.mojang:minecraft:$mcVersion"
+ mappings "net.fabricmc:yarn:$project.yarn_mappings:v2"
+ forge "net.minecraftforge:forge:$mcVersion-$forgeVersion"
+}
+
+tasks.withType(JavaCompile).configureEach {
+ // ensure that the encoding is set to UTF-8, no matter what the system default is
+ // this fixes some edge cases with special characters not displaying correctly
+ // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
+ // If Javadoc is generated, this must be specified in that task too.
+ it.options.encoding = "UTF-8"
+
+ // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too
+ // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used.
+ // We'll use that if it's available, but otherwise we'll use the older option.
+ def targetVersion = 8
+ if (JavaVersion.current().isJava9Compatible()) {
+ it.options.release = targetVersion
+ }
+}
+
+java {
+ // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
+ // if it is present.
+ // If you remove this line, sources will not be generated.
+ withSourcesJar()
+}
+
+jar {
+ from("LICENSE") {
+ rename { "${it}_${project.archivesBaseName}"}
+ }
+}
+
+// configure the maven publication
+publishing {
+ publications {
+ mavenJava(MavenPublication) {
+ // add all the jars that should be included when publishing to maven
+ artifact(remapJar) {
+ builtBy remapJar
+ }
+ artifact(sourcesJar) {
+ builtBy remapSourcesJar
+ }
+ }
+ }
+
+ // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
+ repositories {
+ // Add repositories to publish to here.
+ // Notice: This block does NOT have the same function as the block in the top level.
+ // The repositories here will be used for publishing your artifact, not for
+ // retrieving dependencies.
+ }
+}
diff --git a/src/test/resources/projects/forge/legacyAw2AtYarn/expected.accesstransformer.cfg b/src/test/resources/projects/forge/legacyAw2AtYarn/expected.accesstransformer.cfg
new file mode 100644
index 00000000..f04789ab
--- /dev/null
+++ b/src/test/resources/projects/forge/legacyAw2AtYarn/expected.accesstransformer.cfg
@@ -0,0 +1,2 @@
+public net.minecraft.world.GameRules$BooleanValue func_223568_b(Z)Lnet/minecraft/world/GameRules$RuleType;
+public-f net.minecraft.block.PaneBlock func_220112_a(Lnet/minecraft/block/BlockState;Z)Z
diff --git a/src/test/resources/projects/forge/legacyAw2AtYarn/gradle.properties b/src/test/resources/projects/forge/legacyAw2AtYarn/gradle.properties
new file mode 100644
index 00000000..472d96f6
--- /dev/null
+++ b/src/test/resources/projects/forge/legacyAw2AtYarn/gradle.properties
@@ -0,0 +1,18 @@
+# Done to increase the memory available to gradle.
+org.gradle.jvmargs=-Xmx1G
+
+# Fabric Properties
+# check these on https://fabricmc.net/use
+loader_version=0.11.2
+yarn_mappings=1.16.5+build.5
+
+# Mod Properties
+mod_version = 1.0.0
+maven_group = com.example
+archives_base_name = fabric-example-mod
+
+# Dependencies
+# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
+fabric_version=0.31.0+1.16
+
+loom.platform=forge
diff --git a/src/test/resources/projects/forge/legacyAw2AtYarn/settings.gradle b/src/test/resources/projects/forge/legacyAw2AtYarn/settings.gradle
new file mode 100644
index 00000000..c162c363
--- /dev/null
+++ b/src/test/resources/projects/forge/legacyAw2AtYarn/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name = "fabric-example-mod"
+
diff --git a/src/test/resources/projects/forge/legacyAw2AtYarn/src/main/resources/my.accesswidener b/src/test/resources/projects/forge/legacyAw2AtYarn/src/main/resources/my.accesswidener
new file mode 100644
index 00000000..2f8e9761
--- /dev/null
+++ b/src/test/resources/projects/forge/legacyAw2AtYarn/src/main/resources/my.accesswidener
@@ -0,0 +1,3 @@
+accessWidener v1 named
+accessible method net/minecraft/world/GameRules$BooleanRule create (Z)Lnet/minecraft/world/GameRules$Type;
+extendable method net/minecraft/block/PaneBlock connectsTo (Lnet/minecraft/block/BlockState;Z)Z