Fix curse mod downloading

This commit is contained in:
huangyuhui 2018-06-10 20:05:36 +08:00
parent 630f164877
commit eb565285b2
5 changed files with 18 additions and 8 deletions

View File

@ -27,6 +27,7 @@ import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.download.MaintainTask; import org.jackhuang.hmcl.download.MaintainTask;
import org.jackhuang.hmcl.launch.*; import org.jackhuang.hmcl.launch.*;
import org.jackhuang.hmcl.mod.CurseCompletionTask; import org.jackhuang.hmcl.mod.CurseCompletionTask;
import org.jackhuang.hmcl.mod.ModpackConfiguration;
import org.jackhuang.hmcl.setting.LauncherVisibility; import org.jackhuang.hmcl.setting.LauncherVisibility;
import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.setting.Settings; 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) { private void launch0(Profile profile, Account account, String selectedVersion, File scriptFile) {
GameRepository repository = profile.getRepository(); HMCLGameRepository repository = profile.getRepository();
DefaultDependencyManager dependencyManager = profile.getDependency(); DefaultDependencyManager dependencyManager = profile.getDependency();
Version version = MaintainTask.maintain(repository.getResolvedVersion(selectedVersion)); Version version = MaintainTask.maintain(repository.getResolvedVersion(selectedVersion));
VersionSetting setting = profile.getVersionSetting(selectedVersion); VersionSetting setting = profile.getVersionSetting(selectedVersion);
@ -90,7 +91,13 @@ public final class LauncherHelper {
return dependencyManager.checkGameCompletionAsync(version); return dependencyManager.checkGameCompletionAsync(version);
}) })
.then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.MODS))) .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(Schedulers.javafx(), () -> emitStatus(LoadingState.LOGGING_IN)))
.then(Task.of(Launcher.i18n("account.methods"), variables -> { .then(Task.of(Launcher.i18n("account.methods"), variables -> {
try { try {

View File

@ -59,12 +59,12 @@ public final class ModpackHelper {
throw new UnsupportedModpackException(file.toString()); throw new UnsupportedModpackException(file.toString());
} }
public static <T> ModpackConfiguration<T> readModpackConfiguration(File file) throws IOException { public static ModpackConfiguration<?> readModpackConfiguration(File file) throws IOException {
if (!file.exists()) if (!file.exists())
throw new FileNotFoundException(file.getPath()); throw new FileNotFoundException(file.getPath());
else else
try { try {
return Constants.GSON.fromJson(FileUtils.readText(file), new TypeToken<ModpackConfiguration<T>>() { return Constants.GSON.fromJson(FileUtils.readText(file), new TypeToken<ModpackConfiguration<?>>() {
}.getType()); }.getType());
} catch (JsonParseException e) { } catch (JsonParseException e) {
throw new IOException("Malformed modpack configuration"); throw new IOException("Malformed modpack configuration");

View File

@ -69,7 +69,7 @@ public final class DownloadWizardProvider implements WizardProvider {
return null; return null;
File selected = tryCast(settings.get(ModpackPage.MODPACK_FILE), File.class).orElse(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); String name = tryCast(settings.get(ModpackPage.MODPACK_NAME), String.class).orElse(null);
if (selected == null || modpack == null || name == null) return null; if (selected == null || modpack == null || name == null) return null;

View File

@ -90,7 +90,7 @@ public final class ModpackPage extends StackPane implements WizardPage {
try { try {
manifest = ModpackHelper.readModpackManifest(selectedFile); manifest = ModpackHelper.readModpackManifest(selectedFile);
controller.getSettings().put(MODPACK_CURSEFORGE_MANIFEST, manifest); controller.getSettings().put(MODPACK_MANIFEST, manifest);
lblName.setText(manifest.getName()); lblName.setText(manifest.getName());
lblVersion.setText(manifest.getVersion()); lblVersion.setText(manifest.getVersion());
lblAuthor.setText(manifest.getAuthor()); 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_FILE = "MODPACK_FILE";
public static final String MODPACK_NAME = "MODPACK_NAME"; 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";
} }

View File

@ -113,7 +113,10 @@ public final class CurseInstallTask extends Task {
throw new IOException("Unable to delete mod file " + oldFile); 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))); dependencies.add(new MinecraftInstanceTask<>(zipFile, manifest.getOverrides(), manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)));
} }