Skip to content

Commit 32aafb1

Browse files
authored
增强对 x86-64 转译支持状态的检测 (#5993)
1 parent 36dab70 commit 32aafb1

12 files changed

Lines changed: 43 additions & 26 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@
7272
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
7373
import static org.jackhuang.hmcl.util.logging.Logger.LOG;
7474
import static org.jackhuang.hmcl.util.platform.Platform.SYSTEM_PLATFORM;
75-
import static org.jackhuang.hmcl.util.platform.Platform.isCompatibleWithX86Java;
7675

7776
public final class LauncherHelper {
7877

@@ -625,7 +624,7 @@ else if (violatedMandatoryConstraints.contains(JavaVersionConstraint.VANILLA))
625624
break;
626625
case VANILLA_X86:
627626
if (setting.getNativesDirType() == NativesDirectoryType.VERSION_FOLDER
628-
&& isCompatibleWithX86Java()) {
627+
&& Platform.isSupportedTranslationX86_64()) {
629628
suggestions.add(i18n("launch.advice.vanilla_x86.translation"));
630629
}
631630
break;

HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,27 @@ public static boolean isCompatible(Platform platform) {
122122
switch (OperatingSystem.CURRENT_OS) {
123123
case WINDOWS:
124124
if (Architecture.SYSTEM_ARCH == Architecture.X86_64)
125+
// Windows x86-64 platform is compatible with x86 programs
125126
return architecture == Architecture.X86;
126-
if (Architecture.SYSTEM_ARCH == Architecture.ARM64)
127-
return OperatingSystem.SYSTEM_BUILD_NUMBER >= 21277 && architecture == Architecture.X86_64 || architecture == Architecture.X86;
127+
if (Architecture.SYSTEM_ARCH == Architecture.ARM64) {
128+
129+
// Since Windows 10 Build 21277, Windows Arm64 has been compatible with x86-64 programs via translation
130+
if (architecture == Architecture.X86_64 && Platform.isSupportedTranslationX86_64())
131+
return true;
132+
133+
// Windows Arm64 is compatible with x86 programs via translation
134+
if (architecture == Architecture.X86)
135+
return true;
136+
return false;
137+
}
128138
break;
129139
case LINUX:
130140
if (Architecture.SYSTEM_ARCH == Architecture.X86_64)
131141
return architecture == Architecture.X86;
132142
break;
133143
case MACOS:
134-
if (Architecture.SYSTEM_ARCH == Architecture.ARM64)
144+
// macOS Arm64 compatible with x86-64 programs via Rosetta 2.
145+
if (Architecture.SYSTEM_ARCH == Architecture.ARM64 && Platform.isSupportedTranslationX86_64())
135146
return architecture == Architecture.X86_64;
136147
break;
137148
}
@@ -364,13 +375,13 @@ private static Map<Path, JavaRuntime> searchPotentialJavaExecutables(boolean use
364375
if (Architecture.SYSTEM_ARCH == Architecture.X86_64)
365376
searcher.searchAllJavaInRepository(Platform.WINDOWS_X86);
366377
if (Architecture.SYSTEM_ARCH == Architecture.ARM64) {
367-
if (OperatingSystem.SYSTEM_BUILD_NUMBER >= 21277)
378+
if (Platform.isSupportedTranslationX86_64())
368379
searcher.searchAllJavaInRepository(Platform.WINDOWS_X86_64);
369380
searcher.searchAllJavaInRepository(Platform.WINDOWS_X86);
370381
}
371382
break;
372383
case MACOS:
373-
if (Architecture.SYSTEM_ARCH == Architecture.ARM64)
384+
if (Architecture.SYSTEM_ARCH == Architecture.ARM64 && Platform.isSupportedTranslationX86_64())
374385
searcher.searchAllJavaInRepository(Platform.MACOS_X86_64);
375386
break;
376387
}
@@ -784,13 +795,15 @@ void searchAllOfficialJava(Path directory, boolean verify) {
784795
if (Architecture.SYSTEM_ARCH == Architecture.X86_64) {
785796
searchAllOfficialJava(directory, getMojangJavaPlatform(Platform.WINDOWS_X86), verify);
786797
} else if (Architecture.SYSTEM_ARCH == Architecture.ARM64) {
787-
if (OperatingSystem.SYSTEM_BUILD_NUMBER >= 21277) {
798+
if (Platform.isSupportedTranslationX86_64()) {
788799
searchAllOfficialJava(directory, getMojangJavaPlatform(Platform.WINDOWS_X86_64), verify);
789800
}
790801
searchAllOfficialJava(directory, getMojangJavaPlatform(Platform.WINDOWS_X86), verify);
791802
}
792-
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS && Architecture.CURRENT_ARCH == Architecture.ARM64) {
793-
searchAllOfficialJava(directory, getMojangJavaPlatform(Platform.MACOS_X86_64), verify);
803+
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) {
804+
if (Architecture.SYSTEM_ARCH == Architecture.ARM64 && Platform.isSupportedTranslationX86_64()) {
805+
searchAllOfficialJava(directory, getMojangJavaPlatform(Platform.MACOS_X86_64), verify);
806+
}
794807
}
795808
}
796809

HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ public static void initialize(Stage stage) {
390390
Runnable continueAction = () -> globalConfig().setPlatformPromptVersion(1);
391391

392392
if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS && Architecture.SYSTEM_ARCH == Architecture.ARM64) {
393-
Controllers.dialog(i18n("fatal.unsupported_platform.macos_arm64"), null, MessageType.INFO, continueAction);
393+
continueAction.run();
394394
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS && Architecture.SYSTEM_ARCH == Architecture.ARM64) {
395395
Controllers.dialog(i18n("fatal.unsupported_platform.windows_arm64"), null, MessageType.INFO, continueAction);
396396
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX &&

HMCL/src/main/resources/assets/lang/I18N.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,8 +452,6 @@ fatal.unsupported_platform=Minecraft is not fully supported on your platform yet
452452
If you cannot launch Minecraft 1.17 and later, you can try switching the "Renderer" to "Mesa LLVMpipe" in "Global/Instance-specific Settings → Advanced Settings" to use CPU rendering for better compatibility.
453453
fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher has provided support for the Loongson platform.\n\
454454
If you encounter problems when playing a game, you can visit https://docs.hmcl.net/groups.html for help.
455-
fatal.unsupported_platform.macos_arm64=Hello Minecraft! Launcher has provided support for the Apple silicon platform, using native ARM Java to launch games to get a smoother gaming experience.\n\
456-
If you encounter problems when playing a game, launching the game with Java based on x86-64 architecture may offer better compatibility.
457455
fatal.unsupported_platform.windows_arm64=Hello Minecraft! Launcher has provided native support for the Windows on Arm platform. If you encounter problems when playing a game, please try launching the game with Java based on x86 architecture.\n\
458456
\n\
459457
If you are using the <b>Qualcomm</b> platform, you may need to install the <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">OpenGL Compatibility Pack</a> before playing games.\n\

HMCL/src/main/resources/assets/lang/I18N_ar.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,6 @@ fatal.unsupported_platform=لا يدعم Minecraft منصتك الحالية ب
438438
إذا لم تتمكن من تشغيل Minecraft 1.17 أو أحدث، يمكنك محاولة تغيير "المُصيِّر" إلى "Mesa LLVMpipe" في "الإعدادات العامة/الخاصة بالنسخة ← الإعدادات المتقدمة" لاستخدام معالجة المعالج المركزي لتوافق أفضل.
439439
fatal.unsupported_platform.loongarch=وفّر Hello Minecraft! Launcher دعماً لمنصة Loongson.\n\
440440
إذا واجهت مشاكل أثناء اللعب، يمكنك زيارة https://docs.hmcl.net/groups.html للحصول على مساعدة.
441-
fatal.unsupported_platform.macos_arm64=وفّر Hello Minecraft! Launcher دعماً لمنصة Apple silicon، باستخدام Java ARM الأصلي لتشغيل الألعاب للحصول على تجربة لعب أكثر سلاسة.\n\
442-
إذا واجهت مشاكل أثناء اللعب، قد يوفر تشغيل اللعبة بـ Java المبني على معمارية x86-64 توافقاً أفضل.
443441
fatal.unsupported_platform.windows_arm64=وفّر Hello Minecraft! Launcher دعماً أصلياً لمنصة Windows on Arm. إذا واجهت مشاكل أثناء اللعب، يُرجى محاولة تشغيل اللعبة بـ Java المبني على معمارية x86.\n\
444442
\n\
445443
إذا كنت تستخدم منصة <b>Qualcomm</b>، قد تحتاج إلى تثبيت <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">حزمة توافق OpenGL</a> قبل اللعب.\n\

HMCL/src/main/resources/assets/lang/I18N_es.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,6 @@ fatal.unsupported_platform=Minecraft aún no es totalmente compatible con tu pla
414414
Si no puedes iniciar Minecraft 1.17 y versiones posteriores, puedes intentar cambiar el «Renderizador» a «Mesa LLVMpipe» en «Configuración global/específica de la instancia → Configuración avanzada» para utilizar el renderizado por CPU y mejorar la compatibilidad.
415415
fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher ha prestado apoyo a la plataforma Loongson.\n\
416416
Si tienes problemas al jugar, puedes visitar https://docs.hmcl.net/groups.html para obtener ayuda.
417-
fatal.unsupported_platform.macos_arm64=Hello Minecraft! Launcher ha proporcionado soporte para la plataforma de chips de Apple, utilizando Java nativo de ARM para ejecutar juegos y conseguir una experiencia de juego más fluida.\n\
418-
Si tienes problemas al jugar a un juego, ejecutarlo con Java de arquitectura x86-64 puede tener mejor compatibilidad.
419417
fatal.unsupported_platform.windows_arm64=Hello Minecraft! Launcher ha proporcionado soporte nativo para la plataforma Windows en Arm. Si tiene problemas al jugar a un juego, intente iniciarlo con Java de arquitectura x86.\n\
420418
\n\
421419
Si utilizas la plataforma <b>Qualcomm</b>, es posible que tengas que instalar el <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">paquete de compatibilidad OpenGL</a> antes de jugar.\n\

HMCL/src/main/resources/assets/lang/I18N_lzh.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,6 @@ fatal.illegal_char=君之案夾名有諱文「=」,是以外載之戶簿、離
381381
fatal.unsupported_platform=礦藝未盡適君之算機,是以戲事或損,至於不能啟。\n\
382382
礦藝一點一七以晉之不能啟,或於「(全例/例殊) 戲設 → 進階置設 → 勘誤置設」改「繪製之器」以「Mesa LLVMpipe」,或能兼之。\n君可求助於右上之鈕。
383383
fatal.unsupported_platform.loongarch=HMCL 既適龍芯。\n凡有謬,遽求助於右上之鈕。
384-
fatal.unsupported_platform.macos_arm64=HMCL 既適蘋矽。宜啟以 ARM 之爪哇,以益君之戲事。\n誠有謬,宜啟以 x86-64 之爪哇,以益其兼。\n凡有謬,遽求助於右上之鈕。
385384
fatal.unsupported_platform.windows_arm64=HMCL 既適 ARM 之視窗。誠有謬,宜啟以 x86 之爪哇。\n誠用<b>栝柑</b>,或須置<a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">開圖庫兼囊</a>,而後可戯。擊鏈以置之於微軟貨舍。\n君可求助於右上之鈕。
386385

387386
file=

HMCL/src/main/resources/assets/lang/I18N_ru.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,8 +408,6 @@ fatal.unsupported_platform=Minecraft еще не полностью поддер
408408
Если вы не можете запустить Minecraft версии 1.17 и новее, попробуйте переключить «Рендерер» на «Mesa LLVMpipe» в разделе «Глобальные/настройки экземпляра → Расширенные настройки», чтобы использовать рендеринг через CPU для лучшей совместимости.
409409
fatal.unsupported_platform.loongarch=Лаунчер обеспечил поддержку платформы Loongson.\n\
410410
Если у вас возникнут проблемы во время игры, вы можете обратиться за помощью на сайт https://docs.hmcl.net/groups.html.
411-
fatal.unsupported_platform.macos_arm64=Лаунчер обеспечил поддержку платформы Apple silicon, используя родную ARM Java для запуска игр, чтобы получить более плавный игровой опыт.\n\
412-
Если вы столкнулись с проблемами во время игры, запуск игры с Java на базе архитектуры x86-64 может обеспечить лучшую совместимость.
413411
fatal.unsupported_platform.windows_arm64=Лаунчер обеспечил нативную поддержку платформы Windows на архитектуре Arm. Если у вам возникли проблемы во время игры, попробуйте запустить игру с Java на базе архитектуры x86.\n\
414412
\n\
415413
Если вы используете платформу <b>Qualcomm</b>, вам может потребоваться установить <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">пакет совместимости OpenGL</a> перед началом игры.\n\

HMCL/src/main/resources/assets/lang/I18N_uk.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,6 @@ fatal.unsupported_platform=Minecraft ще не повністю підтриму
394394
Якщо ви не можете запустити Minecraft версії 1.17 і новіші, спробуйте змінити «Рендерер» на «Mesa LLVMpipe» у розділі «Глобальні/налаштування екземпляра → Розширені налаштування», щоб використовувати рендеринг через CPU для кращої сумісності.
395395
fatal.unsupported_platform.loongarch=Hello Minecraft! Лаунчер надав підтримку платформи Loongson.\n\
396396
Якщо у вас виникли проблеми під час гри, ви можете відвідати https://docs.hmcl.net/groups.html для отримання допомоги.
397-
fatal.unsupported_platform.macos_arm64=Hello Minecraft! Лаунчер надав підтримку платформи Apple silicon, використовуючи нативну ARM Java для запуску ігор для отримання плавнішого ігрового досвіду.\n\
398-
Якщо у вас виникли проблеми під час гри, запуск гри з Java на основі архітектури x86-64 може забезпечити кращу сумісність.
399397
fatal.unsupported_platform.windows_arm64=Hello Minecraft! Лаунчер надав нативну підтримку платформи Windows on Arm. Якщо у вас виникли проблеми під час гри, спробуйте запустити гру з Java на основі архітектури x86.\n\
400398
Якщо ви використовуєте платформу <b>Qualcomm</b>, вам може знадобитися встановити <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">Пакет сумісності OpenGL</a> перед грою.\n\
401399
Натисніть посилання, щоб перейти до Microsoft Store та встановити пакет сумісності.

HMCL/src/main/resources/assets/lang/I18N_zh.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,6 @@ fatal.illegal_char=由於您的執行路徑中存在無效字元『=』,您將
419419
fatal.unsupported_platform=Minecraft 尚未對您的平臺提供完善支援,所以可能影響遊戲體驗或無法啟動遊戲。\n\
420420
若無法啟動 Minecraft 1.17 及更高版本,可以嘗試在「(全域/實例特定) 遊戲設定 → 進階設定 → 除錯選項」中將「繪製器」切換為「Mesa LLVMpipe」,以獲得更好的相容性。
421421
fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher 已為龍芯提供支援。\n如果遇到問題,你可以點擊右上角幫助按鈕進行求助。
422-
fatal.unsupported_platform.macos_arm64=Hello Minecraft! Launcher 已為 Apple Silicon 平臺提供支援。使用 ARM 原生 Java 啟動遊戲以獲得更流暢的遊戲體驗。\n如果你在遊戲中遭遇問題,使用 x86-64 架構的 Java 啟動遊戲可能有更好的相容性。
423422
fatal.unsupported_platform.windows_arm64=Hello Minecraft! Launcher 已為 Windows on Arm 平臺提供原生支援。如果你在遊戲中遭遇問題,請嘗試使用 x86 架構的 Java 啟動遊戲。\n\n如果你正在使用<b>高通</b>平臺,你可能需要安裝 <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">OpenGL 相容包</a>後才能進行遊戲。點擊連結前往 Microsoft Store 安裝相容包。
424423
# When translating the following string into non-Latin languages, please retain the English translation
425424
fatal.wine_warning=HMCL is running under Wine or one of its distributions.\nAs a cross-platform application, HMCL is best experienced natively on your host OS.\nPress "OK" to continue, but please note that some issues may arise.\n\n您目前正在使用 Wine 或其衍生版本執行 HMCL。\nHMCL 是跨平臺的,我們建議您直接在主機系統上執行。\n按下「確定」以繼續,但請注意,此操作可能會引發一些問題。

0 commit comments

Comments
 (0)