From 214ff9de94622682f77d646b45f13f54f5639597 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sun, 2 Feb 2020 23:32:01 +0800 Subject: [PATCH] add: MCBBS download provider --- .../hmcl/setting/DownloadProviders.java | 22 +++++----- .../hmcl/ui/download/VersionsPage.java | 8 ++-- .../resources/assets/lang/I18N.properties | 2 + .../resources/assets/lang/I18N_es.properties | 1 + .../resources/assets/lang/I18N_ru.properties | 3 +- .../resources/assets/lang/I18N_zh.properties | 2 + .../assets/lang/I18N_zh_CN.properties | 2 + .../download/BMCLAPIDownloadProvider.java | 43 +++++++++++++------ .../download/DefaultDependencyManager.java | 2 +- .../hmcl/download/MojangDownloadProvider.java | 21 +++++++-- .../jackhuang/hmcl/download/VersionList.java | 16 +++---- .../download/fabric/FabricVersionList.java | 3 +- .../download/forge/ForgeBMCLVersionList.java | 30 +++++++------ .../hmcl/download/forge/ForgeVersionList.java | 8 ++-- .../hmcl/download/game/GameVersionList.java | 8 ++-- .../game/VersionJsonDownloadTask.java | 4 +- .../liteloader/LiteLoaderBMCLVersionList.java | 12 +++--- .../liteloader/LiteLoaderVersionList.java | 7 +-- .../optifine/OptiFineBMCLVersionList.java | 22 ++++++---- 19 files changed, 130 insertions(+), 86 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java index 18adce018..4be437a90 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java @@ -17,27 +17,27 @@ */ package org.jackhuang.hmcl.setting; -import static org.jackhuang.hmcl.setting.ConfigHolder.config; -import static org.jackhuang.hmcl.util.Lang.mapOf; -import static org.jackhuang.hmcl.util.Pair.pair; - -import java.util.Map; -import java.util.Optional; - +import javafx.beans.binding.Bindings; +import javafx.beans.binding.ObjectBinding; +import javafx.beans.value.ObservableObjectValue; import org.jackhuang.hmcl.download.BMCLAPIDownloadProvider; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.MojangDownloadProvider; -import javafx.beans.binding.Bindings; -import javafx.beans.binding.ObjectBinding; -import javafx.beans.value.ObservableObjectValue; +import java.util.Map; +import java.util.Optional; + +import static org.jackhuang.hmcl.setting.ConfigHolder.config; +import static org.jackhuang.hmcl.util.Lang.mapOf; +import static org.jackhuang.hmcl.util.Pair.pair; public final class DownloadProviders { private DownloadProviders() {} public static final Map providersById = mapOf( pair("mojang", new MojangDownloadProvider()), - pair("bmclapi", new BMCLAPIDownloadProvider())); + pair("bmclapi", new BMCLAPIDownloadProvider("https://bmclapi2.bangbang93.com")), + pair("mcbbs", new BMCLAPIDownloadProvider("https://download.mcbbs.net"))); public static final String DEFAULT_PROVIDER_ID = "bmclapi"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java index 6d5f64560..075bae4bb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java @@ -17,8 +17,6 @@ */ package org.jackhuang.hmcl.ui.download; -import static org.jackhuang.hmcl.util.Logging.LOG; - import com.jfoenix.controls.JFXCheckBox; import com.jfoenix.controls.JFXListView; import com.jfoenix.controls.JFXSpinner; @@ -44,9 +42,10 @@ import java.util.Map; import java.util.logging.Level; import java.util.stream.Collectors; +import static org.jackhuang.hmcl.util.Logging.LOG; + public final class VersionsPage extends BorderPane implements WizardPage, Refreshable { private final String gameVersion; - private final DownloadProvider downloadProvider; private final String libraryId; private final String title; private final WizardController controller; @@ -79,7 +78,6 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres public VersionsPage(WizardController controller, String title, String gameVersion, DownloadProvider downloadProvider, String libraryId, Runnable callback) { this.title = title; this.gameVersion = gameVersion; - this.downloadProvider = downloadProvider; this.libraryId = libraryId; this.controller = controller; this.versionList = downloadProvider.getVersionListById(libraryId); @@ -128,7 +126,7 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres @Override public void refresh() { transitionHandler.setContent(spinner, ContainerAnimations.FADE.getAnimationProducer()); - executor = versionList.refreshAsync(gameVersion, downloadProvider).whenComplete(exception -> { + executor = versionList.refreshAsync(gameVersion).whenComplete(exception -> { if (exception == null) { List items = loadVersions(); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index a36d584fd..2074dc089 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -71,6 +71,7 @@ archive.version=Version assets.download=Downloading assets assets.download_all=Asset Integrity Check +assets.index.malformed=Asset index malformed, you can retry by "Update Game Asset Files" in version settings. button.cancel=Cancel button.clear=Clear @@ -95,6 +96,7 @@ download.code.404=File not found on the remote server download.failed=Failed to download download.failed.empty=No candidates. Click here to return. download.failed.refresh=Unable to download version list. Click here to retry. +download.provider.mcbbs=MCBBS (https://www.mcbbs.net/) download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/) download.provider.mojang=Mojang (Forge and OptiFine installation are downloaded from BMCLAPI) diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 64bd5d9ca..fcc50a6d2 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -95,6 +95,7 @@ download.code.404=Archivo no encontrado en servidor remoto download.failed=Falló en descargar download.failed.empty=No hay candidatos. Clic aquí para regresar. download.failed.refresh=No se pudo cargar lista de versiones. Clic aquí para reintentar. +download.provider.mcbbs=MCBBS (https://www.mcbbs.net/) download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/) download.provider.mojang=Mojang (instalaciones de Forge y OptiFine siendo descargadas por BMCLAPI) diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 252b3a152..a23dff43b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -95,7 +95,8 @@ download.code.404=Файл не найден на удаленном серве download.failed=Не удалось загрузить download.failed.empty=Нет вариантов. Нажмите здесь, чтобы вернуться. download.failed.refresh=Невозможно загрузить список версий. Нажмите здесь, чтобы повторить попытку. -download.provider.bmclapi=BMCLAPI (Резервный) +download.provider.mcbbs=MCBBS (https://www.mcbbs.net/) +download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/) download.provider.mojang=Mojang (Официальный) extension.bat=Windows Bat файл diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 10dc21739..19bbb3169 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -70,6 +70,7 @@ archive.version=版本 assets.download=下載資源 assets.download_all=驗證資源檔案完整性 +assets.index.malformed=資源文件索引資料損壞,您可以在遊戲設定頁面右上角的設定按鈕中選擇更新遊戲資源檔案以修復該問題 button.cancel=取消 button.clear=清除 @@ -94,6 +95,7 @@ download.code.404=遠程伺服器不包含需要下載的文件 download.failed=下載失敗 download.failed.empty=沒有可供安裝的版本,點擊此處返回。 download.failed.refresh=載入版本列表失敗,點擊此處重試。 +download.provider.mcbbs=我的世界中文論壇 (MCBBS, https://www.mcbbs.net/) download.provider.bmclapi=BMCLAPI(bangbang93,https://bmclapi2.bangbang93.com/) download.provider.mojang=官方伺服器(Forge 和 OptiFine 自動安裝的下載來源是 BMCLAPI) diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index b5e13a969..63dd4a4c0 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -70,6 +70,7 @@ archive.version=版本 assets.download=下载资源 assets.download_all=检查资源文件完整性 +assets.index.malformed=资源文件索引文件损坏,您可以在游戏设置页面右上角的设置按钮中选择更新游戏资源文件以修复该问题 button.cancel=取消 button.clear=清除 @@ -94,6 +95,7 @@ download.code.404=远程服务器不包含需要下载的文件 download.failed=下载失败 download.failed.empty=没有可供安装的版本,点击此处返回。 download.failed.refresh=加载版本列表失败,点击此处重试。 +download.provider.mcbbs=我的世界中文论坛 (MCBBS, https://www.mcbbs.net/) download.provider.bmclapi=BMCLAPI(bangbang93,https://bmclapi2.bangbang93.com/) download.provider.mojang=官方(Forge 和 OptiFine 自动安装使用 BMCLAPI 下载源) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/BMCLAPIDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/BMCLAPIDownloadProvider.java index 64e154a2b..00130f80b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/BMCLAPIDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/BMCLAPIDownloadProvider.java @@ -28,30 +28,47 @@ import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList; * @author huang */ public class BMCLAPIDownloadProvider implements DownloadProvider { + private final String apiRoot; + private final GameVersionList game; + private final ForgeBMCLVersionList forge; + private final LiteLoaderBMCLVersionList liteLoader; + private final OptiFineBMCLVersionList optifine; + + public BMCLAPIDownloadProvider(String apiRoot) { + this.apiRoot = apiRoot; + this.game = new GameVersionList(this); + this.forge = new ForgeBMCLVersionList(apiRoot); + this.liteLoader = new LiteLoaderBMCLVersionList(this); + this.optifine = new OptiFineBMCLVersionList(apiRoot); + } + + public String getApiRoot() { + return apiRoot; + } @Override public String getVersionListURL() { - return "https://bmclapi2.bangbang93.com/mc/game/version_manifest.json"; + return apiRoot + "/mc/game/version_manifest.json"; } @Override public String getAssetBaseURL() { - return "https://bmclapi2.bangbang93.com/assets/"; + return apiRoot + "/assets/"; } @Override public VersionList getVersionListById(String id) { switch (id) { case "game": - return GameVersionList.INSTANCE; + return game; case "fabric": return FabricVersionList.INSTANCE; case "forge": - return ForgeBMCLVersionList.INSTANCE; + return forge; case "liteloader": - return LiteLoaderBMCLVersionList.INSTANCE; + return liteLoader; case "optifine": - return OptiFineBMCLVersionList.INSTANCE; + return optifine; default: throw new IllegalArgumentException("Unrecognized version list id: " + id); } @@ -60,13 +77,13 @@ public class BMCLAPIDownloadProvider implements DownloadProvider { @Override public String injectURL(String baseURL) { return baseURL - .replace("https://launchermeta.mojang.com", "https://bmclapi2.bangbang93.com") - .replace("https://launcher.mojang.com", "https://bmclapi2.bangbang93.com") - .replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/libraries") - .replaceFirst("https?://files\\.minecraftforge\\.net/maven", "https://bmclapi2.bangbang93.com/maven") - .replace("http://dl.liteloader.com/versions/versions.json", "https://bmclapi2.bangbang93.com/maven/com/mumfrey/liteloader/versions.json") - .replace("http://dl.liteloader.com/versions", "https://bmclapi2.bangbang93.com/maven") - .replace("https://authlib-injector.yushi.moe", "https://bmclapi2.bangbang93.com/mirrors/authlib-injector"); + .replace("https://launchermeta.mojang.com", apiRoot) + .replace("https://launcher.mojang.com", apiRoot) + .replace("https://libraries.minecraft.net", apiRoot + "/libraries") + .replaceFirst("https?://files\\.minecraftforge\\.net/maven", apiRoot + "/maven") + .replace("http://dl.liteloader.com/versions/versions.json", apiRoot + "/maven/com/mumfrey/liteloader/versions.json") + .replace("http://dl.liteloader.com/versions", apiRoot + "/maven") + .replace("https://authlib-injector.yushi.moe", apiRoot + "/mirrors/authlib-injector"); } } 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 13371cffe..49ec919b1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java @@ -92,7 +92,7 @@ public class DefaultDependencyManager extends AbstractDependencyManager { if (baseVersion.isResolved()) throw new IllegalArgumentException("Version should not be resolved"); VersionList versionList = getVersionList(libraryId); - return versionList.loadAsync(gameVersion, getDownloadProvider()) + return versionList.loadAsync(gameVersion) .thenComposeAsync(() -> installLibraryAsync(baseVersion, versionList.getVersion(gameVersion, libraryVersion) .orElseThrow(() -> new IOException("Remote library " + libraryId + " has no version " + libraryVersion)))); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java index 497faddd5..3e0873edf 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java @@ -28,6 +28,19 @@ import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList; * @author huangyuhui */ public class MojangDownloadProvider implements DownloadProvider { + private final GameVersionList game; + private final ForgeBMCLVersionList forge; + private final LiteLoaderVersionList liteLoader; + private final OptiFineBMCLVersionList optifine; + + public MojangDownloadProvider() { + String apiRoot = "https://bmclapi2.bangbang93.com"; + + this.game = new GameVersionList(this); + this.forge = new ForgeBMCLVersionList(apiRoot); + this.liteLoader = new LiteLoaderVersionList(this); + this.optifine = new OptiFineBMCLVersionList(apiRoot); + } @Override public String getVersionListURL() { @@ -43,15 +56,15 @@ public class MojangDownloadProvider implements DownloadProvider { public VersionList getVersionListById(String id) { switch (id) { case "game": - return GameVersionList.INSTANCE; + return game; case "fabric": return FabricVersionList.INSTANCE; case "forge": - return ForgeBMCLVersionList.INSTANCE; + return forge; case "liteloader": - return LiteLoaderVersionList.INSTANCE; + return liteLoader; case "optifine": - return OptiFineBMCLVersionList.INSTANCE; + return optifine; default: throw new IllegalArgumentException("Unrecognized version list id: " + id); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/VersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/VersionList.java index 0b860ffad..4f2378566 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/VersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/VersionList.java @@ -59,21 +59,19 @@ public abstract class VersionList { protected final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); /** - * @param downloadProvider DownloadProvider * @return the task to reload the remote version list. */ - public abstract Task refreshAsync(DownloadProvider downloadProvider); + public abstract Task refreshAsync(); /** * @param gameVersion the remote version depends on - * @param downloadProvider DownloadProvider * @return the task to reload the remote version list. */ - public Task refreshAsync(String gameVersion, DownloadProvider downloadProvider) { - return refreshAsync(downloadProvider); + public Task refreshAsync(String gameVersion) { + return refreshAsync(); } - public Task loadAsync(DownloadProvider downloadProvider) { + public Task loadAsync() { return Task.composeAsync(() -> { lock.readLock().lock(); boolean loaded; @@ -83,11 +81,11 @@ public abstract class VersionList { } finally { lock.readLock().unlock(); } - return loaded ? null : refreshAsync(downloadProvider); + return loaded ? null : refreshAsync(); }); } - public Task loadAsync(String gameVersion, DownloadProvider downloadProvider) { + public Task loadAsync(String gameVersion) { return Task.composeAsync(() -> { lock.readLock().lock(); boolean loaded; @@ -97,7 +95,7 @@ public abstract class VersionList { } finally { lock.readLock().unlock(); } - return loaded ? null : refreshAsync(gameVersion, downloadProvider); + return loaded ? null : refreshAsync(gameVersion); }); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricVersionList.java index 8ee613da3..c50a5a21e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricVersionList.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.download.fabric; import com.google.gson.reflect.TypeToken; -import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.gson.JsonUtils; @@ -47,7 +46,7 @@ public final class FabricVersionList extends VersionList { } @Override - public Task refreshAsync(DownloadProvider downloadProvider) { + public Task refreshAsync() { return new Task() { @Override public void execute() throws IOException, XMLStreamException { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java index 9005f038a..4969a1f15 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java @@ -19,7 +19,6 @@ package org.jackhuang.hmcl.download.forge; import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; -import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; @@ -31,16 +30,23 @@ import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import static org.jackhuang.hmcl.util.Lang.mapOf; import static org.jackhuang.hmcl.util.Pair.pair; public final class ForgeBMCLVersionList extends VersionList { + private final String apiRoot; - public static final ForgeBMCLVersionList INSTANCE = new ForgeBMCLVersionList(); - - private ForgeBMCLVersionList() { + /** + * @param apiRoot API Root of BMCLAPI implementations + */ + public ForgeBMCLVersionList(String apiRoot) { + this.apiRoot = apiRoot; } @Override @@ -49,18 +55,18 @@ public final class ForgeBMCLVersionList extends VersionList } @Override - public Task loadAsync(DownloadProvider downloadProvider) { + public Task loadAsync() { throw new UnsupportedOperationException("ForgeBMCLVersionList does not support loading the entire Forge remote version list."); } @Override - public Task refreshAsync(DownloadProvider downloadProvider) { + public Task refreshAsync() { throw new UnsupportedOperationException("ForgeBMCLVersionList does not support loading the entire Forge remote version list."); } @Override - public Task refreshAsync(String gameVersion, DownloadProvider downloadProvider) { - final GetTask task = new GetTask(NetworkUtils.toURL("https://bmclapi2.bangbang93.com/forge/minecraft/" + gameVersion)); + public Task refreshAsync(String gameVersion) { + final GetTask task = new GetTask(NetworkUtils.toURL(apiRoot + "/forge/minecraft/" + gameVersion)); return new Task() { @Override public Collection> getDependents() { @@ -86,15 +92,15 @@ public final class ForgeBMCLVersionList extends VersionList + (StringUtils.isNotBlank(version.getBranch()) ? "-" + version.getBranch() : ""); String fileName1 = "forge-" + classifier + "-" + file.getCategory() + "." + file.getFormat(); String fileName2 = "forge-" + classifier + "-" + gameVersion + "-" + file.getCategory() + "." + file.getFormat(); - urls.add(NetworkUtils.withQuery("https://bmclapi2.bangbang93.com/forge/download", mapOf( + urls.add(NetworkUtils.withQuery(apiRoot + "/forge/download", mapOf( pair("mcversion", version.getGameVersion()), pair("version", version.getVersion()), pair("branch", version.getBranch()), pair("category", file.getCategory()), pair("format", file.getFormat()) ))); - urls.add("https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/" + classifier + "/" + fileName1); - urls.add("https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/" + classifier + "-" + gameVersion + "/" + fileName2); + urls.add(apiRoot + "/maven/net/minecraftforge/forge/" + classifier + "/" + fileName1); + urls.add(apiRoot + "/maven/net/minecraftforge/forge/" + classifier + "-" + gameVersion + "/" + fileName2); } if (urls.isEmpty()) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index ebd02bfe7..63f198f99 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -33,10 +33,10 @@ import java.util.*; * @author huangyuhui */ public final class ForgeVersionList extends VersionList { + private final DownloadProvider downloadProvider; - public static final ForgeVersionList INSTANCE = new ForgeVersionList(); - - private ForgeVersionList() { + public ForgeVersionList(DownloadProvider downloadProvider) { + this.downloadProvider = downloadProvider; } @Override @@ -45,7 +45,7 @@ public final class ForgeVersionList extends VersionList { } @Override - public Task refreshAsync(DownloadProvider downloadProvider) { + public Task refreshAsync() { final GetTask task = new GetTask(NetworkUtils.toURL(downloadProvider.injectURL(FORGE_LIST))); return new Task() { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java index 6f1202b93..db7265696 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java @@ -32,10 +32,10 @@ import java.util.Collections; * @author huangyuhui */ public final class GameVersionList extends VersionList { + private final DownloadProvider downloadProvider; - public static final GameVersionList INSTANCE = new GameVersionList(); - - private GameVersionList() { + public GameVersionList(DownloadProvider downloadProvider) { + this.downloadProvider = downloadProvider; } @Override @@ -54,7 +54,7 @@ public final class GameVersionList extends VersionList { } @Override - public Task refreshAsync(DownloadProvider downloadProvider) { + public Task refreshAsync() { GetTask task = new GetTask(NetworkUtils.toURL(downloadProvider.getVersionListURL())); return new Task() { @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java index cd4d424c2..37e952158 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java @@ -25,12 +25,10 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; -import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.nio.charset.StandardCharsets.UTF_8; @@ -51,7 +49,7 @@ public final class VersionJsonDownloadTask extends Task { this.gameVersionList = dependencyManager.getVersionList("game"); if (!gameVersionList.isLoaded()) - dependents.add(gameVersionList.refreshAsync(dependencyManager.getDownloadProvider())); + dependents.add(gameVersionList.refreshAsync()); setSignificance(TaskSignificance.MODERATE); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java index 86d3f5f63..8dcef6f20 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.download.liteloader; -import org.jackhuang.hmcl.download.DownloadProvider; +import org.jackhuang.hmcl.download.BMCLAPIDownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; @@ -39,10 +39,10 @@ import java.util.Map; * @author huangyuhui */ public final class LiteLoaderBMCLVersionList extends VersionList { + private final BMCLAPIDownloadProvider downloadProvider; - public static final LiteLoaderBMCLVersionList INSTANCE = new LiteLoaderBMCLVersionList(); - - private LiteLoaderBMCLVersionList() { + public LiteLoaderBMCLVersionList(BMCLAPIDownloadProvider downloadProvider) { + this.downloadProvider = downloadProvider; } @Override @@ -51,7 +51,7 @@ public final class LiteLoaderBMCLVersionList extends VersionList refreshAsync(DownloadProvider downloadProvider) { + public Task refreshAsync() { GetTask task = new GetTask(NetworkUtils.toURL(downloadProvider.injectURL(LITELOADER_LIST))); return new Task() { @Override @@ -91,7 +91,7 @@ public final class LiteLoaderBMCLVersionList extends VersionList { - public static final LiteLoaderVersionList INSTANCE = new LiteLoaderVersionList(); + private final DownloadProvider downloadProvider; - private LiteLoaderVersionList() { + public LiteLoaderVersionList(DownloadProvider downloadProvider) { + this.downloadProvider = downloadProvider; } @Override @@ -51,7 +52,7 @@ public final class LiteLoaderVersionList extends VersionList refreshAsync(DownloadProvider downloadProvider) { + public Task refreshAsync() { GetTask task = new GetTask(NetworkUtils.toURL(downloadProvider.injectURL(LITELOADER_LIST))); return new Task() { @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java index 16e145af9..08e6f1712 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.download.optifine; import com.google.gson.reflect.TypeToken; -import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; @@ -27,17 +26,24 @@ import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * * @author huangyuhui */ public final class OptiFineBMCLVersionList extends VersionList { + private final String apiRoot; - public static final OptiFineBMCLVersionList INSTANCE = new OptiFineBMCLVersionList(); - - private OptiFineBMCLVersionList() { + /** + * @param apiRoot API Root of BMCLAPI implementations + */ + public OptiFineBMCLVersionList(String apiRoot) { + this.apiRoot = apiRoot; } @Override @@ -46,8 +52,8 @@ public final class OptiFineBMCLVersionList extends VersionList refreshAsync(DownloadProvider downloadProvider) { - GetTask task = new GetTask(NetworkUtils.toURL("http://bmclapi2.bangbang93.com/optifine/versionlist")); + public Task refreshAsync() { + GetTask task = new GetTask(NetworkUtils.toURL(apiRoot + "/optifine/versionlist")); return new Task() { @Override public Collection> getDependents() { @@ -65,7 +71,7 @@ public final class OptiFineBMCLVersionList extends VersionList