From 6532dc72dbcedb9fc1977f6f89e43daa52af2650 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 16 Jun 2020 13:24:43 +0800 Subject: [PATCH] fix: proxy settings not applied to game --- .../hmcl/setting/VersionSetting.java | 3 +-- .../jackhuang/hmcl/game/LaunchOptions.java | 26 +++++-------------- .../hmcl/launch/DefaultLauncher.java | 25 +++++++++++++++--- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java index a5532d50a..a3276d451 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -554,8 +554,7 @@ public final class VersionSetting implements Cloneable { .setPrecalledCommand(getPreLaunchCommand()) .setNoGeneratedJVMArgs(isNoJVMArgs()); if (config().hasProxy()) { - builder.setProxyHost(config().getProxyHost()); - builder.setProxyPort(config().getProxyPort()); + builder.setProxy(ProxyManager.getProxy()); if (config().hasProxyAuth()) { builder.setProxyUser(config().getProxyUser()); builder.setProxyPass(config().getProxyPass()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java index 7b7aede48..0c43dfce0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java @@ -21,6 +21,7 @@ import org.jackhuang.hmcl.util.platform.JavaVersion; import java.io.File; import java.io.Serializable; +import java.net.Proxy; /** * @@ -43,8 +44,7 @@ public class LaunchOptions implements Serializable { private boolean fullscreen; private String serverIp; private String wrapper; - private String proxyHost; - private int proxyPort; + private Proxy proxy; private String proxyUser; private String proxyPass; private boolean noGeneratedJVMArgs; @@ -160,17 +160,10 @@ public class LaunchOptions implements Serializable { } /** - * The host of the proxy address + * Proxy settings */ - public String getProxyHost() { - return proxyHost; - } - - /** - * the port of the proxy address. - */ - public int getProxyPort() { - return proxyPort; + public Proxy getProxy() { + return proxy; } /** @@ -284,13 +277,8 @@ public class LaunchOptions implements Serializable { return this; } - public Builder setProxyHost(String proxyHost) { - options.proxyHost = proxyHost; - return this; - } - - public Builder setProxyPort(int proxyPort) { - options.proxyPort = proxyPort; + public Builder setProxy(Proxy proxy) { + options.proxy = proxy; return this; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java index 148a6fb11..2d0003c5f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java @@ -41,6 +41,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.net.InetSocketAddress; +import java.net.Proxy; import java.nio.file.Files; import java.util.Arrays; import java.util.Collections; @@ -133,6 +135,22 @@ public class DefaultLauncher extends Launcher { res.add("-Dfml.ignorePatchDiscrepancies=true"); } + Proxy proxy = options.getProxy(); + if (proxy != null && StringUtils.isBlank(options.getProxyUser()) && StringUtils.isBlank(options.getProxyPass())) { + InetSocketAddress address = (InetSocketAddress) options.getProxy().address(); + String host = address.getHostString(); + int port = address.getPort(); + if (proxy.type() == Proxy.Type.HTTP) { + res.add("-Dhttp.proxyHost=" + host); + res.add("-Dhttp.proxyPort=" + port); + res.add("-Dhttps.proxyHost=" + host); + res.add("-Dhttps.proxyPort=" + port); + } else if (proxy.type() == Proxy.Type.SOCKS) { + res.add("-DsocksProxyHost=" + host); + res.add("-DsocksProxyPort=" + port); + } + } + LinkedList classpath = new LinkedList<>(); for (Library library : version.getLibraries()) if (library.appliesToCurrentEnvironment() && !library.isNative()) { @@ -182,11 +200,12 @@ public class DefaultLauncher extends Launcher { if (options.isFullscreen()) res.add("--fullscreen"); - if (StringUtils.isNotBlank(options.getProxyHost())) { + if (options.getProxy() != null) { + InetSocketAddress address = (InetSocketAddress) options.getProxy().address(); res.add("--proxyHost"); - res.add(options.getProxyHost()); + res.add(address.getHostString()); res.add("--proxyPort"); - res.add(String.valueOf(options.getProxyPort())); + res.add(String.valueOf(address.getPort())); if (StringUtils.isNotBlank(options.getProxyUser()) && StringUtils.isNotBlank(options.getProxyPass())) { res.add("--proxyUser"); res.add(options.getProxyUser());