diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java index 0dc9afc05..5b779dbfb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java @@ -24,6 +24,7 @@ import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.*; import org.jackhuang.hmcl.download.DefaultDependencyManager; +import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.event.EventBus; import org.jackhuang.hmcl.event.EventPriority; import org.jackhuang.hmcl.event.RefreshedVersionsEvent; @@ -162,7 +163,11 @@ public final class Profile implements Observable { } public DefaultDependencyManager getDependency() { - return new DefaultDependencyManager(repository, DownloadProviders.getDownloadProvider(), DownloadProviders.getPreferredDownloadProviders(), HMCLCacheRepository.REPOSITORY); + return getDependency(DownloadProviders.getDownloadProvider()); + } + + public DefaultDependencyManager getDependency(DownloadProvider downloadProvider) { + return new DefaultDependencyManager(repository, downloadProvider, HMCLCacheRepository.REPOSITORY); } public VersionSetting getVersionSetting(String id) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricRemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricRemoteVersion.java index 95aa54661..9438d56f6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricRemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricRemoteVersion.java @@ -23,16 +23,18 @@ import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; +import java.util.List; + public class FabricRemoteVersion extends RemoteVersion { /** * Constructor. * * @param gameVersion the Minecraft version that this remote version suits. * @param selfVersion the version string of the remote version. - * @param url the installer or universal jar URL. + * @param urls the installer or universal jar original URL. */ - FabricRemoteVersion(String gameVersion, String selfVersion, String url) { - super(LibraryAnalyzer.LibraryType.FABRIC.getPatchId(), gameVersion, selfVersion, url); + FabricRemoteVersion(String gameVersion, String selfVersion, List urls) { + super(LibraryAnalyzer.LibraryType.FABRIC.getPatchId(), gameVersion, selfVersion, urls); } @Override 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 e411f213f..b9a86cf21 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 @@ -28,6 +28,7 @@ import org.jetbrains.annotations.Nullable; import javax.xml.stream.XMLStreamException; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -56,7 +57,8 @@ public final class FabricVersionList extends VersionList { try { for (String gameVersion : gameVersions) for (String loaderVersion : loaderVersions) - versions.put(gameVersion, new FabricRemoteVersion(gameVersion, loaderVersion, "")); + versions.put(gameVersion, new FabricRemoteVersion(gameVersion, loaderVersion, + Collections.singletonList(getLaunchMetaUrl(gameVersion, loaderVersion)))); } finally { lock.writeLock().unlock(); } @@ -73,6 +75,10 @@ public final class FabricVersionList extends VersionList { }.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList()); } + private static String getLaunchMetaUrl(String gameVersion, String loaderVersion) { + return String.format("https://meta.fabricmc.net/v2/versions/loader/%s/%s", gameVersion, loaderVersion); + } + private static class GameVersion { private final String version; private final String maven; 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 81fa368d7..dff3038ec 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 @@ -102,8 +102,7 @@ public final class ForgeBMCLVersionList extends VersionList if (urls.isEmpty()) continue; versions.put(gameVersion, new ForgeRemoteVersion( - version.getGameVersion(), version.getVersion(), urls.toArray(new String[0]) - )); + version.getGameVersion(), version.getVersion(), urls)); } } finally { lock.writeLock().unlock(); 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 63f198f99..069e695df 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 @@ -26,7 +26,9 @@ 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.Map; /** * @@ -76,13 +78,13 @@ public final class ForgeVersionList extends VersionList { String classifier = version.getGameVersion() + "-" + version.getVersion() + (StringUtils.isNotBlank(version.getBranch()) ? "-" + version.getBranch() : ""); String fileName = root.getArtifact() + "-" + classifier + "-" + file[1] + "." + file[0]; - jar = downloadProvider.injectURL(root.getWebPath() + classifier + "/" + fileName); + jar = root.getWebPath() + classifier + "/" + fileName; } if (jar == null) continue; versions.put(gameVersion, new ForgeRemoteVersion( - version.getGameVersion(), version.getVersion(), jar + version.getGameVersion(), version.getVersion(), Collections.singletonList(jar) )); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersion.java index feef106f2..6fa343939 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersion.java @@ -26,6 +26,7 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.Immutable; import java.util.Date; +import java.util.List; /** * @@ -37,7 +38,7 @@ public final class GameRemoteVersion extends RemoteVersion { private final ReleaseType type; private final Date time; - public GameRemoteVersion(String gameVersion, String selfVersion, String url, ReleaseType type, Date time) { + public GameRemoteVersion(String gameVersion, String selfVersion, List url, ReleaseType type, Date time) { super(LibraryAnalyzer.LibraryType.MINECRAFT.getPatchId(), gameVersion, selfVersion, getReleaseType(type), url); this.type = type; this.time = time; 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 db7265696..be667e0b1 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 @@ -74,7 +74,7 @@ public final class GameVersionList extends VersionList { versions.put(remoteVersion.getGameVersion(), new GameRemoteVersion( remoteVersion.getGameVersion(), remoteVersion.getGameVersion(), - remoteVersion.getUrl(), + Collections.singletonList(remoteVersion.getUrl()), remoteVersion.getType(), remoteVersion.getReleaseTime()) ); } 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 d8417d890..e9ccab8e4 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 @@ -101,7 +101,7 @@ public final class LiteLoaderBMCLVersionList extends VersionList { Library library = new Library( new Artifact("com.mumfrey", "liteloader", remote.getSelfVersion()), "http://dl.liteloader.com/versions/", - new LibrariesDownloadInfo(new LibraryDownloadInfo(null, remote.getUrl()[0])) + new LibrariesDownloadInfo(new LibraryDownloadInfo(null, remote.getUrls().get(0))) ); setResult(new Version(LibraryAnalyzer.LibraryType.LITELOADER.getPatchId(), diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderRemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderRemoteVersion.java index e864f7206..b1fbf35e3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderRemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderRemoteVersion.java @@ -25,6 +25,7 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; import java.util.Collection; +import java.util.List; public class LiteLoaderRemoteVersion extends RemoteVersion { private final String tweakClass; @@ -34,10 +35,10 @@ public class LiteLoaderRemoteVersion extends RemoteVersion { * * @param gameVersion the Minecraft version that this remote version suits. * @param selfVersion the version string of the remote version. - * @param url the installer or universal jar URL. + * @param urls the installer or universal jar original URL. */ - LiteLoaderRemoteVersion(String gameVersion, String selfVersion, String url, String tweakClass, Collection libraries) { - super(LibraryAnalyzer.LibraryType.LITELOADER.getPatchId(), gameVersion, selfVersion, url); + LiteLoaderRemoteVersion(String gameVersion, String selfVersion, List urls, String tweakClass, Collection libraries) { + super(LibraryAnalyzer.LibraryType.LITELOADER.getPatchId(), gameVersion, selfVersion, urls); this.tweakClass = tweakClass; this.libraries = libraries; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java index 1d34252f6..49e99b00b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java @@ -102,7 +102,7 @@ public final class LiteLoaderVersionList extends VersionList { new Artifact("optifine", "OptiFine", mavenVersion, "installer"), null, new LibrariesDownloadInfo(new LibraryDownloadInfo( "optifine/OptiFine/" + mavenVersion + "/OptiFine-" + mavenVersion + "-installer.jar", - remote.getUrl()[0])) + remote.getUrls().get(0).toString())) ); } @@ -231,7 +231,7 @@ public final class OptiFineInstallTask extends Task { throw new VersionMismatchException(mcVersion, gameVersion.get()); return new OptiFineInstallTask(dependencyManager, version, - new OptiFineRemoteVersion(mcVersion, ofEdition + "_" + ofRelease, "", false), installer); + new OptiFineRemoteVersion(mcVersion, ofEdition + "_" + ofRelease, Collections.singletonList(""), false), installer); } } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineRemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineRemoteVersion.java index f35260a9e..c76f132f1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineRemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineRemoteVersion.java @@ -23,12 +23,12 @@ import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; -import java.util.function.Supplier; +import java.util.List; public class OptiFineRemoteVersion extends RemoteVersion { - public OptiFineRemoteVersion(String gameVersion, String selfVersion, String url, boolean snapshot) { - super(LibraryAnalyzer.LibraryType.OPTIFINE.getPatchId(), gameVersion, selfVersion, snapshot ? Type.SNAPSHOT : Type.RELEASE, url); + public OptiFineRemoteVersion(String gameVersion, String selfVersion, List urls, boolean snapshot) { + super(LibraryAnalyzer.LibraryType.OPTIFINE.getPatchId(), gameVersion, selfVersion, snapshot ? Type.SNAPSHOT : Type.RELEASE, urls); } @Override