From 058a8e2335e79d86a4dc09c5da607b59fd755ad3 Mon Sep 17 00:00:00 2001 From: Glavo Date: Thu, 1 Sep 2022 22:20:16 +0800 Subject: [PATCH] Update JavaVersionConstraint (#1683) --- .../hmcl/game/JavaVersionConstraint.java | 12 +++++-- .../hmcl/util/platform/Platform.java | 31 +++++++++---------- 2 files changed, 25 insertions(+), 18 deletions(-) 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 45066dc17..73405d499 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -120,8 +120,16 @@ public enum JavaVersionConstraint { @Override protected boolean appliesToVersionImpl(VersionNumber gameVersionNumber, @Nullable Version version, @Nullable JavaVersion javaVersion) { - return javaVersion != null && !javaVersion.getArchitecture().isX86() - && (OperatingSystem.CURRENT_OS != OperatingSystem.OSX || gameVersionNumber.compareTo(VersionNumber.asVersion("1.19")) < 0); + if (javaVersion == null || javaVersion.getArchitecture() != Architecture.ARM64) + return false; + + if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) + return gameVersionNumber.compareTo(VersionNumber.asVersion("1.6")) < 0; + + if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + return gameVersionNumber.compareTo(VersionNumber.asVersion("1.19")) < 0; + + return false; } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java index 027aacdd8..56bc7b0ed 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java @@ -6,27 +6,19 @@ public final class Platform { public static final Platform UNKNOWN = new Platform(OperatingSystem.UNKNOWN, Architecture.UNKNOWN); public static final Platform WINDOWS_X86_64 = new Platform(OperatingSystem.WINDOWS, Architecture.X86_64); - public static final Platform OSX_X86_64 = new Platform(OperatingSystem.OSX, Architecture.X86_64); - public static final Platform LINUX_X86_64 = new Platform(OperatingSystem.LINUX, Architecture.X86_64); + public static final Platform WINDOWS_ARM64 = new Platform(OperatingSystem.WINDOWS, Architecture.ARM64); + public static final Platform LINUX_X86_64 = new Platform(OperatingSystem.LINUX, Architecture.X86_64); + public static final Platform LINUX_ARM64 = new Platform(OperatingSystem.LINUX, Architecture.ARM64); + + public static final Platform OSX_X86_64 = new Platform(OperatingSystem.OSX, Architecture.X86_64); public static final Platform OSX_ARM64 = new Platform(OperatingSystem.OSX, Architecture.ARM64); public static final Platform CURRENT_PLATFORM = Platform.getPlatform(OperatingSystem.CURRENT_OS, Architecture.CURRENT_ARCH); public static final Platform SYSTEM_PLATFORM = Platform.getPlatform(OperatingSystem.CURRENT_OS, Architecture.SYSTEM_ARCH); public static boolean isCompatibleWithX86Java() { - if (Architecture.CURRENT_ARCH.isX86()) - return true; - - // Rosetta 2 is available for Mac computers with Apple silicon - if (CURRENT_PLATFORM == OSX_ARM64) - return true; - - // Windows on ARM introduced translation support for x86-64 after 10.0.21277. - if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS && OperatingSystem.SYSTEM_BUILD_NUMBER >= 21277) - return true; - - return false; + return Architecture.SYSTEM_ARCH.isX86() || SYSTEM_PLATFORM == OSX_ARM64 || SYSTEM_PLATFORM == WINDOWS_ARM64; } private final OperatingSystem os; @@ -55,8 +47,15 @@ public final class Platform { case LINUX: return LINUX_X86_64; } - } else if (arch == Architecture.ARM64 && OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { - return OSX_ARM64; + } else if (arch == Architecture.ARM64) { + switch (os) { + case WINDOWS: + return WINDOWS_ARM64; + case OSX: + return OSX_ARM64; + case LINUX: + return LINUX_ARM64; + } } return new Platform(os, arch);