From a3af719087b46d6cb1a346a2b85b417cc7d9db57 Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 13 May 2024 23:41:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=8A=A8=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=20Java=2021=20(#3045)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jackhuang/hmcl/game/LauncherHelper.java | 9 ++++++++- .../org/jackhuang/hmcl/game/JavaVersionConstraint.java | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) 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 1ad8fbf86..960a98366 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -354,7 +354,9 @@ public final class LauncherHelper { if (org.jackhuang.hmcl.util.platform.Platform.isCompatibleWithX86Java()) { JavaVersionConstraint.VersionRanges range = JavaVersionConstraint.findSuitableJavaVersionRange(gameVersion, version); - if (range.getMandatory().contains(VersionNumber.asVersion("17.0.1"))) { + if (range.getMandatory().contains(VersionNumber.asVersion("21.0.3"))) { + targetJavaVersion = GameJavaVersion.JAVA_21; + } else if (range.getMandatory().contains(VersionNumber.asVersion("17.0.1"))) { targetJavaVersion = GameJavaVersion.JAVA_17; } else if (range.getMandatory().contains(VersionNumber.asVersion("16.0.1"))) { targetJavaVersion = GameJavaVersion.JAVA_16; @@ -465,6 +467,11 @@ public final class LauncherHelper { () -> FXUtils.openLink(OPENJDK_DOWNLOAD_LINK), null); breakAction.run(); return Task.fromCompletableFuture(future); + case VANILLA_JAVA_21: + Controllers.confirm(i18n("launch.advice.require_newer_java_version", gameVersion.toString(), 21), i18n("message.warning"), + () -> FXUtils.openLink(OPENJDK_DOWNLOAD_LINK), null); + breakAction.run(); + return Task.fromCompletableFuture(future); case VANILLA_JAVA_8: Controllers.dialog(i18n("launch.advice.java8_1_13"), i18n("message.error"), MessageType.ERROR, breakAction); return Task.fromCompletableFuture(future); 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 3a43e1c28..9dbbd233c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -39,6 +39,8 @@ public enum JavaVersionConstraint { VANILLA_JAVA_16(JavaVersionConstraint.RULE_MANDATORY, GameVersionNumber.atLeast("1.17"), VersionNumber.atLeast("16")), // Minecraft>=1.18 requires Java 17 VANILLA_JAVA_17(JavaVersionConstraint.RULE_MANDATORY, GameVersionNumber.atLeast("1.18"), VersionNumber.atLeast("17")), + // Minecraft>=1.20.5 requires Java 21 + VANILLA_JAVA_21(JavaVersionConstraint.RULE_MANDATORY, GameVersionNumber.atLeast("1.20.5"), VersionNumber.atLeast("21")), // Minecraft<=1.7.2+Forge requires Java<=7, But LegacyModFixer may fix that problem. So only suggest user using Java 7. MODDED_JAVA_7(JavaVersionConstraint.RULE_SUGGESTED, GameVersionNumber.atMost("1.7.2"), VersionNumber.atMost("1.7.999")) { @Override