完善 osx-arm64 原生支持 (#1689)

* Add 1.6~1.18.2 support for osx-arm64

* fix crash on 1.12

* Update I18N
This commit is contained in:
Glavo
2022-09-03 16:55:27 +08:00
committed by GitHub
parent 835668d781
commit 6c07924d9b
7 changed files with 451 additions and 53 deletions

View File

@@ -66,6 +66,8 @@ public final class JavaRepository {
}
public static Stream<Path> findJavaHomeInMinecraftRuntimeDir(Path runtimeDir) {
if (!Files.isDirectory(runtimeDir))
return Stream.empty();
// Examples:
// $HOME/Library/Application Support/minecraft/runtime/java-runtime-beta/mac-os/java-runtime-beta/jre.bundle/Contents/Home
// $HOME/.minecraft/runtime/java-runtime-beta/linux/java-runtime-beta

View File

@@ -123,12 +123,9 @@ public enum JavaVersionConstraint {
if (javaVersion == null || javaVersion.getArchitecture() != Architecture.ARM64)
return false;
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS)
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.OSX)
return gameVersionNumber.compareTo(VersionNumber.asVersion("1.6")) < 0;
if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX)
return gameVersionNumber.compareTo(VersionNumber.asVersion("1.19")) < 0;
return false;
}
@@ -245,15 +242,15 @@ public enum JavaVersionConstraint {
public static JavaVersion findSuitableJavaVersion(VersionNumber gameVersion, Version version) throws InterruptedException {
VersionRanges range = findSuitableJavaVersionRange(gameVersion, version);
boolean skipCheckArchitecture = Architecture.CURRENT_ARCH.isX86()
|| (OperatingSystem.CURRENT_OS == OperatingSystem.OSX && gameVersion.compareTo(VersionNumber.asVersion("1.19")) >= 0)
|| OperatingSystem.CURRENT_OS == OperatingSystem.LINUX;
boolean forceX86 = Architecture.SYSTEM_ARCH == Architecture.ARM64
&& (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.OSX)
&& gameVersion.compareTo(VersionNumber.asVersion("1.6")) < 0;
JavaVersion mandatory = null;
JavaVersion suggested = null;
for (JavaVersion javaVersion : JavaVersion.getJavas()) {
// select the latest x86 java that this version accepts.
if (!skipCheckArchitecture && !javaVersion.getArchitecture().isX86())
if (forceX86 && !javaVersion.getArchitecture().isX86())
continue;
VersionNumber javaVersionNumber = javaVersion.getVersionNumber();