From 3ac16b15c69e712b7fca8678a8e32a9f4dc168e5 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 12 Oct 2021 23:06:13 +0800 Subject: [PATCH] fix(multiplayer): should not show unsupported platform when running on 32-bit Java, but 64-bit OS. --- .../java/org/jackhuang/hmcl/game/LauncherHelper.java | 2 +- .../org/jackhuang/hmcl/setting/VersionSetting.java | 4 ++-- .../hmcl/ui/multiplayer/MultiplayerManager.java | 10 +++++----- .../org/jackhuang/hmcl/util/SelfDependencyPatcher.java | 6 +++--- .../jackhuang/hmcl/download/java/JavaRepository.java | 10 +++++----- .../org/jackhuang/hmcl/game/JavaVersionConstraint.java | 2 +- .../src/main/java/org/jackhuang/hmcl/game/Library.java | 4 ++-- .../org/jackhuang/hmcl/util/platform/Architecture.java | 7 ++++--- .../org/jackhuang/hmcl/util/platform/JavaVersion.java | 2 +- 9 files changed, 24 insertions(+), 23 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index e05e3fe80..64bb568b7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -430,7 +430,7 @@ public final class LauncherHelper { } } - if (javaVersion.getPlatform() != Architecture.CURRENT.getPlatform()) { + if (javaVersion.getPlatform() != Architecture.SYSTEM.getPlatform()) { Controllers.dialog(i18n("launch.advice.different_platform"), i18n("message.warning"), MessageType.ERROR, continueAction); suggested = true; } 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 27b9dc40a..32894683e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -26,9 +26,9 @@ import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.JavaVersion; import org.jackhuang.hmcl.util.platform.OperatingSystem; -import org.jackhuang.hmcl.util.platform.Platform; import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.IOException; @@ -608,7 +608,7 @@ public final class VersionSetting implements Cloneable { if (checkJava) return JavaVersion.fromExecutable(Paths.get(getJavaDir())); else - return new JavaVersion(Paths.get(getJavaDir()), "", Platform.getPlatform()); + return new JavaVersion(Paths.get(getJavaDir()), "", Architecture.SYSTEM.getPlatform()); } catch (IOException | InvalidPathException e) { return null; // Custom Java Directory not found, } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java index 744f6eb8d..19e39c19b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java @@ -228,23 +228,23 @@ public final class MultiplayerManager { public static String getCatoPath() { switch (OperatingSystem.CURRENT_OS) { case WINDOWS: - if (Architecture.CURRENT == Architecture.X86_64) { + if (Architecture.SYSTEM == Architecture.X86_64) { return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-windows-amd64.exe"; } else { return ""; } case OSX: - if (Architecture.CURRENT == Architecture.X86_64) { + if (Architecture.SYSTEM == Architecture.X86_64) { return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-darwin-amd64"; - } else if (Architecture.CURRENT == Architecture.ARM64) { + } else if (Architecture.SYSTEM == Architecture.ARM64) { return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-darwin-arm64"; } else { return ""; } case LINUX: - if (Architecture.CURRENT == Architecture.X86_64) { + if (Architecture.SYSTEM == Architecture.X86_64) { return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-linux-amd64"; - } else if (Architecture.CURRENT == Architecture.ARM || Architecture.CURRENT == Architecture.ARM64) { + } else if (Architecture.SYSTEM == Architecture.ARM || Architecture.SYSTEM == Architecture.ARM64) { return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-linux-arm7"; } else { return ""; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java index 3b2d6d93c..88ed15deb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java @@ -84,7 +84,7 @@ public final class SelfDependencyPatcher { private static String currentArchClassifier() { if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) { - switch (Architecture.CURRENT) { + switch (Architecture.JDK) { case X86_64: return "linux"; case ARM: @@ -93,14 +93,14 @@ public final class SelfDependencyPatcher { return "linux-aarch64"; } } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { - switch (Architecture.CURRENT) { + switch (Architecture.JDK) { case X86_64: return "mac"; case ARM64: return "mac-aarch64"; } } else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { - switch (Architecture.CURRENT) { + switch (Architecture.JDK) { case X86_64: return "win"; case X86: diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java index f684c939d..8560f6c63 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java @@ -62,19 +62,19 @@ public final class JavaRepository { public static Optional getCurrentJavaPlatform() { if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) { - if (Architecture.CURRENT == Architecture.X86) { + if (Architecture.SYSTEM == Architecture.X86) { return Optional.of("linux-i386"); - } else if (Architecture.CURRENT == Architecture.X86_64) { + } else if (Architecture.SYSTEM == Architecture.X86_64) { return Optional.of("linux"); } } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { - if (Architecture.CURRENT == Architecture.X86_64) { + if (Architecture.SYSTEM == Architecture.X86_64) { return Optional.of("mac-os"); } } else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { - if (Architecture.CURRENT == Architecture.X86) { + if (Architecture.SYSTEM == Architecture.X86) { return Optional.of("windows-x86"); - } else if (Architecture.CURRENT == Architecture.X86_64) { + } else if (Architecture.SYSTEM == Architecture.X86_64) { return Optional.of("windows-x64"); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java index 66eda07f0..635b5f27b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -84,7 +84,7 @@ public enum JavaVersionConstraint { VANILLA_LINUX_JAVA_8(JavaVersionConstraint.RULE_MANDATORY, versionRange("0", "1.12.999"), versionRange(JavaVersionConstraint.MIN, "1.8.999")) { @Override public boolean appliesToVersion(@Nullable VersionNumber gameVersion, @Nullable Version version) { - return OperatingSystem.CURRENT_OS == OperatingSystem.LINUX && Architecture.CURRENT == Architecture.X86_64; + return OperatingSystem.CURRENT_OS == OperatingSystem.LINUX && Architecture.SYSTEM == Architecture.X86_64; } } ; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java index cbcabd220..14f906bfc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java @@ -24,8 +24,8 @@ import org.jackhuang.hmcl.util.Immutable; import org.jackhuang.hmcl.util.ToStringBuilder; import org.jackhuang.hmcl.util.gson.TolerableValidationException; import org.jackhuang.hmcl.util.gson.Validation; +import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.OperatingSystem; -import org.jackhuang.hmcl.util.platform.Platform; import java.util.List; import java.util.Map; @@ -94,7 +94,7 @@ public class Library implements Comparable, Validation { public String getClassifier() { if (artifact.getClassifier() == null) if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS)) - return natives.get(OperatingSystem.CURRENT_OS).replace("${arch}", Platform.getPlatform().getBit()); + return natives.get(OperatingSystem.CURRENT_OS).replace("${arch}", Architecture.SYSTEM.getPlatform().getBit()); else return null; else diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java index 0e4b0b0a1..1910d7369 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java @@ -58,7 +58,8 @@ public enum Architecture { } public static final String SYSTEM_ARCHITECTURE; - public static final Architecture CURRENT; + public static final Architecture JDK; + public static final Architecture SYSTEM; private static Architecture normalizeArch(String value) { value = normalize(value); @@ -151,7 +152,7 @@ public enum Architecture { static { SYSTEM_ARCHITECTURE = System.getProperty("os.arch"); - CURRENT = Optional.ofNullable(normalizeProcessorArchitecture()) - .orElseGet(() -> normalizeArch(SYSTEM_ARCHITECTURE)); + JDK = normalizeArch(SYSTEM_ARCHITECTURE); + SYSTEM = Optional.ofNullable(normalizeProcessorArchitecture()).orElse(JDK); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java index 7a4d26cac..76321d7f9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java @@ -163,7 +163,7 @@ public final class JavaVersion { CURRENT_JAVA = new JavaVersion( currentExecutable, System.getProperty("java.version"), - Platform.getPlatform()); + Architecture.JDK.getPlatform()); } private static Collection JAVAS;