From cea09e71e2d28101fc2b356d41b9f5ef03703a4c Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 27 Jul 2020 22:44:47 +0300 Subject: [PATCH] Add srgRemapJar (unknown if it works, I need to add more Forge dependencies first) --- build.gradle | 2 +- .../net/fabricmc/loom/AbstractPlugin.java | 10 ++- .../net/fabricmc/loom/LoomGradlePlugin.java | 7 ++ .../net/fabricmc/loom/task/RemapJarTask.java | 3 +- .../fabricmc/loom/task/SrgRemapJarTask.java | 81 +++++++++++++++++++ 5 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/fabricmc/loom/task/SrgRemapJarTask.java diff --git a/build.gradle b/build.gradle index 93311882..23a98b65 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ if (ENV.BUILD_NUMBER) { build = 'jenkins #${ENV.BUILD_NUMBER}' version = baseVersion + '.' + ENV.BUILD_NUMBER } else { - version = baseVersion + '-forge.27' + version = baseVersion + '-forge.28' } repositories { diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index 0d1d26d1..85abaec4 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -61,6 +61,7 @@ import net.fabricmc.loom.task.AbstractLoomTask; import net.fabricmc.loom.task.RemapAllSourcesTask; import net.fabricmc.loom.task.RemapJarTask; import net.fabricmc.loom.task.RemapSourcesJarTask; +import net.fabricmc.loom.task.SrgRemapJarTask; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.DownloadUtil; import net.fabricmc.loom.util.FabricApiExtension; @@ -266,13 +267,18 @@ public class AbstractPlugin implements Plugin { if (extension.remapMod) { AbstractArchiveTask jarTask = (AbstractArchiveTask) project1.getTasks().getByName("jar"); RemapJarTask remapJarTask = (RemapJarTask) project1.getTasks().findByName("remapJar"); + SrgRemapJarTask srgRemapJarTask = (SrgRemapJarTask) project1.getTasks().findByName("srgRemapJar"); assert remapJarTask != null; + assert srgRemapJarTask != null; if (!remapJarTask.getInput().isPresent()) { jarTask.setClassifier("dev"); - remapJarTask.setClassifier(""); + remapJarTask.setClassifier("official"); remapJarTask.getInput().set(jarTask.getArchivePath()); + srgRemapJarTask.setClassifier(""); + srgRemapJarTask.getInput().set(remapJarTask.getArchivePath()); + srgRemapJarTask.getMappings().set(extension.getMcpConfigProvider().getSrg()); } extension.getUnmappedModCollection().from(jarTask); @@ -280,8 +286,10 @@ public class AbstractPlugin implements Plugin { remapJarTask.getRemapAccessWidener().set(true); project1.getArtifacts().add("archives", remapJarTask); + project1.getArtifacts().add("archives", srgRemapJarTask); remapJarTask.dependsOn(jarTask); project1.getTasks().getByName("build").dependsOn(remapJarTask); + project1.getTasks().getByName("build").dependsOn(srgRemapJarTask); Map> taskMap = project.getAllTasks(true); diff --git a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java index 735f2799..b8e9120d 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java +++ b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java @@ -47,6 +47,7 @@ import net.fabricmc.loom.task.RemapJarTask; import net.fabricmc.loom.task.RemapSourcesJarTask; import net.fabricmc.loom.task.RunClientTask; import net.fabricmc.loom.task.RunServerTask; +import net.fabricmc.loom.task.SrgRemapJarTask; public class LoomGradlePlugin extends AbstractPlugin { public static File getMappedByproduct(Project project, String suffix) { @@ -88,6 +89,12 @@ public class LoomGradlePlugin extends AbstractPlugin { t.setGroup("fabric"); }); + tasks.register("srgRemapJar", SrgRemapJarTask.class, t -> { + t.setDescription("Remaps the built project jar to intermediary mappings."); + t.setGroup("fabric"); + t.dependsOn("remapJar"); + }); + tasks.register("downloadAssets", DownloadAssetsTask.class, t -> t.setDescription("Downloads required assets for Fabric.")); tasks.register("genIdeaWorkspace", GenIdeaProjectTask.class, t -> { diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 74ea11e9..dc881575 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -91,7 +91,8 @@ public class RemapJarTask extends Jar { MappingsProvider mappingsProvider = extension.getMappingsProvider(); String fromM = "named"; - String toM = "intermediary"; + String toM = "official"; + // ^ This is passed to SrgRemapJarTask. Set classpathFiles = new LinkedHashSet<>( project.getConfigurations().getByName("compileClasspath").getFiles() diff --git a/src/main/java/net/fabricmc/loom/task/SrgRemapJarTask.java b/src/main/java/net/fabricmc/loom/task/SrgRemapJarTask.java new file mode 100644 index 00000000..eece2872 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/task/SrgRemapJarTask.java @@ -0,0 +1,81 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2016, 2017, 2018 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.task; + +import java.io.File; +import java.io.FileReader; + +import org.cadixdev.atlas.Atlas; +import org.cadixdev.bombe.asm.jar.JarEntryRemappingTransformer; +import org.cadixdev.lorenz.MappingSet; +import org.cadixdev.lorenz.asm.LorenzRemapper; +import org.cadixdev.lorenz.io.srg.tsrg.TSrgReader; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; +import org.gradle.jvm.tasks.Jar; + +import net.fabricmc.loom.util.GradleSupport; + +@SuppressWarnings("UnstableApiUsage") +public class SrgRemapJarTask extends Jar { + private final RegularFileProperty input; + private final RegularFileProperty mappings; + + public SrgRemapJarTask() { + super(); + input = GradleSupport.getfileProperty(getProject()); + mappings = GradleSupport.getfileProperty(getProject()); + } + + @TaskAction + public void doTask() throws Throwable { + try (TSrgReader reader = new TSrgReader(new FileReader(mappings.getAsFile().get())); + Atlas atlas = new Atlas()) { + MappingSet mappings = reader.read(); + + atlas.install(ctx -> new JarEntryRemappingTransformer( + new LorenzRemapper(mappings, ctx.inheritanceProvider()) + )); + + for (File file : getProject().getConfigurations().getByName("runtimeClasspath")) { + atlas.use(file.toPath()); + } + + atlas.run(input.getAsFile().get().toPath(), getArchivePath().toPath()); + } + } + + @InputFile + public RegularFileProperty getInput() { + return input; + } + + @InputFile + public RegularFileProperty getMappings() { + return mappings; + } +}