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);
suggested = true;
}

View File

@@ -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,
}

View File

@@ -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 "";

View File

@@ -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:

View File

@@ -62,19 +62,19 @@ public final class JavaRepository {
public static Optional<String> 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");
}
}

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")) {
@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;
}
}
;

View File

@@ -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<Library>, 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

View File

@@ -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);
}
}

View File

@@ -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<JavaVersion> JAVAS;