From dc682842add94070d14faae2262d564bc2f15003 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Mon, 15 May 2023 20:14:09 -0500 Subject: [PATCH] modrinth: add quilt mod loader support --- .../InstallModrinthModpackCommand.java | 19 +++++++++++-------- .../itzg/helpers/modrinth/ModpackLoader.java | 3 ++- .../helpers/quilt/InstallQuiltCommand.java | 2 +- .../me/itzg/helpers/quilt/QuiltInstaller.java | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/itzg/helpers/modrinth/InstallModrinthModpackCommand.java b/src/main/java/me/itzg/helpers/modrinth/InstallModrinthModpackCommand.java index 5c0d0a4e..f6969a4e 100644 --- a/src/main/java/me/itzg/helpers/modrinth/InstallModrinthModpackCommand.java +++ b/src/main/java/me/itzg/helpers/modrinth/InstallModrinthModpackCommand.java @@ -19,6 +19,7 @@ import me.itzg.helpers.modrinth.model.Version; import me.itzg.helpers.modrinth.model.VersionFile; import me.itzg.helpers.modrinth.model.VersionType; +import me.itzg.helpers.quilt.QuiltInstaller; import picocli.CommandLine; import picocli.CommandLine.ExitCode; import picocli.CommandLine.Option; @@ -216,12 +217,6 @@ private Mono processModpackZip(ModrinthApiClient apiCli new InvalidParameterException("Requested modpack is not for minecraft: " + modpackIndex.getGame())); } - // Fail-fast for Quilt non-support - if (modpackIndex.getDependencies().get(DependencyId.quiltLoader) != null) { - throw new GenericException( - "Quilt mod loader is not yet supported. Please choose alternate file that uses Fabric, if possible"); - } - return processModpackFiles(apiClient, modpackIndex) .collectList() .map(modFiles -> @@ -290,8 +285,16 @@ private String applyModloader(Map dependencies) throws IOE return minecraftVersion; } - if (dependencies.get(DependencyId.quiltLoader) != null) { - throw new GenericException("Quilt modloader is not yet supported"); + final String quiltVersion = dependencies.get(DependencyId.quiltLoader); + if (quiltVersion != null) { + new QuiltInstaller(QuiltInstaller.DEFAULT_REPO_URL, + sharedFetchArgs.options(), + outputDirectory, + minecraftVersion + ) + .setResultsFile(resultsFile) + .setLoaderVersion(quiltVersion) + .install(); } return minecraftVersion; diff --git a/src/main/java/me/itzg/helpers/modrinth/ModpackLoader.java b/src/main/java/me/itzg/helpers/modrinth/ModpackLoader.java index 94c8ec25..43f8cdaf 100644 --- a/src/main/java/me/itzg/helpers/modrinth/ModpackLoader.java +++ b/src/main/java/me/itzg/helpers/modrinth/ModpackLoader.java @@ -5,7 +5,8 @@ */ public enum ModpackLoader { fabric, - forge; + forge, + quilt; public Loader asLoader() { return Loader.valueOf(this.name()); diff --git a/src/main/java/me/itzg/helpers/quilt/InstallQuiltCommand.java b/src/main/java/me/itzg/helpers/quilt/InstallQuiltCommand.java index 1c513ebf..893eb9aa 100644 --- a/src/main/java/me/itzg/helpers/quilt/InstallQuiltCommand.java +++ b/src/main/java/me/itzg/helpers/quilt/InstallQuiltCommand.java @@ -15,7 +15,7 @@ public class InstallQuiltCommand implements Callable { @ArgGroup(exclusive = false) SharedFetchArgs sharedFetchArgs = new SharedFetchArgs(); - @Option(names = "--repo-url", defaultValue = "https://maven.quiltmc.org/repository/release", + @Option(names = "--repo-url", defaultValue = QuiltInstaller.DEFAULT_REPO_URL, description = "Default: ${DEFAULT-VALUE}" ) String repoUrl; diff --git a/src/main/java/me/itzg/helpers/quilt/QuiltInstaller.java b/src/main/java/me/itzg/helpers/quilt/QuiltInstaller.java index 1c6e37f3..9ce70aff 100644 --- a/src/main/java/me/itzg/helpers/quilt/QuiltInstaller.java +++ b/src/main/java/me/itzg/helpers/quilt/QuiltInstaller.java @@ -26,6 +26,7 @@ public class QuiltInstaller { public static final String LOADER_ARTIFACT_ID = "quilt-loader"; public static final String INSTALLER_ARTIFACT = "quilt-installer"; public static final String QUILT_GROUP_ID = "org.quiltmc"; + public static final String DEFAULT_REPO_URL = "https://maven.quiltmc.org/repository/release"; private final MavenRepoApi mavenRepoApi; private final Path outputDir; @@ -143,7 +144,6 @@ private QuiltManifest runInstaller(Path installerPath, String resolvedLoaderVers if (resultsFile != null) { try (ResultsFileWriter resultsFileWriter = new ResultsFileWriter(resultsFile, false)) { - resultsFileWriter.write("VERSION", minecraftVersion); resultsFileWriter.write("SERVER", resolvedLauncher.toString()); resultsFileWriter.write("FAMILY", "FABRIC"); } catch (IOException e) {