From 16816d8490abcfe01f2c0026dcafbf566f378275 Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 3 Sep 2025 16:56:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Linux=20=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E4=B8=8A=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E4=B8=BA=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E4=BA=86=20Cleanroom=20=E7=9A=84=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=80=89=E6=8B=A9=20Java=20=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#4385)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jackhuang/hmcl/game/LauncherHelper.java | 7 ++++++- HMCL/src/main/resources/assets/lang/I18N.properties | 1 + .../src/main/resources/assets/lang/I18N_zh.properties | 1 + .../main/resources/assets/lang/I18N_zh_CN.properties | 1 + .../jackhuang/hmcl/game/JavaVersionConstraint.java | 11 ++++++++++- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 6a26ea193..cc625246e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -452,7 +452,9 @@ public final class LauncherHelper { return result; } else { GameJavaVersion gameJavaVersion; - if (violatedMandatoryConstraints.contains(JavaVersionConstraint.GAME_JSON)) + if (violatedMandatoryConstraints.contains(JavaVersionConstraint.CLEANROOM_JAVA_21)) + gameJavaVersion = GameJavaVersion.JAVA_21; + else if (violatedMandatoryConstraints.contains(JavaVersionConstraint.GAME_JSON)) gameJavaVersion = version.getJavaVersion(); else if (violatedMandatoryConstraints.contains(JavaVersionConstraint.VANILLA)) gameJavaVersion = GameJavaVersion.getMinimumJavaVersion(gameVersion); @@ -542,6 +544,9 @@ public final class LauncherHelper { case MODDED_JAVA_21: suggestions.add(i18n("launch.advice.modded_java", 21, gameVersion)); break; + case CLEANROOM_JAVA_21: + suggestions.add(i18n("launch.advice.cleanroom")); + break; case VANILLA_JAVA_8_51: suggestions.add(i18n("launch.advice.java8_51_1_13")); break; diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index f67404f5b..08aba7f73 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -773,6 +773,7 @@ launch.advice=%s Do you still want to continue to launch? launch.advice.multi=The following problems were detected:\n\n%s\n\nThese problems may prevent you from launching the game or affect gaming experience.\nDo you still want to continue to launch? launch.advice.java.auto=The current Java version is not compatible with the instance.\n\nClick "Yes" to automatically choose the most compatible Java version. Or, you can navigate to "Global/Instance-specific Settings → Java" to choose one yourself. launch.advice.java.modded_java_7=Minecraft 1.7.2 and previous versions require Java 7 or earlier. +launch.advice.cleanroom=Cleanroom can only be run on Java 21 or later. Please use Java 21 or later versions. launch.advice.corrected=We have resolved the Java problem. If you still want to use your choice of Java version, you can disable "Do not check JVM compatibility" in "Global/Instance-specific Settings → Advanced Settings". launch.advice.uncorrected=If you still want to use your choice of Java version, you can disable "Do not check JVM compatibility" in "Global/Instance-specific Settings → Advanced Settings". launch.advice.different_platform=The 64-bit Java version is recommended for your device, but you have installed a 32-bit one. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 109ca04da..9d61fe469 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -582,6 +582,7 @@ launch.advice=%s 是否繼續啟動? launch.advice.multi=檢測到以下問題:\n\n%s\n\n這些問題可能導致遊戲無法正常啟動或影響遊戲體驗,是否繼續啟動? launch.advice.java.auto=目前選取的 Java 版本不滿足遊戲要求,是否自動選取合適的 Java 版本?\n或者你可以到「(全域/實例特定) 遊戲設定 → 遊戲 Java」中選取一個合適的 Java 版本。 launch.advice.java.modded_java_7=Minecraft 1.7.2 及更低版本需要 Java 7 及更低版本。 +launch.advice.cleanroom=Cleanroom 僅支援 Java 21 或更高版本。請使用 Java 21 或最新版本。 launch.advice.corrected=我們已經修正了 Java 版本問題。如果你確實希望使用你自訂的 Java,你可以在「(全域/實例特定) 遊戲設定 → 進階設定」中往下滑,開啟「不檢查 Java 虛擬機與遊戲的相容性」。 launch.advice.uncorrected=如果你確實希望使用你自訂的 Java,你可以在「(全域/實例特定) 遊戲設定 → 進階設定」中往下滑,開啟「不檢查 Java 虛擬機與遊戲的相容性」。 launch.advice.different_platform=你正在使用 32 位元 Java 啟動遊戲。建議更換至 64 位元 Java。 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 77ae0a55f..d56c66061 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -592,6 +592,7 @@ launch.advice=%s 是否继续启动? launch.advice.multi=检测到以下问题:\n\n%s\n\n这些问题可能导致游戏无法正常启动或影响游戏体验,是否继续启动?\n你可以点击右上角帮助按钮进行求助。 launch.advice.java.auto=当前选择的 Java 版本不满足游戏要求。\n点击“是”即可由 HMCL 来自动选取合适的 Java 版本。\n或者你可以在“(全局/版本特定) 游戏设置 → 游戏 Java”中选择一个合适的 Java 版本。 launch.advice.java.modded_java_7=Minecraft 1.7.2 及更低版本需要 Java 7 及更低版本。 +launch.advice.cleanroom=Cleanroom 只能在 Java 21 或更高版本上运行。请使用 Java 21 或最新版本。 launch.advice.corrected=我们已经修复了 Java 版本问题。如果你确实希望使用你自定义的 Java,你可以在“(全局/版本特定) 游戏设置 → 高级设置”中往下滑,启用“不检查 Java 虚拟机与游戏的兼容性”。 launch.advice.uncorrected=如果你确实希望使用你自定义的 Java,你可以在“(全局/版本特定) 游戏设置 → 高级设置”中往下滑,启用“不检查 Java 虚拟机与游戏的兼容性”。 launch.advice.different_platform=你正在使用 32 位 Java 启动游戏。建议更换至 64 位 Java。 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 7185f19e2..8e745d982 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -108,6 +108,14 @@ public enum JavaVersionConstraint { && super.appliesToVersionImpl(gameVersionNumber, version, java, analyzer); } }, + CLEANROOM_JAVA_21(true, GameVersionNumber.between("1.12.2", "1.12.999"), VersionNumber.atLeast("21")) { + @Override + protected boolean appliesToVersionImpl(GameVersionNumber gameVersionNumber, @Nullable Version version, + @Nullable JavaRuntime java, @Nullable LibraryAnalyzer analyzer) { + return analyzer != null && analyzer.has(LibraryAnalyzer.LibraryType.CLEANROOM) + && super.appliesToVersionImpl(gameVersionNumber, version, java, analyzer); + } + }, // LaunchWrapper<=1.12 will crash because LaunchWrapper assumes the system class loader is an instance of URLClassLoader (Java 8) LAUNCH_WRAPPER(true, GameVersionNumber.atMost("1.12.999"), VersionNumber.atMost("1.8.999")) { @Override @@ -130,7 +138,8 @@ public enum JavaVersionConstraint { @Nullable JavaRuntime java, @Nullable LibraryAnalyzer analyzer) { return OperatingSystem.CURRENT_OS == OperatingSystem.LINUX && Architecture.SYSTEM_ARCH == Architecture.X86_64 - && (java == null || java.getArchitecture() == Architecture.X86_64); + && (java == null || java.getArchitecture() == Architecture.X86_64) + && (analyzer == null || !analyzer.has(LibraryAnalyzer.LibraryType.CLEANROOM)); } @Override