From ce3b9e3b1f5855b07e6062bed2572b2ace4b78a8 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 5 Sep 2019 15:49:27 +0800 Subject: [PATCH] FIx: unable to download Forge installer --- .../download/forge/ForgeBMCLVersionList.java | 20 +++++++++++++++---- .../download/forge/ForgeNewInstallTask.java | 7 ++++--- .../jackhuang/hmcl/util/io/NetworkUtils.java | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) 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 8a6151172..1ad1f56f8 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 @@ -28,11 +28,16 @@ import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.gson.Validation; import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; import java.util.List; +import static org.jackhuang.hmcl.util.Lang.mapOf; +import static org.jackhuang.hmcl.util.Pair.pair; + public final class ForgeBMCLVersionList extends VersionList { public static final ForgeBMCLVersionList INSTANCE = new ForgeBMCLVersionList(); @@ -79,10 +84,13 @@ public final class ForgeBMCLVersionList extends VersionList String jar = null; for (ForgeVersion.File file : version.getFiles()) if ("installer".equals(file.getCategory()) && "jar".equals(file.getFormat())) { - String classifier = gameVersion + "-" + version.getVersion() - + (StringUtils.isNotBlank(version.getBranch()) ? "-" + version.getBranch() : ""); - String fileName = "forge-" + classifier + "-" + file.getCategory() + "." + file.getFormat(); - jar = "https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/" + classifier + "/" + fileName; + jar = NetworkUtils.withQuery("https://bmclapi2.bangbang93.com/forge/download", mapOf( + pair("mcversion", version.getGameVersion()), + pair("version", version.getVersion()), + pair("branch", version.getBranch()), + pair("category", file.getCategory()), + pair("format", file.getFormat()) + )); } if (jar == null) @@ -121,18 +129,22 @@ public final class ForgeBMCLVersionList extends VersionList this.files = files; } + @Nullable public String getBranch() { return branch; } + @NotNull public String getGameVersion() { return mcversion; } + @NotNull public String getVersion() { return version; } + @NotNull public List getFiles() { return files; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java index 16b71d71f..90637c8c2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java @@ -231,12 +231,13 @@ public class ForgeNewInstallTask extends Task { command.add(mainClass); - List args = processor.getArgs().stream().map(arg -> { + List args = new ArrayList<>(processor.getArgs().size()); + for (String arg : processor.getArgs()) { String parsed = parseLiteral(arg, data, ExceptionalFunction.identity()); if (parsed == null) throw new IOException("Invalid forge installation configuration"); - return parsed; - }).collect(Collectors.toList()); + args.add(parsed); + } command.addAll(args); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java index 386e3a639..b60189ab7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java @@ -40,6 +40,8 @@ public final class NetworkUtils { StringBuilder sb = new StringBuilder(baseUrl); boolean first = true; for (Entry param : params.entrySet()) { + if (param.getValue() == null) + continue; if (first) { sb.append('?'); first = false;