将 OS X 重命名为 macOS (#3878)

This commit is contained in:
Glavo 2025-05-20 19:34:35 +08:00 committed by GitHub
parent c5f56eb5c4
commit 48e3f79965
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
30 changed files with 126 additions and 106 deletions

View File

@ -90,7 +90,7 @@ public final class Launcher extends Application {
}
// 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)
@ -152,7 +152,7 @@ public final class Launcher extends Application {
|| 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/")

View File

@ -67,7 +67,7 @@ public final class Main {
// 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();

View File

@ -83,7 +83,7 @@ public final class HMCLJavaRepository implements JavaRepository {
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) {
@ -98,14 +98,8 @@ public final class HMCLJavaRepository implements JavaRepository {
return getJavaExecutable(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent());
}
@Override
public Collection<JavaRuntime> getAllJava(Platform platform) {
Path root = getPlatformRoot(platform);
if (!Files.isDirectory(root))
return Collections.emptyList();
ArrayList<JavaRuntime> list = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(root)) {
private static void getAllJava(List<JavaRuntime> list, Platform platform, Path platformRoot, boolean isManaged) {
try (DirectoryStream<Path> stream = Files.newDirectoryStream(platformRoot)) {
for (Path file : stream) {
try {
String name = file.getFileName().toString();
@ -115,7 +109,7 @@ public final class HMCLJavaRepository implements JavaRepository {
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;
@ -127,7 +121,7 @@ public final class HMCLJavaRepository implements JavaRepository {
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 final class HMCLJavaRepository implements JavaRepository {
} catch (IOException ignored) {
}
}
@Override
public Collection<JavaRuntime> getAllJava(Platform platform) {
Path platformRoot = getPlatformRoot(platform);
if (!Files.isDirectory(platformRoot))
return Collections.emptyList();
ArrayList<JavaRuntime> list = new ArrayList<>();
getAllJava(list, platform, platformRoot, true);
if (platform.getOperatingSystem() == OperatingSystem.MACOS) {
platformRoot = root.resolve(platform.getOperatingSystem().getMojangName() + "-" + platform.getArchitecture().getCheckedName());
if (Files.isDirectory(platformRoot))
getAllJava(list, platform, platformRoot, false);
}
return list;
}
@ -149,7 +160,7 @@ public final class HMCLJavaRepository implements JavaRepository {
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;

View File

@ -75,7 +75,7 @@ public final class JavaManager {
} 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 final class JavaManager {
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;
@ -279,7 +279,7 @@ public final class JavaManager {
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 @@ public final class JavaManager {
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 @@ public final class JavaManager {
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 @@ public final class JavaManager {
.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 @@ public final class JavaManager {
}
}
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 @@ public final class JavaManager {
}
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);
}
}

View File

@ -293,8 +293,8 @@ public final class Controllers {
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 &&

View File

@ -379,7 +379,7 @@ public final class FXUtils {
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";
@ -416,7 +416,7 @@ public final class FXUtils {
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() && SystemUtils.which("dbus-send") != null)
openCommands = new String[]{
@ -498,7 +498,7 @@ public final class FXUtils {
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) {
@ -759,7 +759,7 @@ public final class FXUtils {
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";

View File

@ -116,10 +116,10 @@ public final class NativePatcher {
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;

View File

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

View File

@ -402,7 +402,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\

View File

@ -405,7 +405,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\

View File

@ -403,7 +403,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\

View File

@ -381,7 +381,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如果你正在使用<b>高通</b>平臺,你可能需要安裝 <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">OpenGL 相容包</a>後才能進行遊戲。點擊連結前往 Microsoft Store 安裝相容包。
feedback=回報

View File

@ -390,7 +390,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如果你正在使用 <b>高通</b> 平台,你可能需要安装 <a href="ms-windows-store://pdp/?productid=9NQPSL29BFFF">OpenGL 兼容包</a> 后才能进行游戏。点击链接前往 Microsoft Store 安装兼容包。\n如遇到问题你可以点击右上角帮助按钮进行求助。
feedback=反馈

View File

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

View File

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

View File

@ -23,7 +23,6 @@ import org.jackhuang.hmcl.task.GetTask;
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<EnumMap<JavaPackageType,
public static final String API_ROOT = System.getProperty("hmcl.discoapi.override", "https://api.foojay.io/disco/v3.0");
private static String getOperatingSystemName(OperatingSystem os) {
return os == OperatingSystem.OSX ? "macos" : os.getCheckedName();
}
private static String getArchitectureName(Architecture arch) {
return arch.getCheckedName();
}
private final DiscoJavaDistribution distribution;
private final String archiveType;
private final Task<String> fetchPackagesTask;
@ -55,8 +46,8 @@ public final class DiscoFetchJavaListTask extends Task<EnumMap<JavaPackageType,
HashMap<String, String> 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)

View File

@ -40,12 +40,12 @@ public enum DiscoJavaDistribution implements JavaDistribution<DiscoJavaRemoteVer
EnumSet.of(JDK, JRE),
pair(WINDOWS, EnumSet.of(X86_64, X86, ARM64)),
pair(LINUX, EnumSet.of(X86_64, X86, ARM64, ARM32, RISCV64, PPC64, PPC64LE, S390X, SPARCV9)),
pair(OSX, EnumSet.of(X86_64, ARM64))),
pair(MACOS, EnumSet.of(X86_64, ARM64))),
LIBERICA("BellSoft Liberica", "liberica", "BellSoft",
EnumSet.of(JDK, JRE, JDKFX, JREFX),
pair(WINDOWS, EnumSet.of(X86_64, X86, ARM64)),
pair(LINUX, EnumSet.of(X86_64, X86, ARM64, ARM32, RISCV64, PPC64LE)),
pair(OSX, EnumSet.of(X86_64, ARM64))) {
pair(MACOS, EnumSet.of(X86_64, ARM64))) {
@Override
public boolean testVersion(DiscoJavaRemoteVersion version) {
if (!super.testVersion(version))
@ -59,23 +59,23 @@ public enum DiscoJavaDistribution implements JavaDistribution<DiscoJavaRemoteVer
EnumSet.of(JDK, JRE, JDKFX, JREFX),
pair(WINDOWS, EnumSet.of(X86_64, X86, ARM64)),
pair(LINUX, EnumSet.of(X86_64, X86, ARM64, ARM32, RISCV64, PPC64LE)),
pair(OSX, EnumSet.of(X86_64, ARM64))),
pair(MACOS, EnumSet.of(X86_64, ARM64))),
GRAALVM("Oracle GraalVM", "graalvm", "Oracle",
EnumSet.of(JDK),
pair(WINDOWS, EnumSet.of(X86_64)),
pair(LINUX, EnumSet.of(X86_64, ARM64)),
pair(OSX, EnumSet.of(X86_64, ARM64))),
pair(MACOS, EnumSet.of(X86_64, ARM64))),
SEMERU("IBM Semeru (OpenJ9)", "semeru", "IBM",
EnumSet.of(JDK, JRE),
pair(WINDOWS, EnumSet.of(X86_64)),
pair(LINUX, EnumSet.of(X86_64, ARM64, PPC64LE, S390X)),
pair(OSX, EnumSet.of(X86_64, ARM64))
pair(MACOS, EnumSet.of(X86_64, ARM64))
),
CORRETTO("Amazon Corretto", "corretto", "Amazon",
EnumSet.of(JDK),
pair(WINDOWS, EnumSet.of(X86_64)),
pair(LINUX, EnumSet.of(X86_64, ARM64)),
pair(OSX, EnumSet.of(X86_64, ARM64))
pair(MACOS, EnumSet.of(X86_64, ARM64))
);
public static DiscoJavaDistribution of(String name) {

View File

@ -73,13 +73,13 @@ public final class GameJavaVersion {
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);
}
}

View File

@ -135,7 +135,7 @@ public enum JavaVersionConstraint {
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;

View File

@ -46,7 +46,7 @@ public class Library implements Comparable<Library>, Validation {
private final String url;
private final LibrariesDownloadInfo downloads;
private final ExtractRules extract;
private final Map<OperatingSystem, String> natives;
private final Map<String, String> natives;
private final List<CompatibilityRule> rules;
private final List<String> checksums;
@ -64,7 +64,7 @@ public class Library implements Comparable<Library>, Validation {
this(artifact, url, downloads, null, null, null, null, null, null);
}
public Library(Artifact artifact, String url, LibrariesDownloadInfo downloads, List<String> checksums, ExtractRules extract, Map<OperatingSystem, String> natives, List<CompatibilityRule> rules, String hint, String filename) {
public Library(Artifact artifact, String url, LibrariesDownloadInfo downloads, List<String> checksums, ExtractRules extract, Map<String, String> natives, List<CompatibilityRule> rules, String hint, String filename) {
this.artifact = artifact;
this.url = url;
this.downloads = downloads;
@ -94,8 +94,8 @@ public class Library implements Comparable<Library>, Validation {
public String getClassifier() {
if (artifact.getClassifier() == null)
if (natives != null && natives.containsKey(OperatingSystem.CURRENT_OS))
return natives.get(OperatingSystem.CURRENT_OS).replace("${arch}", 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

View File

@ -29,7 +29,7 @@ import java.util.regex.Pattern;
*/
public final class OSRestriction {
private final OperatingSystem name;
private final String name;
private final String version;
private final String arch;
@ -37,21 +37,27 @@ public final class 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.getMojangName();
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;
}
@ -64,8 +70,10 @@ public final class OSRestriction {
}
public boolean allow() {
if (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)

View File

@ -20,7 +20,6 @@ package org.jackhuang.hmcl.game.tlauncher;
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;
@ -36,11 +35,11 @@ public class TLauncherLibrary {
@SerializedName("classifies") // stupid typo made by TLauncher
private final Map<String, LibraryDownloadInfo> classifiers;
private final ExtractRules extract;
private final Map<OperatingSystem, String> natives;
private final Map<String, String> natives;
private final List<CompatibilityRule> rules;
private final List<String> checksums;
public TLauncherLibrary(Artifact name, String url, LibraryDownloadInfo artifact, Map<String, LibraryDownloadInfo> classifiers, ExtractRules extract, Map<OperatingSystem, String> natives, List<CompatibilityRule> rules, List<String> checksums) {
public TLauncherLibrary(Artifact name, String url, LibraryDownloadInfo artifact, Map<String, LibraryDownloadInfo> classifiers, ExtractRules extract, Map<String, String> natives, List<CompatibilityRule> rules, List<String> checksums) {
this.name = name;
this.url = url;
this.artifact = artifact;

View File

@ -72,14 +72,14 @@ public class DefaultLauncher extends Launcher {
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;
@ -89,14 +89,14 @@ public class DefaultLauncher extends Launcher {
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;
@ -159,7 +159,7 @@ public class DefaultLauncher extends Launcher {
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 -> {
@ -265,7 +265,7 @@ public class DefaultLauncher extends Launcher {
// 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());

View File

@ -201,7 +201,7 @@ public enum Architecture {
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"});

View File

@ -107,7 +107,7 @@ public final class ManagedProcess {
// 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
@ -116,7 +116,7 @@ public final class ManagedProcess {
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.

View File

@ -49,28 +49,39 @@ public enum OperatingSystem {
*/
LINUX("linux"),
/**
* Mac OS X.
* macOS.
*/
OSX("osx"),
MACOS("macos", "osx"),
/**
* FreeBSD.
*/
FREEBSD("freebsd"),
FREEBSD("freebsd", "linux"),
/**
* Unknown operating system.
*/
UNKNOWN("universal");
private final String checkedName;
private final String mojangName;
OperatingSystem(String checkedName) {
this.checkedName = checkedName;
this.mojangName = checkedName;
}
OperatingSystem(String checkedName, String mojangName) {
this.checkedName = checkedName;
this.mojangName = mojangName;
}
public String getCheckedName() {
return checkedName;
}
public String getMojangName() {
return mojangName;
}
public boolean isLinuxOrBSD() {
return this == LINUX || this == FREEBSD;
}
@ -276,7 +287,7 @@ public enum OperatingSystem {
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"))
@ -300,7 +311,7 @@ public enum OperatingSystem {
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();

View File

@ -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 final class Platform {
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 final class Platform {
switch (os) {
case WINDOWS:
return WINDOWS_ARM64;
case OSX:
return OSX_ARM64;
case MACOS:
return MACOS_ARM64;
case LINUX:
return LINUX_ARM64;
}

View File

@ -41,7 +41,7 @@ public final class SystemInfo {
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();

View File

@ -44,7 +44,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 {
@ -97,7 +97,7 @@ public final class MacOSHardwareDetector extends HardwareDetector {
@Override
public List<GraphicsCard> detectGraphicsCards() {
if (OperatingSystem.CURRENT_OS != OperatingSystem.OSX)
if (OperatingSystem.CURRENT_OS != OperatingSystem.MACOS)
return null;
String json = null;

View File

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