fix(multiplayer): should not show unsupported platform when running on 32-bit Java, but 64-bit OS.

This commit is contained in:
huanghongxun
2021-10-12 23:06:13 +08:00
parent ec3dfb908c
commit 3ac16b15c6
9 changed files with 24 additions and 23 deletions

View File

@@ -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); Controllers.dialog(i18n("launch.advice.different_platform"), i18n("message.warning"), MessageType.ERROR, continueAction);
suggested = true; suggested = true;
} }

View File

@@ -26,9 +26,9 @@ import org.jackhuang.hmcl.task.Schedulers;
import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Lang;
import org.jackhuang.hmcl.util.StringUtils; 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.JavaVersion;
import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.OperatingSystem;
import org.jackhuang.hmcl.util.platform.Platform;
import org.jackhuang.hmcl.util.versioning.VersionNumber; import org.jackhuang.hmcl.util.versioning.VersionNumber;
import java.io.IOException; import java.io.IOException;
@@ -608,7 +608,7 @@ public final class VersionSetting implements Cloneable {
if (checkJava) if (checkJava)
return JavaVersion.fromExecutable(Paths.get(getJavaDir())); return JavaVersion.fromExecutable(Paths.get(getJavaDir()));
else else
return new JavaVersion(Paths.get(getJavaDir()), "", Platform.getPlatform()); return new JavaVersion(Paths.get(getJavaDir()), "", Architecture.SYSTEM.getPlatform());
} catch (IOException | InvalidPathException e) { } catch (IOException | InvalidPathException e) {
return null; // Custom Java Directory not found, return null; // Custom Java Directory not found,
} }

View File

@@ -228,23 +228,23 @@ public final class MultiplayerManager {
public static String getCatoPath() { public static String getCatoPath() {
switch (OperatingSystem.CURRENT_OS) { switch (OperatingSystem.CURRENT_OS) {
case WINDOWS: case WINDOWS:
if (Architecture.CURRENT == Architecture.X86_64) { if (Architecture.SYSTEM == Architecture.X86_64) {
return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-windows-amd64.exe"; return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-windows-amd64.exe";
} else { } else {
return ""; return "";
} }
case OSX: case OSX:
if (Architecture.CURRENT == Architecture.X86_64) { if (Architecture.SYSTEM == Architecture.X86_64) {
return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-darwin-amd64"; 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"; return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-darwin-arm64";
} else { } else {
return ""; return "";
} }
case LINUX: case LINUX:
if (Architecture.CURRENT == Architecture.X86_64) { if (Architecture.SYSTEM == Architecture.X86_64) {
return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-linux-amd64"; 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"; return "cato/cato/" + MultiplayerManager.CATO_VERSION + "/cato-linux-arm7";
} else { } else {
return ""; return "";

View File

@@ -84,7 +84,7 @@ public final class SelfDependencyPatcher {
private static String currentArchClassifier() { private static String currentArchClassifier() {
if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) { if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) {
switch (Architecture.CURRENT) { switch (Architecture.JDK) {
case X86_64: case X86_64:
return "linux"; return "linux";
case ARM: case ARM:
@@ -93,14 +93,14 @@ public final class SelfDependencyPatcher {
return "linux-aarch64"; return "linux-aarch64";
} }
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
switch (Architecture.CURRENT) { switch (Architecture.JDK) {
case X86_64: case X86_64:
return "mac"; return "mac";
case ARM64: case ARM64:
return "mac-aarch64"; return "mac-aarch64";
} }
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { } else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
switch (Architecture.CURRENT) { switch (Architecture.JDK) {
case X86_64: case X86_64:
return "win"; return "win";
case X86: case X86:

View File

@@ -62,19 +62,19 @@ public final class JavaRepository {
public static Optional<String> getCurrentJavaPlatform() { public static Optional<String> getCurrentJavaPlatform() {
if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) { if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) {
if (Architecture.CURRENT == Architecture.X86) { if (Architecture.SYSTEM == Architecture.X86) {
return Optional.of("linux-i386"); return Optional.of("linux-i386");
} else if (Architecture.CURRENT == Architecture.X86_64) { } else if (Architecture.SYSTEM == Architecture.X86_64) {
return Optional.of("linux"); return Optional.of("linux");
} }
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
if (Architecture.CURRENT == Architecture.X86_64) { if (Architecture.SYSTEM == Architecture.X86_64) {
return Optional.of("mac-os"); return Optional.of("mac-os");
} }
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { } else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
if (Architecture.CURRENT == Architecture.X86) { if (Architecture.SYSTEM == Architecture.X86) {
return Optional.of("windows-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"); return Optional.of("windows-x64");
} }
} }

View File

@@ -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")) { VANILLA_LINUX_JAVA_8(JavaVersionConstraint.RULE_MANDATORY, versionRange("0", "1.12.999"), versionRange(JavaVersionConstraint.MIN, "1.8.999")) {
@Override @Override
public boolean appliesToVersion(@Nullable VersionNumber gameVersion, @Nullable Version version) { 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;
} }
} }
; ;

View File

@@ -24,8 +24,8 @@ import org.jackhuang.hmcl.util.Immutable;
import org.jackhuang.hmcl.util.ToStringBuilder; import org.jackhuang.hmcl.util.ToStringBuilder;
import org.jackhuang.hmcl.util.gson.TolerableValidationException; import org.jackhuang.hmcl.util.gson.TolerableValidationException;
import org.jackhuang.hmcl.util.gson.Validation; 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.OperatingSystem;
import org.jackhuang.hmcl.util.platform.Platform;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -94,7 +94,7 @@ public class Library implements Comparable<Library>, Validation {
public String getClassifier() { public String getClassifier() {
if (artifact.getClassifier() == null) if (artifact.getClassifier() == null)
if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS)) 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 else
return null; return null;
else else

View File

@@ -58,7 +58,8 @@ public enum Architecture {
} }
public static final String SYSTEM_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) { private static Architecture normalizeArch(String value) {
value = normalize(value); value = normalize(value);
@@ -151,7 +152,7 @@ public enum Architecture {
static { static {
SYSTEM_ARCHITECTURE = System.getProperty("os.arch"); SYSTEM_ARCHITECTURE = System.getProperty("os.arch");
CURRENT = Optional.ofNullable(normalizeProcessorArchitecture()) JDK = normalizeArch(SYSTEM_ARCHITECTURE);
.orElseGet(() -> normalizeArch(SYSTEM_ARCHITECTURE)); SYSTEM = Optional.ofNullable(normalizeProcessorArchitecture()).orElse(JDK);
} }
} }

View File

@@ -163,7 +163,7 @@ public final class JavaVersion {
CURRENT_JAVA = new JavaVersion( CURRENT_JAVA = new JavaVersion(
currentExecutable, currentExecutable,
System.getProperty("java.version"), System.getProperty("java.version"),
Platform.getPlatform()); Architecture.JDK.getPlatform());
} }
private static Collection<JavaVersion> JAVAS; private static Collection<JavaVersion> JAVAS;