From 29822d09116670ba41d3c0e3e54e95aedf703519 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 6 Jun 2021 23:49:16 +0800 Subject: [PATCH] Use a better structure for the mappings folder Signed-off-by: shedaniel --- build.gradle | 2 +- .../forge/FieldMigratedMappingsProvider.java | 2 +- .../providers/mappings/MappingsProvider.java | 56 +++++++++++++++---- .../mappings/MojangMappingsDependency.java | 14 +++-- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index fa862d82..a40b271c 100644 --- a/build.gradle +++ b/build.gradle @@ -91,7 +91,7 @@ dependencies { // tinyfile management implementation ('dev.architectury:tiny-remapper:1.1.0') - implementation ('dev.architectury:mappings-layers-core:1.1.6') + implementation ('dev.architectury:mappings-layers-core:1.2.7') implementation ('net.fabricmc:tiny-mappings-parser:0.3.0+build.17') implementation 'net.fabricmc:access-widener:1.0.0' diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/FieldMigratedMappingsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/FieldMigratedMappingsProvider.java index 4895e879..27f6fb6b 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/FieldMigratedMappingsProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/FieldMigratedMappingsProvider.java @@ -105,7 +105,7 @@ public class FieldMigratedMappingsProvider extends MappingsProvider { @Override public void manipulateMappings(Path mappingsJar) throws IOException { LoomGradleExtension extension = getExtension(); - Path mappingsFolder = mappingsDir.resolve(extension.getMinecraftProvider().getMinecraftVersion() + "/forge-" + extension.getPatchProvider().forgeVersion); + Path mappingsFolder = getMappedVersionedDir(removeSuffix).resolve("forge/" + extension.getPatchProvider().forgeVersion); this.rawTinyMappings = tinyMappings.toPath(); this.rawTinyMappingsWithSrg = tinyMappingsWithSrg; String mappingsJarName = mappingsJar.getFileName().toString(); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java index 0d929d79..7e5fe745 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProvider.java @@ -86,8 +86,10 @@ public class MappingsProvider extends DependencyProvider { public String mappingsName; public String minecraftVersion; public String mappingsVersion; + public String removeSuffix; protected final Path mappingsDir; + protected Path mappingsVersionedDir; private final Path mappingsStepsDir; private Path intermediaryTiny; private boolean hasRefreshed = false; @@ -111,6 +113,28 @@ public class MappingsProvider extends DependencyProvider { mappingsStepsDir = mappingsDir.resolve("steps"); } + public Path getMappingsVersionedDir() throws IOException { + if (mappingsVersionedDir == null) { + mappingsVersionedDir = mappingsDir.resolve(getExtension().getMinecraftProvider().getMinecraftVersion()); + + if (!Files.exists(mappingsVersionedDir)) { + Files.createDirectories(mappingsVersionedDir); + } + } + + return mappingsVersionedDir; + } + + public Path getMappedVersionedDir(String name) throws IOException { + Path dir = getMappingsVersionedDir().resolve(name); + + if (!Files.exists(dir)) { + Files.createDirectories(dir); + } + + return dir; + } + public void clean() throws IOException { FileUtils.deleteDirectory(mappingsDir.toFile()); } @@ -159,11 +183,12 @@ public class MappingsProvider extends DependencyProvider { } // We can save reading the zip file + header by checking the file name - isV2 = mappingsJar.getName().endsWith("-v2.jar"); + isV2 = mappingsJar.getName().endsWith("-v2.jar") || mappingsJar.getName().endsWith("-mergedv2.jar"); } else { isV2 = doesJarContainV2Mappings(mappingsJar.toPath()); } + removeSuffix = StringUtils.removeSuffix(mappingsJar.getName(), ".jar"); this.mappingsVersion = version + (isV2 ? "-v2" : ""); initFiles(); @@ -182,13 +207,13 @@ public class MappingsProvider extends DependencyProvider { jarClassifier = jarClassifier + depStringSplit[3]; } - String removeSuffix = StringUtils.removeSuffix(mappingsJar.getName(), ".jar"); - tinyMappings = mappingsDir.resolve(removeSuffix + ".tiny").toFile(); - unpickDefinitionsFile = mappingsDir.resolve(removeSuffix + ".unpick").toFile(); + Path mappedVersionedDir = getMappedVersionedDir(removeSuffix); + tinyMappings = mappedVersionedDir.resolve("mappings.tiny").toFile(); + unpickDefinitionsFile = mappedVersionedDir.resolve("definitions.unpick").toFile(); tinyMappingsJar = new File(getExtension().getUserCache(), removeSuffix + "-" + jarClassifier + ".jar"); - tinyMappingsWithSrg = mappingsDir.resolve(removeSuffix + "-srg.tiny"); - mixinTinyMappingsWithSrg = mappingsDir.resolve(removeSuffix + "-mixin-srg.tiny").toFile(); - srgToNamedSrg = mappingsDir.resolve(removeSuffix + "-srg-named.srg").toFile(); + tinyMappingsWithSrg = mappedVersionedDir.resolve("mappings-srg.tiny"); + mixinTinyMappingsWithSrg = mappedVersionedDir.resolve("mappings-mixin-srg.tiny").toFile(); + srgToNamedSrg = mappedVersionedDir.resolve("mappings-srg-named.srg").toFile(); if (!tinyMappings.exists() || isRefreshDeps()) { storeMappings(getProject(), minecraftProvider, mappingsJar.toPath(), postPopulationScheduler); @@ -463,8 +488,12 @@ public class MappingsProvider extends DependencyProvider { } } - private void initFiles() { - baseTinyMappings = mappingsDir.resolve(mappingsName + "-tiny-" + minecraftVersion + "-" + mappingsVersion + "-base"); + private void initFiles() throws IOException { + baseTinyMappings = getMappedVersionedDir(removeSuffix).resolve("mappings-base.tiny"); + + if (Files.exists(mappingsStepsDir)) { + Files.walkFileTree(mappingsStepsDir, new DeletingFileVisitor()); + } } public void cleanFiles() { @@ -505,13 +534,18 @@ public class MappingsProvider extends DependencyProvider { intermediaryTiny = mappingsDir.resolve(String.format("intermediary-%s-v2.tiny", minecraftVersion)); - if (!Files.exists(intermediaryTiny) || (isRefreshDeps() && !hasRefreshed)) { + if (isRefreshDeps() && !hasRefreshed) { + Files.deleteIfExists(intermediaryTiny); + } + + if (!Files.exists(intermediaryTiny)) { hasRefreshed = true; + intermediaryTiny = getMappingsVersionedDir().resolve("intermediary-v2.tiny"); // Download and extract intermediary String encodedMinecraftVersion = UrlEscapers.urlFragmentEscaper().escape(minecraftVersion); String intermediaryArtifactUrl = getExtension().getIntermediaryUrl().apply(encodedMinecraftVersion); - Path intermediaryJar = mappingsDir.resolve("v2-intermediary-" + minecraftVersion + ".jar"); + Path intermediaryJar = getMappingsVersionedDir().resolve("intermediary-v2.jar"); DownloadUtil.downloadIfChanged(new URL(intermediaryArtifactUrl), intermediaryJar.toFile(), getProject().getLogger()); extractIntermediary(intermediaryJar, intermediaryTiny); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java index 6e45d2b9..1d17dc1a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MojangMappingsDependency.java @@ -28,6 +28,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.StringWriter; +import java.io.UncheckedIOException; import java.io.Writer; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -126,10 +127,15 @@ public class MojangMappingsDependency extends AbstractModuleDependency implement @Override public Set resolve() { - Path mappingsDir = extension.getMappingsProvider().getMappingsDir(); - Path mappingsFile = mappingsDir.resolve(String.format("%s.%s-%s.tiny", GROUP, MODULE, getVersion())); - Path clientMappings = mappingsDir.resolve(String.format("%s.%s-%s-client.map", GROUP, MODULE, getVersion())); - Path serverMappings = mappingsDir.resolve(String.format("%s.%s-%s-server.map", GROUP, MODULE, getVersion())); + Path mappingsDir; + try { + mappingsDir = extension.getMappingsProvider().getMappedVersionedDir(String.format("mojang/%s.%s-%s", GROUP, MODULE, getVersion())); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + Path mappingsFile = mappingsDir.resolve("mappings.tiny"); + Path clientMappings = mappingsDir.resolve("client.map"); + Path serverMappings = mappingsDir.resolve("server.map"); if (!Files.exists(mappingsFile) || LoomGradlePlugin.refreshDeps) { MappingSet mappingSet;