From eb565285b2f34c50b01fb5c785b9e771b958b9fb Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Sun, 10 Jun 2018 20:05:36 +0800 Subject: [PATCH] Fix curse mod downloading --- .../java/org/jackhuang/hmcl/game/LauncherHelper.java | 11 +++++++++-- .../java/org/jackhuang/hmcl/game/ModpackHelper.java | 4 ++-- .../hmcl/ui/download/DownloadWizardProvider.java | 2 +- .../org/jackhuang/hmcl/ui/download/ModpackPage.java | 4 ++-- .../java/org/jackhuang/hmcl/mod/CurseInstallTask.java | 5 ++++- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 7fff98200..5d4cfe437 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -27,6 +27,7 @@ import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.MaintainTask; import org.jackhuang.hmcl.launch.*; import org.jackhuang.hmcl.mod.CurseCompletionTask; +import org.jackhuang.hmcl.mod.ModpackConfiguration; import org.jackhuang.hmcl.setting.LauncherVisibility; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Settings; @@ -76,7 +77,7 @@ public final class LauncherHelper { } private void launch0(Profile profile, Account account, String selectedVersion, File scriptFile) { - GameRepository repository = profile.getRepository(); + HMCLGameRepository repository = profile.getRepository(); DefaultDependencyManager dependencyManager = profile.getDependency(); Version version = MaintainTask.maintain(repository.getResolvedVersion(selectedVersion)); VersionSetting setting = profile.getVersionSetting(selectedVersion); @@ -90,7 +91,13 @@ public final class LauncherHelper { return dependencyManager.checkGameCompletionAsync(version); }) .then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.MODS))) - .then(new CurseCompletionTask(dependencyManager, selectedVersion)) + .then(var -> { + ModpackConfiguration configuration = ModpackHelper.readModpackConfiguration(repository.getModpackConfiguration(selectedVersion)); + if ("Curse".equals(configuration.getType())) + return new CurseCompletionTask(dependencyManager, selectedVersion); + else + return null; + }) .then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.LOGGING_IN))) .then(Task.of(Launcher.i18n("account.methods"), variables -> { try { 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 6c66d5dd9..12fc3778f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java @@ -59,12 +59,12 @@ public final class ModpackHelper { throw new UnsupportedModpackException(file.toString()); } - public static ModpackConfiguration readModpackConfiguration(File file) throws IOException { + public static ModpackConfiguration readModpackConfiguration(File file) throws IOException { if (!file.exists()) throw new FileNotFoundException(file.getPath()); else try { - return Constants.GSON.fromJson(FileUtils.readText(file), new TypeToken>() { + return Constants.GSON.fromJson(FileUtils.readText(file), new TypeToken>() { }.getType()); } catch (JsonParseException e) { throw new IOException("Malformed modpack configuration"); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java index 530f032a7..49d540a74 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java @@ -69,7 +69,7 @@ public final class DownloadWizardProvider implements WizardProvider { return null; File selected = tryCast(settings.get(ModpackPage.MODPACK_FILE), File.class).orElse(null); - Modpack modpack = tryCast(settings.get(ModpackPage.MODPACK_CURSEFORGE_MANIFEST), Modpack.class).orElse(null); + Modpack modpack = tryCast(settings.get(ModpackPage.MODPACK_MANIFEST), Modpack.class).orElse(null); String name = tryCast(settings.get(ModpackPage.MODPACK_NAME), String.class).orElse(null); if (selected == null || modpack == null || name == null) return null; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java index 28853e893..ac39bbca1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java @@ -90,7 +90,7 @@ public final class ModpackPage extends StackPane implements WizardPage { try { manifest = ModpackHelper.readModpackManifest(selectedFile); - controller.getSettings().put(MODPACK_CURSEFORGE_MANIFEST, manifest); + controller.getSettings().put(MODPACK_MANIFEST, manifest); lblName.setText(manifest.getName()); lblVersion.setText(manifest.getVersion()); lblAuthor.setText(manifest.getAuthor()); @@ -130,5 +130,5 @@ public final class ModpackPage extends StackPane implements WizardPage { public static final String MODPACK_FILE = "MODPACK_FILE"; public static final String MODPACK_NAME = "MODPACK_NAME"; - public static final String MODPACK_CURSEFORGE_MANIFEST = "CURSEFORGE_MANIFEST"; + public static final String MODPACK_MANIFEST = "MODPACK_MANIFEST"; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java index 8e2be29af..c4116d2ad 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java @@ -113,7 +113,10 @@ public final class CurseInstallTask extends Task { throw new IOException("Unable to delete mod file " + oldFile); } - dependencies.add(new CurseCompletionTask(dependencyManager, name)); + File root = repository.getVersionRoot(name); + FileUtils.writeText(new File(root, "manifest.json"), Constants.GSON.toJson(manifest)); + + dependencies.add(new CurseCompletionTask(dependencyManager, name, manifest)); dependencies.add(new MinecraftInstanceTask<>(zipFile, manifest.getOverrides(), manifest, MODPACK_TYPE, repository.getModpackConfiguration(name))); }