From 85c01cde0076298efdb48835e46a3536da23acdf Mon Sep 17 00:00:00 2001 From: yuhuihuang Date: Sun, 19 Jul 2020 15:30:47 +0800 Subject: [PATCH] fix: #747 --- .../org/jackhuang/hmcl/game/ModpackHelper.java | 14 ++++++++++++++ .../ui/download/ModpackInstallWizardProvider.java | 6 +++++- 2 files changed, 19 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 59817058d..119b5a8cf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java @@ -157,6 +157,15 @@ public final class ModpackHelper { else throw new IllegalArgumentException("Unrecognized modpack: " + modpack.getManifest()); } + public static Task getUpdateTask(Profile profile, ServerModpackManifest manifest, Charset charset, String name, ModpackConfiguration configuration) throws UnsupportedModpackException { + switch (configuration.getType()) { + case ServerModpackRemoteInstallTask.MODPACK_TYPE: + return new ModpackUpdateTask(profile.getRepository(), name, new ServerModpackRemoteInstallTask(profile.getDependency(), manifest, name)); + default: + throw new UnsupportedModpackException(); + } + } + public static Task getUpdateTask(Profile profile, File zipFile, Charset charset, String name, ModpackConfiguration configuration) throws UnsupportedModpackException, MismatchedModpackTypeException { Modpack modpack = ModpackHelper.readModpackManifest(zipFile.toPath(), charset); @@ -176,6 +185,11 @@ public final class ModpackHelper { throw new MismatchedModpackTypeException(HMCLModpackInstallTask.MODPACK_TYPE, getManifestType(modpack.getManifest())); return new ModpackUpdateTask(profile.getRepository(), name, new HMCLModpackInstallTask(profile, zipFile, modpack, name)); + case ServerModpackLocalInstallTask.MODPACK_TYPE: + if (!(modpack.getManifest() instanceof ServerModpackManifest)) + throw new MismatchedModpackTypeException(ServerModpackLocalInstallTask.MODPACK_TYPE, getManifestType(modpack.getManifest())); + + return new ModpackUpdateTask(profile.getRepository(), name, new ServerModpackLocalInstallTask(profile.getDependency(), zipFile, modpack, (ServerModpackManifest) modpack.getManifest(), name)); default: throw new UnsupportedModpackException(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java index fdee06d60..503ffdba9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java @@ -85,7 +85,11 @@ public class ModpackInstallWizardProvider implements WizardProvider { return null; } try { - return ModpackHelper.getUpdateTask(profile, selected, modpack.getEncoding(), name, ModpackHelper.readModpackConfiguration(profile.getRepository().getModpackConfiguration(name))); + if (serverModpackManifest != null) { + return ModpackHelper.getUpdateTask(profile, serverModpackManifest, modpack.getEncoding(), name, ModpackHelper.readModpackConfiguration(profile.getRepository().getModpackConfiguration(name))); + } else { + return ModpackHelper.getUpdateTask(profile, selected, modpack.getEncoding(), name, ModpackHelper.readModpackConfiguration(profile.getRepository().getModpackConfiguration(name))); + } } catch (UnsupportedModpackException e) { Controllers.dialog(i18n("modpack.unsupported"), i18n("message.error"), MessageType.ERROR); } catch (MismatchedModpackTypeException e) {