From e4cb5aca4ccc724ff96cb6cfc34574f76c8c449f Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 15:37:15 +0800 Subject: [PATCH 01/18] update --- .../java/org/jackhuang/hmcl/Launcher.java | 4 ++-- .../main/java/org/jackhuang/hmcl/Main.java | 2 +- .../hmcl/java/HMCLJavaRepository.java | 10 ++++----- .../org/jackhuang/hmcl/java/JavaManager.java | 22 +++++++++---------- .../org/jackhuang/hmcl/ui/Controllers.java | 4 ++-- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 8 +++---- .../hmcl/ui/main/JavaManagementPage.java | 2 +- .../jackhuang/hmcl/util/NativePatcher.java | 4 ++-- HMCL/src/main/resources/assets/HMCLauncher.sh | 4 ++-- .../resources/assets/lang/I18N.properties | 2 +- .../resources/assets/lang/I18N_es.properties | 2 +- .../resources/assets/lang/I18N_ru.properties | 2 +- .../resources/assets/lang/I18N_zh.properties | 2 +- .../assets/lang/I18N_zh_CN.properties | 2 +- HMCL/src/main/resources/assets/natives.json | 2 +- .../assets/openjfx-dependencies.json | 4 ++-- .../java/disco/DiscoFetchJavaListTask.java | 2 +- .../java/disco/DiscoJavaDistribution.java | 12 +++++----- .../hmcl/game/DefaultGameRepository.java | 2 +- .../jackhuang/hmcl/game/GameJavaVersion.java | 4 ++-- .../hmcl/game/JavaVersionConstraint.java | 2 +- .../hmcl/launch/DefaultLauncher.java | 12 +++++----- .../hmcl/util/platform/Architecture.java | 2 +- .../hmcl/util/platform/ManagedProcess.java | 2 +- .../hmcl/util/platform/OperatingSystem.java | 17 +++++++++++--- .../hmcl/util/platform/Platform.java | 18 +++++++++------ javafx.gradle.kts | 6 ++--- 27 files changed, 85 insertions(+), 70 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 30b4fb7ce59..6c970aef5ae 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -86,7 +86,7 @@ public void start(Stage primaryStage) { } // https://lapcatsoftware.com/articles/app-translocation.html - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS && ConfigHolder.isNewlyCreated() && System.getProperty("user.dir").startsWith("/private/var/folders/")) { if (showAlert(AlertType.WARNING, i18n("fatal.mac_app_translocation"), ButtonType.YES, ButtonType.NO) == ButtonType.NO) @@ -148,7 +148,7 @@ private static boolean isConfigInTempDir() { || configPath.startsWith("/var/cache/") || configPath.startsWith("/dev/shm/") || configPath.contains("/Trash/"); - } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { return configPath.startsWith("/var/folders/") || configPath.startsWith("/private/var/folders/") || configPath.startsWith("/tmp/") diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index c3ca12c4e50..9a25d8154da 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -67,7 +67,7 @@ public static void main(String[] args) { // This environment check will take ~300ms thread(Main::fixLetsEncrypt, "CA Certificate Check", true); - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) initIcon(); checkJavaFX(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index 75d8d3f890f..36c3152eb36 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -49,7 +49,7 @@ public HMCLJavaRepository(Path root) { } public Path getPlatformRoot(Platform platform) { - return root.resolve(platform.toString()); + return root.resolve(platform.getNormalizedName()); } @Override @@ -83,7 +83,7 @@ public boolean isInstalled(Platform platform, GameJavaVersion gameJavaVersion) { try { return JavaManager.getExecutable(javaDir).toRealPath(); } catch (IOException ignored) { - if (platform.getOperatingSystem() == OperatingSystem.OSX) { + if (platform.getOperatingSystem() == OperatingSystem.MACOS) { try { return JavaManager.getMacExecutable(javaDir).toRealPath(); } catch (IOException ignored1) { @@ -115,7 +115,7 @@ public Collection getAllJava(Platform platform) { try { executable = JavaManager.getExecutable(javaDir).toRealPath(); } catch (IOException e) { - if (platform.getOperatingSystem() == OperatingSystem.OSX) + if (platform.getOperatingSystem() == OperatingSystem.MACOS) executable = JavaManager.getMacExecutable(javaDir).toRealPath(); else throw e; @@ -149,7 +149,7 @@ public Task getDownloadJavaTask(DownloadProvider downloadProvider, try { executable = JavaManager.getExecutable(javaDir).toRealPath(); } catch (IOException e) { - if (platform.getOperatingSystem() == OperatingSystem.OSX) + if (platform.getOperatingSystem() == OperatingSystem.MACOS) executable = JavaManager.getMacExecutable(javaDir).toRealPath(); else throw e; @@ -189,7 +189,7 @@ public Task getInstallJavaTask(Platform platform, String name, Map< Path javaDir = getJavaDir(platform, name); return new JavaInstallTask(javaDir, update, archiveFile).thenApplyAsync(result -> { if (!result.getInfo().getPlatform().equals(platform)) - throw new IOException("Platform is mismatch: expected " + platform + " but got " + result.getInfo().getPlatform()); + throw new IOException("Platform is mismatch: expected " + platform.getNormalizedName() + " but got " + result.getInfo().getPlatform()); Path executable = javaDir.resolve("bin").resolve(platform.getOperatingSystem().getJavaExecutable()).toRealPath(); FileUtils.writeText(getManifestFile(platform, name), JsonUtils.GSON.toJson(result)); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java index fb5af2026ab..c8fc7ccdbc5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java @@ -75,7 +75,7 @@ public static String getMojangJavaPlatform(Platform platform) { } else if (Architecture.SYSTEM_ARCH == Architecture.X86_64) { return "linux"; } - } else if (platform.getOperatingSystem() == OperatingSystem.OSX) { + } else if (platform.getOperatingSystem() == OperatingSystem.MACOS) { if (Architecture.SYSTEM_ARCH == Architecture.X86_64) { return "mac-os"; } else if (Architecture.SYSTEM_ARCH == Architecture.ARM64) { @@ -113,7 +113,7 @@ public static boolean isCompatible(Platform platform) { if (Architecture.SYSTEM_ARCH == Architecture.X86_64) return architecture == Architecture.X86; break; - case OSX: + case MACOS: if (Architecture.SYSTEM_ARCH == Architecture.ARM64) return architecture == Architecture.X86_64; break; @@ -180,7 +180,7 @@ public static Task getAddJavaTask(Path binary) { return Task.supplyAsync("Get Java", () -> JavaManager.getJava(binary)) .thenApplyAsync(Schedulers.javafx(), javaRuntime -> { if (!JavaManager.isCompatible(javaRuntime.getPlatform())) { - throw new UnsupportedPlatformException("Incompatible platform: " + javaRuntime.getPlatform()); + throw new UnsupportedPlatformException("Incompatible platform: " + javaRuntime.getPlatform().getNormalizedName()); } String pathString = javaRuntime.getBinary().toString(); @@ -279,7 +279,7 @@ public static JavaRuntime findSuitableJava(Collection javaRuntimes, LibraryAnalyzer analyzer = version != null ? LibraryAnalyzer.analyze(version, gameVersion != null ? gameVersion.toString() : null) : null; boolean forceX86 = Architecture.SYSTEM_ARCH == Architecture.ARM64 - && (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + && (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) && (gameVersion == null || gameVersion.compareTo("1.6") < 0); GameJavaVersion suggestedJavaVersion = @@ -349,9 +349,9 @@ private static Map searchPotentialJavaExecutables() { searchAllJavaInRepository(javaRuntimes, Platform.WINDOWS_X86); } break; - case OSX: + case MACOS: if (Architecture.SYSTEM_ARCH == Architecture.ARM64) - searchAllJavaInRepository(javaRuntimes, Platform.OSX_X86_64); + searchAllJavaInRepository(javaRuntimes, Platform.MACOS_X86_64); break; } @@ -375,7 +375,7 @@ private static Map searchPotentialJavaExecutables() { searchAllJavaInDirectory(javaRuntimes, Paths.get("/usr/lib64/jvm")); // General locations searchAllJavaInDirectory(javaRuntimes, Paths.get(System.getProperty("user.home"), "/.sdkman/candidates/java")); // SDKMAN! break; - case OSX: + case MACOS: searchJavaInMacJavaVirtualMachines(javaRuntimes, Paths.get("/Library/Java/JavaVirtualMachines")); searchJavaInMacJavaVirtualMachines(javaRuntimes, Paths.get(System.getProperty("user.home"), "/Library/Java/JavaVirtualMachines")); tryAddJavaExecutable(javaRuntimes, Paths.get("/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java")); @@ -405,7 +405,7 @@ private static Map searchPotentialJavaExecutables() { .ifPresent(it -> searchAllOfficialJava(javaRuntimes, it, false)); } else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX && Architecture.SYSTEM_ARCH == Architecture.X86_64) { searchAllOfficialJava(javaRuntimes, Paths.get(System.getProperty("user.home"), ".minecraft/runtime"), false); - } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { searchAllOfficialJava(javaRuntimes, Paths.get(System.getProperty("user.home"), "Library/Application Support/minecraft/runtime"), false); } searchAllOfficialJava(javaRuntimes, CacheRepository.getInstance().getCacheDirectory().resolve("java"), true); @@ -548,7 +548,7 @@ private static void tryAddJavaInComponentDir(Map javaRuntimes } } - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { Path macPath = dir.resolve("jre.bundle/Contents/Home"); if (Files.exists(macPath)) { tryAddJavaHome(javaRuntimes, macPath); @@ -587,8 +587,8 @@ private static void searchAllOfficialJava(Map javaRuntimes, P } searchAllOfficialJava(javaRuntimes, directory, getMojangJavaPlatform(Platform.WINDOWS_X86), verify); } - } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX && Architecture.CURRENT_ARCH == Architecture.ARM64) { - searchAllOfficialJava(javaRuntimes, directory, getMojangJavaPlatform(Platform.OSX_X86_64), verify); + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS && Architecture.CURRENT_ARCH == Architecture.ARM64) { + searchAllOfficialJava(javaRuntimes, directory, getMojangJavaPlatform(Platform.MACOS_X86_64), verify); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 4372b81ce72..9fcfc7ef6d7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -293,8 +293,8 @@ public static void initialize(Stage stage) { if (!Architecture.SYSTEM_ARCH.isX86() && globalConfig().getPlatformPromptVersion() < 1) { Runnable continueAction = () -> globalConfig().setPlatformPromptVersion(1); - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX && Architecture.SYSTEM_ARCH == Architecture.ARM64) { - Controllers.dialog(i18n("fatal.unsupported_platform.osx_arm64"), null, MessageType.INFO, continueAction); + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS && Architecture.SYSTEM_ARCH == Architecture.ARM64) { + Controllers.dialog(i18n("fatal.unsupported_platform.macos_arm64"), null, MessageType.INFO, continueAction); } else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS && Architecture.SYSTEM_ARCH == Architecture.ARM64) { Controllers.dialog(i18n("fatal.unsupported_platform.windows_arm64"), null, MessageType.INFO, continueAction); } else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX && diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 7b6692823d4..7fd4aa2ee70 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -380,7 +380,7 @@ public static void openFolder(File file) { String openCommand; if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) openCommand = "explorer.exe"; - else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) openCommand = "/usr/bin/open"; else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() && new File("/usr/bin/xdg-open").exists()) openCommand = "/usr/bin/xdg-open"; @@ -433,7 +433,7 @@ public static void showFileInExplorer(Path file) { String[] openCommands; if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) openCommands = new String[]{"explorer.exe", "/select,", path}; - else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) openCommands = new String[]{"/usr/bin/open", "-R", path}; else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() && which("dbus-send") != null) openCommands = new String[]{ @@ -515,7 +515,7 @@ public static void openLink(String link) { try { java.awt.Desktop.getDesktop().browse(new URI(link)); } catch (Throwable e) { - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) try { Runtime.getRuntime().exec(new String[]{"/usr/bin/open", link}); } catch (IOException ex) { @@ -776,7 +776,7 @@ public static void setIcon(Stage stage) { String icon; if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { icon = "/assets/img/icon.png"; - } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { icon = "/assets/img/icon-mac.png"; } else { icon = "/assets/img/icon@4x.png"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java index 1375514c835..a7e4c6d2f06 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java @@ -154,7 +154,7 @@ private void onInstallArchive(Path file) { JavaInfo info = JavaInfo.fromArchive(tree); if (!JavaManager.isCompatible(info.getPlatform())) - throw new UnsupportedPlatformException(info.getPlatform().toString()); + throw new UnsupportedPlatformException(info.getPlatform().getNormalizedName()); return Pair.pair(tree.getRoot().getSubDirs().keySet().iterator().next(), info); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java index 211b7e274ee..4d33d52fd68 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java @@ -116,10 +116,10 @@ public static Version patchNative(DefaultGameRepository repository, if (settings.isNotPatchNatives()) return version; - if (arch.isX86() && (os == OperatingSystem.WINDOWS || os == OperatingSystem.LINUX || os == OperatingSystem.OSX)) + if (arch.isX86() && (os == OperatingSystem.WINDOWS || os == OperatingSystem.LINUX || os == OperatingSystem.MACOS)) return version; - if (arch == Architecture.ARM64 && (os == OperatingSystem.OSX || os == OperatingSystem.WINDOWS) + if (arch == Architecture.ARM64 && (os == OperatingSystem.MACOS || os == OperatingSystem.WINDOWS) && gameVersionNumber != null && gameVersionNumber.compareTo("1.19") >= 0) return version; diff --git a/HMCL/src/main/resources/assets/HMCLauncher.sh b/HMCL/src/main/resources/assets/HMCLauncher.sh index 5d490de80dd..a402158180f 100644 --- a/HMCL/src/main/resources/assets/HMCLauncher.sh +++ b/HMCL/src/main/resources/assets/HMCLauncher.sh @@ -14,7 +14,7 @@ case "$OSTYPE" in linux*) _HMCL_OS="linux";; darwin*) - _HMCL_OS="osx";; + _HMCL_OS="macos";; freebsd*) _HMCL_OS="freebsd";; msys*|cygwin*) @@ -159,7 +159,7 @@ case "$_HMCL_OS-$_HMCL_ARCH" in linux-x86|linux-x86_64|linux-arm64|linux-arm32|linux-riscv64|linux-loongarch64) _HMCL_JAVA_DOWNLOAD_PAGE="https://docs.hmcl.net/downloads/linux/$_HMCL_ARCH.html" ;; - osx-x86_64|osx-arm64) + macos-x86_64|macos-arm64) _HMCL_JAVA_DOWNLOAD_PAGE="https://docs.hmcl.net/downloads/macos/$_HMCL_ARCH.html" ;; esac diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index c30f0b2c6d8..e351d330fc7 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -400,7 +400,7 @@ fatal.unsupported_platform=Minecraft is not fully supported on your platform yet If you cannot launch Minecraft 1.17 and later, you can try switching the "Renderer" to "Software" in "Global/Instance-specific Settings → Advanced Settings" to use CPU rendering for better compatibility. fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher has provided support for the Loongson platform.\n\ If you encounter problems when playing a game, you can visit https://docs.hmcl.net/groups.html for help. -fatal.unsupported_platform.osx_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\ +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\ If you encounter problems when playing a game, launching the game with Java based on x86-64 architecture may offer better compatibility. 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\ \n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 09a3b05c5e3..ad00e038b6f 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -401,7 +401,7 @@ fatal.unsupported_platform=Minecraft aún no es totalmente compatible con tu pla Si no puedes iniciar Minecraft 1.17 y versiones posteriores, puedes probar a cambiar el «Renderizador» a «Software» en «Config. Global/Específica de instancia → Configuración avanzada» para utilizar el renderizado de la CPU y mejorar la compatibilidad. fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher ha prestado apoyo a la plataforma Loongson.\n\ Si tienes problemas al jugar, puedes visitar https://docs.hmcl.net/groups.html para obtener ayuda. -fatal.unsupported_platform.osx_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\ +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\ Si tienes problemas al jugar a un juego, ejecutarlo con Java de arquitectura x86-64 puede tener mejor compatibilidad. 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\ \n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 9f695c52968..fbb09efa6f0 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -399,7 +399,7 @@ fatal.unsupported_platform=Minecraft еще не полностью поддер Если вы не можете запустить Minecraft 1.17 и более поздние версии, попробуйте переключить «Рендерер» на «Программный» в разделе «Глобальные настройки / Раздельные настройки для сборки → Расширенные настройки», чтобы использовать рендеринг процессора для лучшей совместимости. fatal.unsupported_platform.loongarch=Лаунчер обеспечил поддержку платформы Loongson.\n\ Если у вас возникнут проблемы во время игры, вы можете обратиться за помощью на сайт https://docs.hmcl.net/groups.html. -fatal.unsupported_platform.osx_arm64=Лаунчер обеспечил поддержку платформы Apple silicon, используя родную ARM Java для запуска игр, чтобы получить более плавный игровой опыт.\n\ +fatal.unsupported_platform.macos_arm64=Лаунчер обеспечил поддержку платформы Apple silicon, используя родную ARM Java для запуска игр, чтобы получить более плавный игровой опыт.\n\ Если вы столкнулись с проблемами во время игры, запуск игры с Java на базе архитектуры x86-64 может обеспечить лучшую совместимость. fatal.unsupported_platform.windows_arm64=Лаунчер обеспечил нативную поддержку платформы Windows на архитектуре Arm. Если у вам возникли проблемы во время игры, попробуйте запустить игру с Java на базе архитектуры x86.\n\ \n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index ee282f9d053..49483be093a 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -379,7 +379,7 @@ fatal.samba=如果您正在透過 Samba 共亯的目錄中開啟 Hello Minecraft fatal.illegal_char=由於您的使用者目錄路徑中存在無效字元『=』,您將無法使用外部登入帳戶以及離線登入更換外觀功能。 fatal.unsupported_platform=Minecraft 尚未你您的平臺提供完善支援,所以可能影響遊戲體驗或無法啟動遊戲。\n若無法啟動 Minecraft 1.17 及更高版本,可以嘗試在「(全域/實例特定) 遊戲設定 → 進階設定 → 除錯選項」中將「繪製器」切換為「軟繪製器」,以獲得更好的相容性。 fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher 已為龍芯提供支援。\n如果遇到問題,你可以點擊右上角幫助按鈕進行求助。 -fatal.unsupported_platform.osx_arm64=Hello Minecraft! Launcher 已為 Apple Silicon 平臺提供支援,使用 ARM 原生 Java 啟動遊戲以獲得更流暢的遊戲體驗。\n如果你在遊戲中遭遇問題,使用 x86-64 架構的 Java 啟動遊戲可能有更好的相容性。 +fatal.unsupported_platform.macos_arm64=Hello Minecraft! Launcher 已為 Apple Silicon 平臺提供支援,使用 ARM 原生 Java 啟動遊戲以獲得更流暢的遊戲體驗。\n如果你在遊戲中遭遇問題,使用 x86-64 架構的 Java 啟動遊戲可能有更好的相容性。 fatal.unsupported_platform.windows_arm64=Hello Minecraft! Launcher 已為 Windows on Arm 平臺提供原生支援。如果你在遊戲中遭遇問題,請嘗試使用 x86 架構的 Java 啟動遊戲。\n\n如果你正在使用高通平臺,你可能需要安裝 OpenGL 相容包後才能進行遊戲。點擊連結前往 Microsoft Store 安裝相容包。 feedback=回報 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 81eb873921a..f61468a7ce3 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -388,7 +388,7 @@ fatal.samba=如果你正在通过 Samba 共享的文件夹中运行 Hello Minecr fatal.illegal_char=由于你的用户文件夹路径中存在非法字符“=”,你将无法使用外置登录账户以及离线登录更换皮肤功能。\n你可以访问 https://docs.hmcl.net/help.html 页面寻求帮助。 fatal.unsupported_platform=Minecraft 尚未对你的平台提供完善支持,所以可能影响游戏体验或无法启动游戏。\n若无法启动 Minecraft 1.17 及更高版本,可以尝试在“(全局/版本特定) 游戏设置 → 高级设置 → 调试选项”中将“渲染器”切换为“软渲染器”,以获得更好的兼容性。\n如遇到问题,你可以点击右上角帮助按钮进行求助。 fatal.unsupported_platform.loongarch=Hello Minecraft! Launcher 已为龙芯提供支持。\n如果遇到问题,你可以点击右上角帮助按钮进行求助。 -fatal.unsupported_platform.osx_arm64=Hello Minecraft! Launcher 已为 Apple Silicon 平台提供支持,使用 ARM 原生 Java 启动游戏以获得更流畅的游戏体验。\n如果你在游戏中遇到问题,使用 x86-64 架构的 Java 启动游戏可能有更好的兼容性。\n如遇到问题,你可以点击右上角帮助按钮进行求助。 +fatal.unsupported_platform.macos_arm64=Hello Minecraft! Launcher 已为 Apple Silicon 平台提供支持,使用 ARM 原生 Java 启动游戏以获得更流畅的游戏体验。\n如果你在游戏中遇到问题,使用 x86-64 架构的 Java 启动游戏可能有更好的兼容性。\n如遇到问题,你可以点击右上角帮助按钮进行求助。 fatal.unsupported_platform.windows_arm64=Hello Minecraft! Launcher 已为 Windows on Arm 平台提供原生支持。如果你在游戏中遇到问题,请尝试使用 x86 架构的 Java 启动游戏。\n如果你正在使用 高通 平台,你可能需要安装 OpenGL 兼容包 后才能进行游戏。点击链接前往 Microsoft Store 安装兼容包。\n如遇到问题,你可以点击右上角帮助按钮进行求助。 feedback=反馈 diff --git a/HMCL/src/main/resources/assets/natives.json b/HMCL/src/main/resources/assets/natives.json index 002316a7696..39a12bf9333 100644 --- a/HMCL/src/main/resources/assets/natives.json +++ b/HMCL/src/main/resources/assets/natives.json @@ -4411,7 +4411,7 @@ } } }, - "osx-arm64": { + "macos-arm64": { "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3:natives": { "name": "org.glavo.hmcl:lwjgl2-natives:2.9.3-rc1", "downloads": { diff --git a/HMCL/src/main/resources/assets/openjfx-dependencies.json b/HMCL/src/main/resources/assets/openjfx-dependencies.json index f0f732944aa..063b4ada63b 100644 --- a/HMCL/src/main/resources/assets/openjfx-dependencies.json +++ b/HMCL/src/main/resources/assets/openjfx-dependencies.json @@ -77,7 +77,7 @@ "sha1": "0bf7380823bb8c420dd41837d2c71087b8953ec1" } ], - "osx-x86_64": [ + "macos-x86_64": [ { "module": "javafx.base", "groupId": "org.openjfx", @@ -103,7 +103,7 @@ "sha1": "b7786b1b63e741c0e234829825fae5fef9d96c31" } ], - "osx-arm64": [ + "macos-arm64": [ { "module": "javafx.base", "groupId": "org.openjfx", diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java index df178fe5764..8c77f4c5119 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java @@ -38,7 +38,7 @@ public final class DiscoFetchJavaListTask extends Task getGameVersion(Version version) { @Override public File getNativeDirectory(String id, Platform platform) { - return new File(getVersionRoot(id), "natives-" + platform); + return new File(getVersionRoot(id), "natives-" + platform.getNormalizedName()); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java index e02f9eafe0d..e4a4f6417f9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java @@ -73,13 +73,13 @@ public static List getSupportedVersions(Platform platform) { switch (operatingSystem) { case WINDOWS: case LINUX: - case OSX: + case MACOS: return Arrays.asList(JAVA_8, JAVA_16, JAVA_17, JAVA_21); } } else if (architecture == Architecture.ARM64) { switch (operatingSystem) { case WINDOWS: - case OSX: + case MACOS: return Arrays.asList(JAVA_17, JAVA_21); } } 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 ed1889fccc4..589f9ef807e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -135,7 +135,7 @@ protected boolean appliesToVersionImpl(GameVersionNumber gameVersionNumber, @Nul if (java == null || java.getArchitecture() != Architecture.ARM64) return false; - if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) return gameVersionNumber.compareTo("1.6") < 0; return false; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java index 22e42e3db33..9863b309fe6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java @@ -73,14 +73,14 @@ private Command generateCommandLine(File nativeFolder) throws IOException { case HIGH: if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { // res.add("cmd", "/C", "start", "unused title", "/B", "/high"); - } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { res.add("nice", "-n", "-5"); } break; case ABOVE_NORMAL: if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { // res.add("cmd", "/C", "start", "unused title", "/B", "/abovenormal"); - } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { res.add("nice", "-n", "-1"); } break; @@ -90,14 +90,14 @@ private Command generateCommandLine(File nativeFolder) throws IOException { case BELOW_NORMAL: if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { // res.add("cmd", "/C", "start", "unused title", "/B", "/belownormal"); - } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { res.add("nice", "-n", "1"); } break; case LOW: if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { // res.add("cmd", "/C", "start", "unused title", "/B", "/low"); - } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { res.add("nice", "-n", "5"); } break; @@ -178,7 +178,7 @@ private Command generateCommandLine(File nativeFolder) throws IOException { res.addDefault("-Dminecraft.client.jar=", repository.getVersionJar(version).toString()); - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { res.addDefault("-Xdock:name=", "Minecraft " + version.getId()); repository.getAssetObject(version.getId(), version.getAssetIndex().getId(), "icons/minecraft.icns") .ifPresent(minecraftIcns -> { @@ -264,7 +264,7 @@ private Command generateCommandLine(File nativeFolder) throws IOException { // Here is a workaround for this issue: https://github.com/HMCL-dev/HMCL/issues/1141. String nativeFolderPath = nativeFolder.getAbsolutePath(); Path tempNativeFolder = null; - if ((OperatingSystem.CURRENT_OS == OperatingSystem.LINUX || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + if ((OperatingSystem.CURRENT_OS == OperatingSystem.LINUX || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) && !StringUtils.isASCII(nativeFolderPath) && gameVersion.isPresent() && GameVersionNumber.compare(gameVersion.get(), "1.19") < 0) { tempNativeFolder = Paths.get("/", "tmp", "hmcl-natives-" + UUID.randomUUID()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java index a60553575c8..018cb1f3156 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java @@ -201,7 +201,7 @@ public static Architecture parseArchName(String value) { sysArch = parseArchName(processorIdentifier.substring(0, idx)); } } - } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) { + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) { if (CURRENT_ARCH == X86_64) { try { Process process = Runtime.getRuntime().exec(new String[]{"/usr/sbin/sysctl", "-n", "sysctl.proc_translated"}); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java index 07ca5a51655..d2766b52b77 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java @@ -107,7 +107,7 @@ public long getPID() throws UnsupportedOperationException { // However, this method is supplied since Java 9. // So, there is no ways to get the pid. throw new UnsupportedOperationException("Cannot get the pid of a Process on Java 8 on Windows."); - } else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX || OperatingSystem.CURRENT_OS.isLinuxOrBSD()) { + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS || OperatingSystem.CURRENT_OS.isLinuxOrBSD()) { // On Linux or Mac, we can get field UnixProcess.pid field to get the pid. // All the Java version is accepted. // See https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 334500bd1cc..e18c11e9bff 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -53,7 +53,7 @@ public enum OperatingSystem { /** * Mac OS X. */ - OSX("osx"), + MACOS("osx", "macos"), /** * FreeBSD. */ @@ -64,15 +64,26 @@ public enum OperatingSystem { UNKNOWN("universal"); private final String checkedName; + private final String normalizedName; OperatingSystem(String checkedName) { this.checkedName = checkedName; + this.normalizedName = checkedName; + } + + OperatingSystem(String checkedName, String normalizedName) { + this.checkedName = checkedName; + this.normalizedName = normalizedName; } public String getCheckedName() { return checkedName; } + public String getNormalizedName() { + return normalizedName; + } + public boolean isLinuxOrBSD() { return this == LINUX || this == FREEBSD; } @@ -260,7 +271,7 @@ public static OperatingSystem parseOSName(String name) { name = name.trim().toLowerCase(Locale.ROOT); if (name.contains("mac") || name.contains("darwin") || name.contains("osx")) - return OSX; + return MACOS; else if (name.contains("win")) return WINDOWS; else if (name.contains("solaris") || name.contains("linux") || name.contains("unix") || name.contains("sunos")) @@ -356,7 +367,7 @@ public static Path getWorkingDirectory(String folder) { case WINDOWS: String appdata = System.getenv("APPDATA"); return Paths.get(appdata == null ? home : appdata, "." + folder).toAbsolutePath(); - case OSX: + case MACOS: return Paths.get(home, "Library", "Application Support", folder).toAbsolutePath(); default: return Paths.get(home, folder).toAbsolutePath(); 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 7ad533ceec7..5abc24611ad 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 @@ -12,14 +12,14 @@ public final class Platform { 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 MACOS_X86_64 = new Platform(OperatingSystem.MACOS, Architecture.X86_64); + public static final Platform MACOS_ARM64 = new Platform(OperatingSystem.MACOS, 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() { - return Architecture.SYSTEM_ARCH.isX86() || SYSTEM_PLATFORM == OSX_ARM64 || SYSTEM_PLATFORM == WINDOWS_ARM64; + return Architecture.SYSTEM_ARCH.isX86() || SYSTEM_PLATFORM == MACOS_ARM64 || SYSTEM_PLATFORM == WINDOWS_ARM64; } private final OperatingSystem os; @@ -43,8 +43,8 @@ public static Platform getPlatform(OperatingSystem os, Architecture arch) { switch (os) { case WINDOWS: return WINDOWS_X86_64; - case OSX: - return OSX_X86_64; + case MACOS: + return MACOS_X86_64; case LINUX: return LINUX_X86_64; } @@ -52,8 +52,8 @@ public static Platform getPlatform(OperatingSystem os, Architecture arch) { switch (os) { case WINDOWS: return WINDOWS_ARM64; - case OSX: - return OSX_ARM64; + case MACOS: + return MACOS_ARM64; case LINUX: return LINUX_ARM64; } @@ -91,6 +91,10 @@ public boolean equals(Object o) { return os == platform.os && arch == platform.arch; } + public String getNormalizedName() { + return os.getNormalizedName() + "-" + arch.getCheckedName(); + } + @Override public String toString() { return os.getCheckedName() + "-" + arch.getCheckedName(); diff --git a/javafx.gradle.kts b/javafx.gradle.kts index 1cae7cc10fd..83f5bd4a167 100644 --- a/javafx.gradle.kts +++ b/javafx.gradle.kts @@ -23,8 +23,8 @@ val jfxPlatforms = listOf( Platform("windows-x86", "win-x86", version = oldJfxVersion), Platform("windows-x86_64", "win"), Platform("windows-arm64", "win", groupId = "org.glavo.hmcl.openjfx", version = "18.0.2+1-arm64"), - Platform("osx-x86_64", "mac", version = oldJfxVersion), - Platform("osx-arm64", "mac-aarch64", version = oldJfxVersion), + Platform("macos-x86_64", "mac", version = oldJfxVersion), + Platform("macos-arm64", "mac-aarch64", version = oldJfxVersion), Platform("linux-x86_64", "linux"), Platform("linux-arm32", "linux-arm32-monocle", version = oldJfxVersion), Platform("linux-arm64", "linux-aarch64", version = oldJfxVersion), @@ -46,7 +46,7 @@ if (!jfxInClasspath && JavaVersion.current() >= JavaVersion.VERSION_11) { val os = System.getProperty("os.name").lowercase().let { osName -> when { osName.contains("win") -> "windows" - osName.contains("mac") -> "osx" + osName.contains("mac") -> "macos" osName.contains("linux") || osName.contains("unix") -> "linux" osName.contains("freebsd") -> "freebsd" else -> null From 01bbadaf48df7daaa0a6b03a1b11453c8f002af0 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 15:52:43 +0800 Subject: [PATCH 02/18] update --- .../org/jackhuang/hmcl/java/HMCLJavaRepository.java | 4 ++-- .../java/org/jackhuang/hmcl/java/JavaManager.java | 2 +- .../jackhuang/hmcl/ui/main/JavaManagementPage.java | 2 +- .../download/java/disco/DiscoFetchJavaListTask.java | 13 ++----------- .../jackhuang/hmcl/game/DefaultGameRepository.java | 2 +- .../hmcl/util/platform/OperatingSystem.java | 13 +------------ .../org/jackhuang/hmcl/util/platform/Platform.java | 4 ---- 7 files changed, 8 insertions(+), 32 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index 36c3152eb36..dce14ee13fd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -49,7 +49,7 @@ public HMCLJavaRepository(Path root) { } public Path getPlatformRoot(Platform platform) { - return root.resolve(platform.getNormalizedName()); + return root.resolve(platform.toString()); } @Override @@ -189,7 +189,7 @@ public Task getInstallJavaTask(Platform platform, String name, Map< Path javaDir = getJavaDir(platform, name); return new JavaInstallTask(javaDir, update, archiveFile).thenApplyAsync(result -> { if (!result.getInfo().getPlatform().equals(platform)) - throw new IOException("Platform is mismatch: expected " + platform.getNormalizedName() + " but got " + result.getInfo().getPlatform()); + throw new IOException("Platform is mismatch: expected " + platform.toString() + " but got " + result.getInfo().getPlatform().toString()); Path executable = javaDir.resolve("bin").resolve(platform.getOperatingSystem().getJavaExecutable()).toRealPath(); FileUtils.writeText(getManifestFile(platform, name), JsonUtils.GSON.toJson(result)); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java index c8fc7ccdbc5..5c56d4b9be9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java @@ -180,7 +180,7 @@ public static Task getAddJavaTask(Path binary) { return Task.supplyAsync("Get Java", () -> JavaManager.getJava(binary)) .thenApplyAsync(Schedulers.javafx(), javaRuntime -> { if (!JavaManager.isCompatible(javaRuntime.getPlatform())) { - throw new UnsupportedPlatformException("Incompatible platform: " + javaRuntime.getPlatform().getNormalizedName()); + throw new UnsupportedPlatformException("Incompatible platform: " + javaRuntime.getPlatform()); } String pathString = javaRuntime.getBinary().toString(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java index a7e4c6d2f06..1375514c835 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java @@ -154,7 +154,7 @@ private void onInstallArchive(Path file) { JavaInfo info = JavaInfo.fromArchive(tree); if (!JavaManager.isCompatible(info.getPlatform())) - throw new UnsupportedPlatformException(info.getPlatform().getNormalizedName()); + throw new UnsupportedPlatformException(info.getPlatform().toString()); return Pair.pair(tree.getRoot().getSubDirs().keySet().iterator().next(), info); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java index 8c77f4c5119..78449f01f5d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/disco/DiscoFetchJavaListTask.java @@ -23,7 +23,6 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; -import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.Platform; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -37,14 +36,6 @@ public final class DiscoFetchJavaListTask extends Task fetchPackagesTask; @@ -55,8 +46,8 @@ public DiscoFetchJavaListTask(DownloadProvider downloadProvider, DiscoJavaDistri HashMap params = new HashMap<>(); params.put("distribution", distribution.getApiParameter()); - params.put("operating_system", getOperatingSystemName(platform.getOperatingSystem())); - params.put("architecture", getArchitectureName(platform.getArchitecture())); + params.put("operating_system", platform.getOperatingSystem().getCheckedName()); + params.put("architecture", platform.getArchitecture().getCheckedName()); params.put("archive_type", archiveType); params.put("directly_downloadable", "true"); if (platform.getOperatingSystem() == OperatingSystem.LINUX) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java index a25f7c1590f..91c7e0adbf9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java @@ -144,7 +144,7 @@ public Optional getGameVersion(Version version) { @Override public File getNativeDirectory(String id, Platform platform) { - return new File(getVersionRoot(id), "natives-" + platform.getNormalizedName()); + return new File(getVersionRoot(id), "natives-" + platform); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index e18c11e9bff..d1571848afe 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -53,7 +53,7 @@ public enum OperatingSystem { /** * Mac OS X. */ - MACOS("osx", "macos"), + MACOS("macos"), /** * FreeBSD. */ @@ -64,26 +64,15 @@ public enum OperatingSystem { UNKNOWN("universal"); private final String checkedName; - private final String normalizedName; OperatingSystem(String checkedName) { this.checkedName = checkedName; - this.normalizedName = checkedName; - } - - OperatingSystem(String checkedName, String normalizedName) { - this.checkedName = checkedName; - this.normalizedName = normalizedName; } public String getCheckedName() { return checkedName; } - public String getNormalizedName() { - return normalizedName; - } - public boolean isLinuxOrBSD() { return this == LINUX || this == FREEBSD; } 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 5abc24611ad..f79278c192b 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 @@ -91,10 +91,6 @@ public boolean equals(Object o) { return os == platform.os && arch == platform.arch; } - public String getNormalizedName() { - return os.getNormalizedName() + "-" + arch.getCheckedName(); - } - @Override public String toString() { return os.getCheckedName() + "-" + arch.getCheckedName(); From 6ee8987bf250dcecd15de40e7864875c59d30fdd Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 15:53:24 +0800 Subject: [PATCH 03/18] update --- .../main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index dce14ee13fd..a143062f9fe 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -189,7 +189,7 @@ public Task getInstallJavaTask(Platform platform, String name, Map< Path javaDir = getJavaDir(platform, name); return new JavaInstallTask(javaDir, update, archiveFile).thenApplyAsync(result -> { if (!result.getInfo().getPlatform().equals(platform)) - throw new IOException("Platform is mismatch: expected " + platform.toString() + " but got " + result.getInfo().getPlatform().toString()); + throw new IOException("Platform is mismatch: expected " + platform + " but got " + result.getInfo().getPlatform()); Path executable = javaDir.resolve("bin").resolve(platform.getOperatingSystem().getJavaExecutable()).toRealPath(); FileUtils.writeText(getManifestFile(platform, name), JsonUtils.GSON.toJson(result)); From e86660e315642d426be3b74b8d9479901bae1995 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:02:08 +0800 Subject: [PATCH 04/18] update --- .../jackhuang/hmcl/game/OSRestriction.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index f2a5ae399ba..bd7ca359626 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -17,10 +17,13 @@ */ package org.jackhuang.hmcl.game; +import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.OperatingSystem; +import java.lang.reflect.Type; import java.util.regex.Pattern; /** @@ -29,6 +32,7 @@ */ public final class OSRestriction { + @JsonAdapter(OSNameSerializer.class) private final OperatingSystem name; private final String version; private final String arch; @@ -78,4 +82,19 @@ public boolean allow() { return true; } + private static final class OSNameSerializer implements JsonSerializer, JsonDeserializer { + + @Override + public OperatingSystem deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) + return OperatingSystem.parseOSName(json.getAsString()); + else + return OperatingSystem.UNKNOWN; + } + + @Override + public JsonElement serialize(OperatingSystem src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src == OperatingSystem.MACOS ? "osx" : src.getCheckedName()); + } + } } From d12aa906d8a5e3ca057463d7a3ee19727b2fab6f Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:05:32 +0800 Subject: [PATCH 05/18] update --- .../src/main/java/org/jackhuang/hmcl/game/OSRestriction.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index bd7ca359626..e11a0b2bf06 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -89,11 +89,13 @@ public OperatingSystem deserialize(JsonElement json, Type typeOfT, JsonDeseriali if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) return OperatingSystem.parseOSName(json.getAsString()); else - return OperatingSystem.UNKNOWN; + return null; } @Override public JsonElement serialize(OperatingSystem src, Type typeOfSrc, JsonSerializationContext context) { + if (src == null || src == OperatingSystem.UNKNOWN) + return JsonNull.INSTANCE; return new JsonPrimitive(src == OperatingSystem.MACOS ? "osx" : src.getCheckedName()); } } From e5c01a45e10cd6f4bc7adf89d023eb26661a6af4 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:09:04 +0800 Subject: [PATCH 06/18] update --- .../src/main/java/org/jackhuang/hmcl/game/OSRestriction.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index e11a0b2bf06..9ed15478462 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -68,7 +68,9 @@ public String getArch() { } public boolean allow() { - if (name != OperatingSystem.UNKNOWN && name != OperatingSystem.CURRENT_OS + if (name != null + && name != OperatingSystem.UNKNOWN + && name != OperatingSystem.CURRENT_OS && !(name == OperatingSystem.LINUX && OperatingSystem.CURRENT_OS.isLinuxOrBSD())) return false; From fc985abcdb28ee04c6208e8bf7af47489b84272a Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:12:21 +0800 Subject: [PATCH 07/18] update --- .../src/main/java/org/jackhuang/hmcl/game/OSRestriction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index 9ed15478462..87c78477483 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -91,7 +91,7 @@ public OperatingSystem deserialize(JsonElement json, Type typeOfT, JsonDeseriali if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) return OperatingSystem.parseOSName(json.getAsString()); else - return null; + return OperatingSystem.UNKNOWN; } @Override From 5c27dfcc6a1bfd43b563a0b6e418542509a0ddfb Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:30:43 +0800 Subject: [PATCH 08/18] Update HMCLJavaRepository --- .../hmcl/java/HMCLJavaRepository.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index a143062f9fe..b229aac9502 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -98,14 +98,8 @@ public boolean isInstalled(Platform platform, GameJavaVersion gameJavaVersion) { return getJavaExecutable(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent()); } - @Override - public Collection getAllJava(Platform platform) { - Path root = getPlatformRoot(platform); - if (!Files.isDirectory(root)) - return Collections.emptyList(); - - ArrayList list = new ArrayList<>(); - try (DirectoryStream stream = Files.newDirectoryStream(root)) { + private static void getAllJava(List list, Platform platform, Path platformRoot, boolean isManaged) { + try (DirectoryStream stream = Files.newDirectoryStream(platformRoot)) { for (Path file : stream) { try { String name = file.getFileName().toString(); @@ -127,7 +121,7 @@ public Collection getAllJava(Platform platform) { manifest = JsonUtils.fromJsonFully(input, JavaManifest.class); } - list.add(JavaRuntime.of(executable, manifest.getInfo(), true)); + list.add(JavaRuntime.of(executable, manifest.getInfo(), isManaged)); } } } catch (Throwable e) { @@ -137,6 +131,23 @@ public Collection getAllJava(Platform platform) { } catch (IOException ignored) { } + } + + @Override + public Collection getAllJava(Platform platform) { + Path platformRoot = getPlatformRoot(platform); + if (!Files.isDirectory(platformRoot)) + return Collections.emptyList(); + + ArrayList list = new ArrayList<>(); + + getAllJava(list, platform, platformRoot, true); + if (platform.getOperatingSystem() == OperatingSystem.MACOS) { + platformRoot = root.resolve("osx-" + platform.getArchitecture().getCheckedName()); + if (Files.isDirectory(platformRoot)) + getAllJava(list, platform, platformRoot, false); + } + return list; } From bea1055ee7cb5f98fbaa0a309b9dd29194127e80 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:37:26 +0800 Subject: [PATCH 09/18] update --- .../jackhuang/hmcl/game/OSRestriction.java | 49 +++++++------------ 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index 87c78477483..18e702856eb 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -17,13 +17,10 @@ */ package org.jackhuang.hmcl.game; -import com.google.gson.*; -import com.google.gson.annotations.JsonAdapter; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.OperatingSystem; -import java.lang.reflect.Type; import java.util.regex.Pattern; /** @@ -32,8 +29,7 @@ */ public final class OSRestriction { - @JsonAdapter(OSNameSerializer.class) - private final OperatingSystem name; + private final String name; private final String version; private final String arch; @@ -41,21 +37,27 @@ public OSRestriction() { this(OperatingSystem.UNKNOWN); } - public OSRestriction(OperatingSystem name) { - this(name, null); + public OSRestriction(OperatingSystem os) { + this(os, null); } - public OSRestriction(OperatingSystem name, String version) { - this(name, version, null); + public OSRestriction(OperatingSystem os, String version) { + this(os, version, null); } - public OSRestriction(OperatingSystem name, String version, String arch) { + public OSRestriction(OperatingSystem os, String version, String arch) { + this.name = os.getCheckedName(); + this.version = version; + this.arch = arch; + } + + public OSRestriction(String name, String version, String arch) { this.name = name; this.version = version; this.arch = arch; } - public OperatingSystem getName() { + public String getName() { return name; } @@ -68,10 +70,10 @@ public String getArch() { } public boolean allow() { - if (name != null - && name != OperatingSystem.UNKNOWN - && name != OperatingSystem.CURRENT_OS - && !(name == OperatingSystem.LINUX && OperatingSystem.CURRENT_OS.isLinuxOrBSD())) + OperatingSystem os = OperatingSystem.parseOSName(name); + if (os != OperatingSystem.UNKNOWN + && os != OperatingSystem.CURRENT_OS + && !(os == OperatingSystem.LINUX && OperatingSystem.CURRENT_OS.isLinuxOrBSD())) return false; if (version != null) @@ -84,21 +86,4 @@ public boolean allow() { return true; } - private static final class OSNameSerializer implements JsonSerializer, JsonDeserializer { - - @Override - public OperatingSystem deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) - return OperatingSystem.parseOSName(json.getAsString()); - else - return OperatingSystem.UNKNOWN; - } - - @Override - public JsonElement serialize(OperatingSystem src, Type typeOfSrc, JsonSerializationContext context) { - if (src == null || src == OperatingSystem.UNKNOWN) - return JsonNull.INSTANCE; - return new JsonPrimitive(src == OperatingSystem.MACOS ? "osx" : src.getCheckedName()); - } - } } From c629490a44e5bf3bd2bd3611ac006b974c249620 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:41:17 +0800 Subject: [PATCH 10/18] update --- .../java/org/jackhuang/hmcl/util/platform/OperatingSystem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index d1571848afe..6d0e507d31d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -51,7 +51,7 @@ public enum OperatingSystem { */ LINUX("linux"), /** - * Mac OS X. + * macOS. */ MACOS("macos"), /** From c077fb70f75146580fe291a07e0416d8b450c527 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 16:59:36 +0800 Subject: [PATCH 11/18] update --- .../src/main/java/org/jackhuang/hmcl/game/OSRestriction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index 18e702856eb..9b907f5bc35 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -46,7 +46,7 @@ public OSRestriction(OperatingSystem os, String version) { } public OSRestriction(OperatingSystem os, String version, String arch) { - this.name = os.getCheckedName(); + this.name = os == OperatingSystem.MACOS ? "osx" : os.getCheckedName(); this.version = version; this.arch = arch; } From 86e73d3ee31f001eebe919ce7502f54085ea855b Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 17:27:28 +0800 Subject: [PATCH 12/18] update --- .../java/org/jackhuang/hmcl/game/Library.java | 8 ++++---- .../org/jackhuang/hmcl/game/OSRestriction.java | 2 +- .../hmcl/game/tlauncher/TLauncherLibrary.java | 4 ++-- .../hmcl/util/platform/OperatingSystem.java | 15 +++++++++++++-- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java index 4325eac4723..045e08cb13d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java @@ -46,7 +46,7 @@ public class Library implements Comparable, Validation { private final String url; private final LibrariesDownloadInfo downloads; private final ExtractRules extract; - private final Map natives; + private final Map natives; private final List rules; private final List checksums; @@ -64,7 +64,7 @@ public Library(Artifact artifact, String url, LibrariesDownloadInfo downloads) { this(artifact, url, downloads, null, null, null, null, null, null); } - public Library(Artifact artifact, String url, LibrariesDownloadInfo downloads, List checksums, ExtractRules extract, Map natives, List rules, String hint, String filename) { + public Library(Artifact artifact, String url, LibrariesDownloadInfo downloads, List checksums, ExtractRules extract, Map natives, List rules, String hint, String filename) { this.artifact = artifact; this.url = url; this.downloads = downloads; @@ -94,8 +94,8 @@ public String getVersion() { public String getClassifier() { if (artifact.getClassifier() == null) - if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS)) - return natives.get(OperatingSystem.CURRENT_OS).replace("${arch}", Architecture.SYSTEM_ARCH.getBits().getBit()); + if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS.getOfficialName())) + return natives.get(OperatingSystem.CURRENT_OS.getOfficialName()).replace("${arch}", Architecture.SYSTEM_ARCH.getBits().getBit()); else return null; else diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index 9b907f5bc35..e141ad0d88b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -46,7 +46,7 @@ public OSRestriction(OperatingSystem os, String version) { } public OSRestriction(OperatingSystem os, String version, String arch) { - this.name = os == OperatingSystem.MACOS ? "osx" : os.getCheckedName(); + this.name = os.getOfficialName(); this.version = version; this.arch = arch; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java index 665f7ea2b45..dadcb0ded07 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java @@ -36,11 +36,11 @@ public class TLauncherLibrary { @SerializedName("classifies") // stupid typo made by TLauncher private final Map classifiers; private final ExtractRules extract; - private final Map natives; + private final Map natives; private final List rules; private final List checksums; - public TLauncherLibrary(Artifact name, String url, LibraryDownloadInfo artifact, Map classifiers, ExtractRules extract, Map natives, List rules, List checksums) { + public TLauncherLibrary(Artifact name, String url, LibraryDownloadInfo artifact, Map classifiers, ExtractRules extract, Map natives, List rules, List checksums) { this.name = name; this.url = url; this.artifact = artifact; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 6d0e507d31d..dbae731b71f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -53,26 +53,37 @@ public enum OperatingSystem { /** * macOS. */ - MACOS("macos"), + MACOS("macos", "osx"), /** * FreeBSD. */ - FREEBSD("freebsd"), + FREEBSD("freebsd", "linux"), /** * Unknown operating system. */ UNKNOWN("universal"); private final String checkedName; + private final String officialName; OperatingSystem(String checkedName) { this.checkedName = checkedName; + this.officialName = checkedName; + } + + OperatingSystem(String checkedName, String officialName) { + this.checkedName = checkedName; + this.officialName = officialName; } public String getCheckedName() { return checkedName; } + public String getOfficialName() { + return officialName; + } + public boolean isLinuxOrBSD() { return this == LINUX || this == FREEBSD; } From 7ca2c3607c6100425a7ba393106d74651aab6084 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 17:37:32 +0800 Subject: [PATCH 13/18] update --- .../main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index b229aac9502..3fee6ee7747 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -143,7 +143,7 @@ public Collection getAllJava(Platform platform) { getAllJava(list, platform, platformRoot, true); if (platform.getOperatingSystem() == OperatingSystem.MACOS) { - platformRoot = root.resolve("osx-" + platform.getArchitecture().getCheckedName()); + platformRoot = root.resolve(platform.getOperatingSystem().getOfficialName() + "-" + platform.getArchitecture().getCheckedName()); if (Files.isDirectory(platformRoot)) getAllJava(list, platform, platformRoot, false); } From d18d8e6b171f3ad9344ed8836de48942f7e344b8 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 17:38:11 +0800 Subject: [PATCH 14/18] fix checkstyle --- .../java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java | 1 - 1 file changed, 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java index dadcb0ded07..8a6bcf42997 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/tlauncher/TLauncherLibrary.java @@ -20,7 +20,6 @@ import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.util.List; import java.util.Map; From daf3fab0b11774d5d88ffcb35501f568b5cff439 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 30 Apr 2025 18:39:02 +0800 Subject: [PATCH 15/18] update --- .../org/jackhuang/hmcl/java/HMCLJavaRepository.java | 2 +- .../main/java/org/jackhuang/hmcl/game/Library.java | 4 ++-- .../java/org/jackhuang/hmcl/game/OSRestriction.java | 2 +- .../hmcl/util/platform/OperatingSystem.java | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index 3fee6ee7747..473f8330eb9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -143,7 +143,7 @@ public Collection getAllJava(Platform platform) { getAllJava(list, platform, platformRoot, true); if (platform.getOperatingSystem() == OperatingSystem.MACOS) { - platformRoot = root.resolve(platform.getOperatingSystem().getOfficialName() + "-" + platform.getArchitecture().getCheckedName()); + platformRoot = root.resolve(platform.getOperatingSystem().getMojangName() + "-" + platform.getArchitecture().getCheckedName()); if (Files.isDirectory(platformRoot)) getAllJava(list, platform, platformRoot, false); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java index 045e08cb13d..6df4a6ea4e3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java @@ -94,8 +94,8 @@ public String getVersion() { public String getClassifier() { if (artifact.getClassifier() == null) - if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS.getOfficialName())) - return natives.get(OperatingSystem.CURRENT_OS.getOfficialName()).replace("${arch}", Architecture.SYSTEM_ARCH.getBits().getBit()); + if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS.getMojangName())) + return natives.get(OperatingSystem.CURRENT_OS.getMojangName()).replace("${arch}", Architecture.SYSTEM_ARCH.getBits().getBit()); else return null; else diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index e141ad0d88b..ea614b72140 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -46,7 +46,7 @@ public OSRestriction(OperatingSystem os, String version) { } public OSRestriction(OperatingSystem os, String version, String arch) { - this.name = os.getOfficialName(); + this.name = os.getMojangName(); this.version = version; this.arch = arch; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index dbae731b71f..34f756f2e59 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -64,24 +64,24 @@ public enum OperatingSystem { UNKNOWN("universal"); private final String checkedName; - private final String officialName; + private final String mojangName; OperatingSystem(String checkedName) { this.checkedName = checkedName; - this.officialName = checkedName; + this.mojangName = checkedName; } - OperatingSystem(String checkedName, String officialName) { + OperatingSystem(String checkedName, String mojangName) { this.checkedName = checkedName; - this.officialName = officialName; + this.mojangName = mojangName; } public String getCheckedName() { return checkedName; } - public String getOfficialName() { - return officialName; + public String getMojangName() { + return mojangName; } public boolean isLinuxOrBSD() { From 871b42cb20cefa16187aa7146bbc8a84d60f0235 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 9 May 2025 13:10:00 +0800 Subject: [PATCH 16/18] fix build --- .../main/java/org/jackhuang/hmcl/util/platform/SystemInfo.java | 2 +- .../hmcl/util/platform/macos/MacOSHardwareDetector.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/SystemInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/SystemInfo.java index f0096e9261a..a602d677630 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/SystemInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/SystemInfo.java @@ -38,7 +38,7 @@ private static final class Holder { DETECTOR = new WindowsHardwareDetector(); else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) DETECTOR = new LinuxHardwareDetector(); - else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + else if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS) DETECTOR = new MacOSHardwareDetector(); else DETECTOR = new HardwareDetector(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java index 4214d62f74f..321620dc780 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java @@ -48,7 +48,7 @@ public final class MacOSHardwareDetector extends HardwareDetector { @Override public List detectGraphicsCards() { - if (OperatingSystem.CURRENT_OS != OperatingSystem.OSX) + if (OperatingSystem.CURRENT_OS != OperatingSystem.MACOS) return null; Process process = null; From a5506e8f87ca80c0b271dfab6e1fdc5e15d8ce48 Mon Sep 17 00:00:00 2001 From: Glavo Date: Tue, 13 May 2025 11:31:40 +0800 Subject: [PATCH 17/18] Update --- .../java/org/jackhuang/hmcl/util/platform/ManagedProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java index d2766b52b77..e30a9c4bd6a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java @@ -116,7 +116,7 @@ public long getPID() throws UnsupportedOperationException { pidField.setAccessible(true); return pidField.getInt(process); } catch (NoSuchFieldException | IllegalAccessException e) { - throw new UnsupportedOperationException("Cannot get the pid of a Process on Java 8 on OSX / Linux.", e); + throw new UnsupportedOperationException("Cannot get the pid of a Process on Java 8 on macOS/Linux.", e); } } else { // Unknown Operating System, no fallback available. From 3e632c24828597c9a3edf6c50b37d902723fdd2a Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 16 May 2025 22:34:34 +0800 Subject: [PATCH 18/18] update --- .../hmcl/util/platform/macos/MacOSHardwareDetector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java index 2c1637f25a5..5f3226fb96f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/macos/MacOSHardwareDetector.java @@ -45,7 +45,7 @@ public final class MacOSHardwareDetector extends HardwareDetector { @Override public @Nullable CentralProcessor detectCentralProcessor() { - if (OperatingSystem.CURRENT_OS != OperatingSystem.OSX) + if (OperatingSystem.CURRENT_OS != OperatingSystem.MACOS) return null; try {