From c889d7cb3f8293ab62a4a5ea030b5517c1b9db76 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Mon, 11 Feb 2019 19:36:19 +0800 Subject: [PATCH] Download missing game jar when launching --- .../hmcl/download/DefaultDependencyManager.java | 11 +++++++---- .../hmcl/download/game/GameDownloadTask.java | 12 ++++++++---- .../src/main/java/org/jackhuang/hmcl/task/Task.java | 4 ---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java index a955527ca..7be09a437 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java @@ -19,10 +19,7 @@ package org.jackhuang.hmcl.download; import org.jackhuang.hmcl.download.forge.ForgeInstallTask; import org.jackhuang.hmcl.download.forge.ForgeRemoteVersion; -import org.jackhuang.hmcl.download.game.GameAssetDownloadTask; -import org.jackhuang.hmcl.download.game.GameLibrariesTask; -import org.jackhuang.hmcl.download.game.LibrariesUniqueTask; -import org.jackhuang.hmcl.download.game.VersionJsonSaveTask; +import org.jackhuang.hmcl.download.game.*; import org.jackhuang.hmcl.download.liteloader.LiteLoaderInstallTask; import org.jackhuang.hmcl.download.liteloader.LiteLoaderRemoteVersion; import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask; @@ -74,6 +71,12 @@ public class DefaultDependencyManager extends AbstractDependencyManager { @Override public Task checkGameCompletionAsync(Version version) { return new ParallelTask( + Task.ofThen(var -> { + if (!repository.getVersionJar(version).exists()) + return new GameDownloadTask(this, null, version); + else + return null; + }), new GameAssetDownloadTask(this, version, GameAssetDownloadTask.DOWNLOAD_INDEX_IF_NECESSARY), new GameLibrariesTask(this, version) ); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java index d463bbb53..f0d4288f1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java @@ -55,14 +55,18 @@ public final class GameDownloadTask extends Task { @Override public void execute() { File jar = dependencyManager.getGameRepository().getVersionJar(version); - - dependencies.add(new FileDownloadTask( + + FileDownloadTask task = new FileDownloadTask( NetworkUtils.toURL(dependencyManager.getDownloadProvider().injectURL(version.getDownloadInfo().getUrl())), jar, IntegrityCheck.of(CacheRepository.SHA1, version.getDownloadInfo().getSha1())) .setCaching(true) - .setCacheRepository(dependencyManager.getCacheRepository()) - .setCandidate(dependencyManager.getCacheRepository().getCommonDirectory().resolve("jars").resolve(gameVersion + ".jar"))); + .setCacheRepository(dependencyManager.getCacheRepository()); + + if (gameVersion != null) + task.setCandidate(dependencyManager.getCacheRepository().getCommonDirectory().resolve("jars").resolve(gameVersion + ".jar")); + + dependencies.add(task); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java index 3ea2d7062..3938dac5e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java @@ -339,10 +339,6 @@ public abstract class Task { }); } - public static Task empty() { - return of(ExceptionalConsumer.empty()); - } - public static Task of(String name, ExceptionalRunnable runnable) { return of(name, ExceptionalConsumer.fromRunnable(runnable)); }