From 55a7169e21e603c7a5d6765118f59334ccec3499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=AE=87?= <63290381+xiaoyv404@users.noreply.github.com> Date: Sun, 7 Sep 2025 15:53:47 +0800 Subject: [PATCH] Fix MultiMC modpack update not applying configuration overrides (#4382) --- .../jackhuang/hmcl/game/ModpackHelper.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java index 491502744..7d189d253 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java @@ -236,7 +236,11 @@ public final class ModpackHelper { if (provider == null) { throw new UnsupportedModpackException(); } - return provider.createUpdateTask(profile.getDependency(), name, zipFile, modpack); + if (modpack.getManifest() instanceof MultiMCInstanceConfiguration) + return provider.createUpdateTask(profile.getDependency(), name, zipFile, modpack) + .thenComposeAsync(() -> createMultiMCPostUpdateTask(profile, (MultiMCInstanceConfiguration) modpack.getManifest(), name)); + else + return provider.createUpdateTask(profile.getDependency(), name, zipFile, modpack); } public static void toVersionSetting(MultiMCInstanceConfiguration c, VersionSetting vs) { @@ -276,6 +280,24 @@ public final class ModpackHelper { } } + private static void applyCommandAndJvmSettings(MultiMCInstanceConfiguration c, VersionSetting vs) { + if (c.isOverrideCommands()) { + vs.setWrapper(Lang.nonNull(c.getWrapperCommand(), "")); + vs.setPreLaunchCommand(Lang.nonNull(c.getPreLaunchCommand(), "")); + } + + if (c.isOverrideJavaArgs()) { + vs.setJavaArgs(Lang.nonNull(c.getJvmArgs(), "")); + } + } + + private static Task createMultiMCPostUpdateTask(Profile profile, MultiMCInstanceConfiguration manifest, String version) { + return Task.runAsync(Schedulers.javafx(), () -> { + VersionSetting vs = Objects.requireNonNull(profile.getRepository().specializeVersionSetting(version)); + ModpackHelper.applyCommandAndJvmSettings(manifest, vs); + }); + } + private static Task createMultiMCPostInstallTask(Profile profile, MultiMCInstanceConfiguration manifest, String version) { return Task.runAsync(Schedulers.javafx(), () -> { VersionSetting vs = Objects.requireNonNull(profile.getRepository().specializeVersionSetting(version));