From 47d257004de4eddef1dff0fdd64542e31db1550a Mon Sep 17 00:00:00 2001 From: SavePointSam Date: Thu, 13 Nov 2025 20:53:59 -0800 Subject: [PATCH 1/2] feat: allow custom modloader versions for auto curseforge --- .../curseforge/CurseForgeInstaller.java | 33 ++++++++++++++++++- .../curseforge/InstallCurseForgeCommand.java | 20 ++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java b/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java index 2c4a53bb..9e48cb14 100644 --- a/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java +++ b/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java @@ -142,6 +142,15 @@ public class CurseForgeInstaller { @Getter @Setter Duration fileDownloadRetryMinDelay = Duration.ofSeconds(5); + @Getter @Setter + private String customFabricLoaderVersion; + + @Getter @Setter + private String customForgeVersion; + + @Getter @Setter + private String customNeoForgeVersion; + /** */ public void installFromModpackZip(Path modpackZip, String slug) { @@ -972,7 +981,29 @@ private void prepareModLoader(String id, String minecraftVersion) { } final String provider = parts[0]; - final String loaderVersion = parts.length == 2 ? parts[1] : parts[2]; + String loaderVersion = parts.length == 2 ? parts[1] : parts[2]; + + // Override with custom versions if provided + switch (provider) { + case "fabric": + if (customFabricLoaderVersion != null) { + log.info("Overriding Fabric loader version from {} to {}", loaderVersion, customFabricLoaderVersion); + loaderVersion = customFabricLoaderVersion; + } + break; + case "forge": + if (customForgeVersion != null) { + log.info("Overriding Forge version from {} to {}", loaderVersion, customForgeVersion); + loaderVersion = customForgeVersion; + } + break; + case "neoforge": + if (customNeoForgeVersion != null) { + log.info("Overriding NeoForge version from {} to {}", loaderVersion, customNeoForgeVersion); + loaderVersion = customNeoForgeVersion; + } + break; + } try (SharedFetch sharedFetch = Fetch.sharedFetch("install-curseforge", sharedFetchOptions)) { diff --git a/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java b/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java index e469e6fd..0c3c309e 100644 --- a/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java +++ b/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java @@ -89,6 +89,21 @@ public class InstallCurseForgeCommand implements Callable { ) String apiKey; + @Option(names = "--fabric-loader-version", paramLabel = "VERSION", + description = "Override the Fabric Loader version specified in the modpack" + ) + String fabricLoaderVersion; + + @Option(names = "--forge-version", paramLabel = "VERSION", + description = "Override the Forge version specified in the modpack" + ) + String forgeVersion; + + @Option(names = "--neoforge-version", paramLabel = "VERSION", + description = "Override the NeoForge version specified in the modpack" + ) + String neoforgeVersion; + @ArgGroup(exclusive = false) ExcludeIncludeArgs excludeIncludeArgs = new ExcludeIncludeArgs(); @@ -233,7 +248,10 @@ public Integer call() throws Exception { .setForgeUrlArgs(forgeUrlArgs) .setMaxConcurrentDownloads(maxConcurrentDownloads) .setFileDownloadRetries(fileDownloadRetries) - .setFileDownloadRetryMinDelay(fileDownloadRetryMinDelay); + .setFileDownloadRetryMinDelay(fileDownloadRetryMinDelay) + .setCustomFabricLoaderVersion(fabricLoaderVersion) + .setCustomForgeVersion(forgeVersion) + .setCustomNeoForgeVersion(neoforgeVersion); if (apiBaseUrl != null) { installer.setApiBaseUrl(apiBaseUrl); From 76b883f0d173b85131daa6fd9dc27093a7f3de76 Mon Sep 17 00:00:00 2001 From: SavePointSam Date: Fri, 14 Nov 2025 12:20:23 -0800 Subject: [PATCH 2/2] feat: replace specific custom mod loader versions with common one --- .../curseforge/CurseForgeInstaller.java | 30 +++---------------- .../curseforge/InstallCurseForgeCommand.java | 20 +++---------- 2 files changed, 8 insertions(+), 42 deletions(-) diff --git a/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java b/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java index 9e48cb14..74d9fa0b 100644 --- a/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java +++ b/src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java @@ -143,13 +143,7 @@ public class CurseForgeInstaller { Duration fileDownloadRetryMinDelay = Duration.ofSeconds(5); @Getter @Setter - private String customFabricLoaderVersion; - - @Getter @Setter - private String customForgeVersion; - - @Getter @Setter - private String customNeoForgeVersion; + private String customModLoaderVersion; /** */ @@ -984,25 +978,9 @@ private void prepareModLoader(String id, String minecraftVersion) { String loaderVersion = parts.length == 2 ? parts[1] : parts[2]; // Override with custom versions if provided - switch (provider) { - case "fabric": - if (customFabricLoaderVersion != null) { - log.info("Overriding Fabric loader version from {} to {}", loaderVersion, customFabricLoaderVersion); - loaderVersion = customFabricLoaderVersion; - } - break; - case "forge": - if (customForgeVersion != null) { - log.info("Overriding Forge version from {} to {}", loaderVersion, customForgeVersion); - loaderVersion = customForgeVersion; - } - break; - case "neoforge": - if (customNeoForgeVersion != null) { - log.info("Overriding NeoForge version from {} to {}", loaderVersion, customNeoForgeVersion); - loaderVersion = customNeoForgeVersion; - } - break; + if (customModLoaderVersion != null) { + log.info("Overriding mod loader version from {} to {}", loaderVersion, customModLoaderVersion); + loaderVersion = customModLoaderVersion; } try (SharedFetch sharedFetch = Fetch.sharedFetch("install-curseforge", sharedFetchOptions)) { diff --git a/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java b/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java index 0c3c309e..52b3e55e 100644 --- a/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java +++ b/src/main/java/me/itzg/helpers/curseforge/InstallCurseForgeCommand.java @@ -89,20 +89,10 @@ public class InstallCurseForgeCommand implements Callable { ) String apiKey; - @Option(names = "--fabric-loader-version", paramLabel = "VERSION", - description = "Override the Fabric Loader version specified in the modpack" + @Option(names = "--mod-loader-version", paramLabel = "VERSION", + description = "Override the mod loader version specified in the modpack" ) - String fabricLoaderVersion; - - @Option(names = "--forge-version", paramLabel = "VERSION", - description = "Override the Forge version specified in the modpack" - ) - String forgeVersion; - - @Option(names = "--neoforge-version", paramLabel = "VERSION", - description = "Override the NeoForge version specified in the modpack" - ) - String neoforgeVersion; + String modLoaderVersion; @ArgGroup(exclusive = false) ExcludeIncludeArgs excludeIncludeArgs = new ExcludeIncludeArgs(); @@ -249,9 +239,7 @@ public Integer call() throws Exception { .setMaxConcurrentDownloads(maxConcurrentDownloads) .setFileDownloadRetries(fileDownloadRetries) .setFileDownloadRetryMinDelay(fileDownloadRetryMinDelay) - .setCustomFabricLoaderVersion(fabricLoaderVersion) - .setCustomForgeVersion(forgeVersion) - .setCustomNeoForgeVersion(neoforgeVersion); + .setCustomModLoaderVersion(modLoaderVersion); if (apiBaseUrl != null) { installer.setApiBaseUrl(apiBaseUrl);