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));