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