From b1301dcdec5285a859c93b36591792a15e16b9b7 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sun, 9 Feb 2020 00:55:51 +0800 Subject: [PATCH] add: BMCLAPI support for fabric download --- .../hmcl/download/BMCLAPIDownloadProvider.java | 6 +++++- .../hmcl/download/MojangDownloadProvider.java | 4 +++- .../hmcl/download/fabric/FabricVersionList.java | 11 ++++++----- 3 files changed, 14 insertions(+), 7 deletions(-) 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 00130f80b..aa336e1d0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/BMCLAPIDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/BMCLAPIDownloadProvider.java @@ -30,6 +30,7 @@ import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList; public class BMCLAPIDownloadProvider implements DownloadProvider { private final String apiRoot; private final GameVersionList game; + private final FabricVersionList fabric; private final ForgeBMCLVersionList forge; private final LiteLoaderBMCLVersionList liteLoader; private final OptiFineBMCLVersionList optifine; @@ -37,6 +38,7 @@ public class BMCLAPIDownloadProvider implements DownloadProvider { public BMCLAPIDownloadProvider(String apiRoot) { this.apiRoot = apiRoot; this.game = new GameVersionList(this); + this.fabric = new FabricVersionList(this); this.forge = new ForgeBMCLVersionList(apiRoot); this.liteLoader = new LiteLoaderBMCLVersionList(this); this.optifine = new OptiFineBMCLVersionList(apiRoot); @@ -62,7 +64,7 @@ public class BMCLAPIDownloadProvider implements DownloadProvider { case "game": return game; case "fabric": - return FabricVersionList.INSTANCE; + return fabric; case "forge": return forge; case "liteloader": @@ -83,6 +85,8 @@ public class BMCLAPIDownloadProvider implements DownloadProvider { .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://meta.fabricmc.net/v2/versions/game", apiRoot + "/fabric-meta/v2/versions") + .replace("https://maven.fabricmc.net", apiRoot + "/maven") .replace("https://authlib-injector.yushi.moe", apiRoot + "/mirrors/authlib-injector"); } 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 21e71c42f..94c25190b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java @@ -29,6 +29,7 @@ import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList; */ public class MojangDownloadProvider implements DownloadProvider { private final GameVersionList game; + private final FabricVersionList fabric; private final ForgeBMCLVersionList forge; private final LiteLoaderVersionList liteLoader; private final OptiFineBMCLVersionList optifine; @@ -37,6 +38,7 @@ public class MojangDownloadProvider implements DownloadProvider { String apiRoot = "https://bmclapi2.bangbang93.com"; this.game = new GameVersionList(this); + this.fabric = new FabricVersionList(this); this.forge = new ForgeBMCLVersionList(apiRoot); this.liteLoader = new LiteLoaderVersionList(this); this.optifine = new OptiFineBMCLVersionList(apiRoot); @@ -58,7 +60,7 @@ public class MojangDownloadProvider implements DownloadProvider { case "game": return game; case "fabric": - return FabricVersionList.INSTANCE; + return fabric; case "forge": return forge; case "liteloader": 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 c50a5a21e..32fb0b4ca 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,6 +18,7 @@ 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; @@ -34,10 +35,10 @@ import java.util.List; import java.util.stream.Collectors; public final class FabricVersionList extends VersionList { + private final DownloadProvider downloadProvider; - public static final FabricVersionList INSTANCE = new FabricVersionList(); - - private FabricVersionList() { + public FabricVersionList(DownloadProvider downloadProvider) { + this.downloadProvider = downloadProvider; } @Override @@ -73,7 +74,7 @@ public final class FabricVersionList extends VersionList { private List getVersions(String mavenServerURL, String packageName, String jarName) throws IOException, XMLStreamException { List versions = new ArrayList<>(); - URL url = new URL(mavenServerURL + packageName + "/" + jarName + "/maven-metadata.xml"); + URL url = new URL(downloadProvider.injectURL(mavenServerURL + packageName + "/" + jarName + "/maven-metadata.xml")); XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(url.openStream()); while(reader.hasNext()) { @@ -89,7 +90,7 @@ public final class FabricVersionList extends VersionList { } private List getGameVersions(String metaUrl) throws IOException { - String json = NetworkUtils.doGet(NetworkUtils.toURL(metaUrl)); + String json = NetworkUtils.doGet(NetworkUtils.toURL(downloadProvider.injectURL(metaUrl))); return JsonUtils.GSON.>fromJson(json, new TypeToken>() { }.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList()); }