From 2d0ba63fdbf5c1ac686839d6941c01d3bcd38565 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 27 Jul 2020 17:57:44 +0300 Subject: [PATCH] Use TR instead of Atlas for simple resource bundling and lambdas --- build.gradle | 6 +- .../loom/providers/MinecraftProvider.java | 67 +++++++++++-------- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index 3aab583e..f67dc490 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.8' + version = baseVersion + '-forge.9' } repositories { @@ -72,8 +72,8 @@ dependencies { // Forge patches implementation ('net.minecraftforge:binarypatcher:1.1.1') implementation ('org.cadixdev:lorenz:0.5.3') - implementation ('org.cadixdev:lorenz-asm:0.5.3') - implementation ('org.cadixdev:atlas:0.2.0') + implementation ('org.cadixdev:lorenz-io-enigma:0.5.3') + implementation ('cuchaz:enigma-cli:0.21+build.213') implementation ('net.minecraftforge.gradle:ForgeGradle:3.0.179') // Testing diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java index 73493042..c5148907 100644 --- a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java @@ -26,26 +26,27 @@ package net.fabricmc.loom.providers; import java.io.File; import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; -import java.io.Reader; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import java.util.function.Consumer; -import java.util.function.UnaryOperator; import java.util.zip.ZipError; import com.google.common.io.Files; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import cuchaz.enigma.command.ConvertMappingsCommand; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import net.minecraftforge.binarypatcher.ConsoleTool; import net.minecraftforge.gradle.mcp.util.MCPRuntime; import net.minecraftforge.gradle.mcp.util.MCPWrapper; -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.enigma.EnigmaWriter; import org.cadixdev.lorenz.io.srg.tsrg.TSrgReader; import org.gradle.api.GradleException; import org.gradle.api.Project; @@ -54,11 +55,13 @@ import org.gradle.api.logging.Logger; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.DependencyProvider; import net.fabricmc.loom.util.DownloadUtil; -import net.fabricmc.loom.util.IoConsumer; import net.fabricmc.loom.util.ManifestVersion; import net.fabricmc.loom.util.MinecraftVersionInfo; import net.fabricmc.loom.util.StaticPathWatcher; -import net.fabricmc.stitch.merge.JarMerger; +import net.fabricmc.stitch.util.Pair; +import net.fabricmc.tinyremapper.OutputConsumerPath; +import net.fabricmc.tinyremapper.TinyRemapper; +import net.fabricmc.tinyremapper.TinyUtils; public class MinecraftProvider extends DependencyProvider { private String minecraftVersion; @@ -125,7 +128,7 @@ public class MinecraftProvider extends DependencyProvider { patchJars(getProject().getLogger()); } - createPatchedJars(getProject().getLogger()); + remapPatchedJars(getProject().getLogger()); } if (!minecraftMergedJar.exists() || isRefreshDeps()) { @@ -246,30 +249,40 @@ public class MinecraftProvider extends DependencyProvider { } } - private void createPatchedJars(Logger logger) throws IOException { - logger.lifecycle(":remapping minecraft (Atlas, srg -> official)"); + private void remapPatchedJars(Logger logger) throws IOException, MappingParseException { + logger.lifecycle(":remapping minecraft (TinyRemapper, srg -> official)"); - useAtlas(MappingSet::reverse, atlas -> { - atlas.run(minecraftClientPatchedSrgJar.toPath(), minecraftClientPatchedJar.toPath()); - atlas.run(minecraftServerPatchedSrgJar.toPath(), minecraftServerPatchedJar.toPath()); - }); - } + Path enigmaTemp = java.nio.file.Files.createTempFile(null, ".enigma"); + Path tinyTemp = java.nio.file.Files.createTempFile(null, ".tiny"); - private void useAtlas(UnaryOperator mappingOp, IoConsumer action) throws IOException { - try (Reader mappingReader = new FileReader(getExtension().getMcpConfigProvider().getSrg()); - TSrgReader reader = new TSrgReader(mappingReader); - Atlas atlas = new Atlas()) { - MappingSet mappings = mappingOp.apply(reader.read()); + try (TSrgReader reader = new TSrgReader(new FileReader(getExtension().getMcpConfigProvider().getSrg()))) { + MappingSet mappings = reader.read().reverse(); - atlas.install(ctx -> new JarEntryRemappingTransformer( - new LorenzRemapper(mappings, ctx.inheritanceProvider()) - )); - - for (File library : getLibraryProvider().getLibraries()) { - atlas.use(library.toPath()); + try (EnigmaWriter writer = new EnigmaWriter(new FileWriter(enigmaTemp.toFile()))) { + writer.write(mappings); } + } - action.accept(atlas); + new ConvertMappingsCommand().run("enigma_file", enigmaTemp.toString(), "tinyv2:srg:official", tinyTemp.toString()); + + TinyRemapper remapper = TinyRemapper.newRemapper() + .withMappings(TinyUtils.createTinyMappingProvider(tinyTemp, "srg", "official")) + .build(); + + List> jars = new ArrayList<>(); + jars.add(Pair.of(minecraftClientPatchedSrgJar.toPath(), minecraftClientPatchedJar.toPath())); + jars.add(Pair.of(minecraftServerPatchedSrgJar.toPath(), minecraftServerPatchedJar.toPath())); + + try { + for (Pair io : jars) { + try (OutputConsumerPath consumer = new OutputConsumerPath.Builder(io.getRight()).build()) { + consumer.addNonClassFiles(io.getLeft()); + remapper.readInputs(io.getLeft()); + remapper.apply(consumer); + } + } + } finally { + remapper.finish(); } }