From e2dfa8a410e77831f78141a1e1f68933ff951e2d Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:10:59 +0200 Subject: [PATCH] Mod metadata fixes --- .../loom/metadata/ModMetadataFile.java | 13 ------------ .../loom/metadata/ModMetadataFiles.java | 21 +++++++++++++++++++ .../accesswidener/AccessWidenerFile.java | 3 ++- .../loom/util/fmj/FabricModJsonFactory.java | 4 ++-- ...est.groovy => ModMetadataFilesTest.groovy} | 16 +++++++------- 5 files changed, 33 insertions(+), 24 deletions(-) rename src/test/groovy/net/fabricmc/loom/test/unit/architectury/{ModMetadataFileTest.groovy => ModMetadataFilesTest.groovy} (84%) diff --git a/src/main/java/dev/architectury/loom/metadata/ModMetadataFile.java b/src/main/java/dev/architectury/loom/metadata/ModMetadataFile.java index f4d25d05..344202d2 100644 --- a/src/main/java/dev/architectury/loom/metadata/ModMetadataFile.java +++ b/src/main/java/dev/architectury/loom/metadata/ModMetadataFile.java @@ -1,7 +1,5 @@ package dev.architectury.loom.metadata; -import java.io.IOException; -import java.nio.file.Path; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -37,15 +35,4 @@ public interface ModMetadataFile { * {@return a list of the mixin configs declared in this mod metadata file}. */ List getMixinConfigs(); - - /** - * Reads the mod metadata file from a jar. - * - * @param jar the path to the jar file - * @return the mod metadata file, or {@code null} if not found - */ - @Deprecated // TODO 1.1 MERGE - static @Nullable ModMetadataFile fromJar(Path jar) throws IOException { - return ModMetadataFiles.fromJar(jar); - } } diff --git a/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java b/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java index 95d7b35a..48756dc8 100644 --- a/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java +++ b/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java @@ -14,12 +14,21 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.loom.util.ZipUtils; import net.fabricmc.loom.util.gradle.SourceSetHelper; +/** + * Utilities for reading mod metadata files. + */ public final class ModMetadataFiles { private static final Map> SINGLE_FILE_METADATA_TYPES = ImmutableMap.>builder() .put(ArchitecturyCommonJson.FILE_NAME, ArchitecturyCommonJson::of) .put(QuiltModJson.FILE_NAME, QuiltModJson::of) .build(); + /** + * Reads the mod metadata file from a jar. + * + * @param jar the path to the jar file + * @return the mod metadata file, or {@code null} if not found + */ public static @Nullable ModMetadataFile fromJar(Path jar) throws IOException { for (final String filePath : SINGLE_FILE_METADATA_TYPES.keySet()) { final byte @Nullable [] bytes = ZipUtils.unpackNullable(jar, filePath); @@ -32,6 +41,12 @@ public final class ModMetadataFiles { return null; } + /** + * Reads the mod metadata file from a directory. + * + * @param directory the path to the directory + * @return the mod metadata file, or {@code null} if not found + */ public static @Nullable ModMetadataFile fromDirectory(Path directory) throws IOException { for (final String filePath : SINGLE_FILE_METADATA_TYPES.keySet()) { final Path metadataPath = directory.resolve(filePath); @@ -44,6 +59,12 @@ public final class ModMetadataFiles { return null; } + /** + * Reads the first mod metadata file from source sets. + * + * @param sourceSets the source sets to read from + * @return the mod metadata file, or {@code null} if not found + */ public static @Nullable ModMetadataFile fromSourceSets(SourceSet... sourceSets) throws IOException { for (final String filePath : SINGLE_FILE_METADATA_TYPES.keySet()) { final @Nullable File file = SourceSetHelper.findFirstFileInResource(filePath, sourceSets); diff --git a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java index 0b786949..ecbd0bb1 100644 --- a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java +++ b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java @@ -34,6 +34,7 @@ import java.util.Objects; import com.google.gson.Gson; import com.google.gson.JsonObject; import dev.architectury.loom.metadata.ModMetadataFile; +import dev.architectury.loom.metadata.ModMetadataFiles; import net.fabricmc.loom.util.ZipUtils; @@ -59,7 +60,7 @@ public record AccessWidenerFile( String awPath; try { - modMetadata = ModMetadataFile.fromJar(modJarPath); + modMetadata = ModMetadataFiles.fromJar(modJarPath); if (modMetadata != null) { awPath = modMetadata.getAccessWidener(); diff --git a/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java b/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java index a426f1eb..322d2299 100644 --- a/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java +++ b/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java @@ -73,7 +73,7 @@ public final class FabricModJsonFactory { public static FabricModJson createFromZip(Path zipPath) { try { - @Nullable ModMetadataFile modMetadata = ModMetadataFile.fromJar(zipPath); + @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromJar(zipPath); if (modMetadata != null) { return new ModMetadataFabricModJson(modMetadata, new FabricModJsonSource.ZipSource(zipPath)); @@ -92,7 +92,7 @@ public final class FabricModJsonFactory { @Nullable public static FabricModJson createFromZipNullable(Path zipPath) { try { - final @Nullable ModMetadataFile modMetadata = ModMetadataFile.fromJar(zipPath); + final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromJar(zipPath); if (modMetadata != null) { return new ModMetadataFabricModJson(modMetadata, new FabricModJsonSource.ZipSource(zipPath)); diff --git a/src/test/groovy/net/fabricmc/loom/test/unit/architectury/ModMetadataFileTest.groovy b/src/test/groovy/net/fabricmc/loom/test/unit/architectury/ModMetadataFilesTest.groovy similarity index 84% rename from src/test/groovy/net/fabricmc/loom/test/unit/architectury/ModMetadataFileTest.groovy rename to src/test/groovy/net/fabricmc/loom/test/unit/architectury/ModMetadataFilesTest.groovy index 69b202f0..e73180f6 100644 --- a/src/test/groovy/net/fabricmc/loom/test/unit/architectury/ModMetadataFileTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/unit/architectury/ModMetadataFilesTest.groovy @@ -25,7 +25,7 @@ package net.fabricmc.loom.test.unit.architectury import dev.architectury.loom.metadata.ArchitecturyCommonJson -import dev.architectury.loom.metadata.ModMetadataFile +import dev.architectury.loom.metadata.ModMetadataFiles import dev.architectury.loom.metadata.QuiltModJson import net.fabricmc.loom.util.ZipUtils import spock.lang.Specification @@ -33,42 +33,42 @@ import spock.lang.TempDir import java.nio.file.Path -class ModMetadataFileTest extends Specification { +class ModMetadataFilesTest extends Specification { @TempDir Path zipContents @TempDir Path workingDir - def "read nothing"() { + def "read nothing from jar"() { given: def jar = workingDir.resolve("my_mod.jar") zipContents.resolve('foo.txt').text = 'hello' ZipUtils.pack(zipContents, jar) when: - def modMetadata = ModMetadataFile.fromJar(jar) + def modMetadata = ModMetadataFiles.fromJar(jar) then: modMetadata == null } - def "read quilt.mod.json"() { + def "read quilt.mod.json from jar"() { given: def jar = workingDir.resolve("my_mod.jar") zipContents.resolve('quilt.mod.json').text = '{}' ZipUtils.pack(zipContents, jar) when: - def modMetadata = ModMetadataFile.fromJar(jar) + def modMetadata = ModMetadataFiles.fromJar(jar) then: modMetadata instanceof QuiltModJson } - def "read architectury.common.json"() { + def "read architectury.common.json from jar"() { given: def jar = workingDir.resolve("my_mod.jar") zipContents.resolve('architectury.common.json').text = '{}' ZipUtils.pack(zipContents, jar) when: - def modMetadata = ModMetadataFile.fromJar(jar) + def modMetadata = ModMetadataFiles.fromJar(jar) then: modMetadata instanceof ArchitecturyCommonJson }