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 aa60a7ea5..4c157a11f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -247,6 +247,11 @@ public final class LauncherHelper { } private static void checkGameState(Profile profile, VersionSetting setting, Version version, Runnable onAccept) throws InterruptedException { + if (setting.isNotCheckJVM()) { + onAccept.run(); + return; + } + boolean flag = false; boolean java8required = false; boolean newJavaRequired = false; @@ -294,8 +299,10 @@ public final class LauncherHelper { if (java8.isPresent()) { java8required = true; setting.setJavaVersion(java8.get()); + Controllers.dialog(i18n("launch.advice.java9") + "\n" + i18n("launch.advice.corrected"), i18n("message.info"), MessageBox.INFORMATION_MESSAGE, onAccept); + flag = true; } else { - Controllers.dialog(i18n("launch.advice.java9"), i18n("message.error"), MessageBox.ERROR_MESSAGE, null); + Controllers.dialog(i18n("launch.advice.java9") + "\n" + i18n("launch.advice.uncorrected"), i18n("message.error"), MessageBox.ERROR_MESSAGE, null); flag = true; } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java index 6e1f79611..d37268e4c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -277,6 +277,23 @@ public final class VersionSetting { noJVMArgsProperty.set(noJVMArgs); } + private final ImmediateBooleanProperty notCheckJVMProperty = new ImmediateBooleanProperty(this, "notCheckJVM", false); + + public ImmediateBooleanProperty notCheckJVMProperty() { + return notCheckJVMProperty; + } + + /** + * True if HMCL does not check JVM validity. + */ + public boolean isNotCheckJVM() { + return notCheckJVMProperty.get(); + } + + public void setNotCheckJVM(boolean notCheckJVM) { + notCheckJVMProperty.set(notCheckJVM); + } + private final ImmediateBooleanProperty notCheckGameProperty = new ImmediateBooleanProperty(this, "notCheckGame", false); public ImmediateBooleanProperty notCheckGameProperty() { @@ -494,6 +511,7 @@ public final class VersionSetting { minecraftArgsProperty.addListener(listener); noJVMArgsProperty.addListener(listener); notCheckGameProperty.addListener(listener); + notCheckJVMProperty.addListener(listener); showLogsProperty.addListener(listener); serverIpProperty.addListener(listener); fullscreenProperty.addListener(listener); @@ -558,6 +576,7 @@ public final class VersionSetting { obj.addProperty("fullscreen", src.isFullscreen()); obj.addProperty("noJVMArgs", src.isNoJVMArgs()); obj.addProperty("notCheckGame", src.isNotCheckGame()); + obj.addProperty("notCheckJVM", src.isNotCheckJVM()); obj.addProperty("showLogs", src.isShowLogs()); obj.addProperty("gameDir", src.getGameDir()); obj.addProperty("launcherVisibility", src.getLauncherVisibility().ordinal()); @@ -595,6 +614,7 @@ public final class VersionSetting { vs.setFullscreen(Optional.ofNullable(obj.get("fullscreen")).map(JsonElement::getAsBoolean).orElse(false)); vs.setNoJVMArgs(Optional.ofNullable(obj.get("noJVMArgs")).map(JsonElement::getAsBoolean).orElse(false)); vs.setNotCheckGame(Optional.ofNullable(obj.get("notCheckGame")).map(JsonElement::getAsBoolean).orElse(false)); + vs.setNotCheckJVM(Optional.ofNullable(obj.get("notCheckJVM")).map(JsonElement::getAsBoolean).orElse(false)); vs.setShowLogs(Optional.ofNullable(obj.get("showLogs")).map(JsonElement::getAsBoolean).orElse(false)); vs.setLauncherVisibility(LauncherVisibility.values()[Optional.ofNullable(obj.get("launcherVisibility")).map(JsonElement::getAsInt).orElse(1)]); vs.setGameDirType(EnumGameDirectory.values()[Optional.ofNullable(obj.get("gameDirType")).map(JsonElement::getAsInt).orElse(0)]); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index 374d72382..b122e6151 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -90,6 +90,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag @FXML private Label lblPhysicalMemory; @FXML private JFXToggleButton chkNoJVMArgs; @FXML private JFXToggleButton chkNoGameCheck; + @FXML private JFXToggleButton chkNoJVMCheck; @FXML private MultiFileItem javaItem; @FXML private MultiFileItem gameDirItem; @FXML private JFXToggleButton chkShowLogs; @@ -181,6 +182,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag FXUtils.unbindString(txtServerIP, lastVersionSetting.serverIpProperty()); FXUtils.unbindBoolean(chkFullscreen, lastVersionSetting.fullscreenProperty()); FXUtils.unbindBoolean(chkNoGameCheck, lastVersionSetting.notCheckGameProperty()); + FXUtils.unbindBoolean(chkNoJVMCheck, lastVersionSetting.notCheckJVMProperty()); FXUtils.unbindBoolean(chkNoJVMArgs, lastVersionSetting.noJVMArgsProperty()); FXUtils.unbindBoolean(chkShowLogs, lastVersionSetting.showLogsProperty()); FXUtils.unbindEnum(cboLauncherVisibility); @@ -208,6 +210,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag FXUtils.bindString(txtServerIP, versionSetting.serverIpProperty()); FXUtils.bindBoolean(chkFullscreen, versionSetting.fullscreenProperty()); FXUtils.bindBoolean(chkNoGameCheck, versionSetting.notCheckGameProperty()); + FXUtils.bindBoolean(chkNoJVMCheck, versionSetting.notCheckJVMProperty()); FXUtils.bindBoolean(chkNoJVMArgs, versionSetting.noJVMArgsProperty()); FXUtils.bindBoolean(chkShowLogs, versionSetting.showLogsProperty()); FXUtils.bindEnum(cboLauncherVisibility, versionSetting.launcherVisibilityProperty()); diff --git a/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml b/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml index 0cce855fd..f07f6cf7c 100644 --- a/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml +++ b/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml @@ -158,6 +158,14 @@ + + + + + + + diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index b929e057f..16a8b621b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -138,6 +138,8 @@ install.success=Installed successfully lang=English lang.default=Use system language +launch.advice.corrected=We have already corrected JVM selection and game can be launched now. If you do want to keep your JVM choice, you can turn off the Java VM checker in game settings. +launch.advice.uncorrected=If you are sure that game can be launched normally, you can turn off the Java VM checker in game settings. launch.advice.different_platform=Your OS is 64-Bit but your Java is 32-Bit. The 64-Bit Java is recommended. launch.advice.forge2760_liteloader=Forge 2760 and above is not compatible with LiteLoader, please consider downgrade Forge to 2759 or earlier. launch.advice.java8_1_13=Minecraft 1.13 and later versions can only run on Java 8 or later. @@ -290,6 +292,7 @@ settings=Game Settings settings.advanced=Advanced Settings settings.advanced.dont_check_game_completeness=Don't check game completeness +settings.advanced.dont_check_jvm_validity=Don't check whether JVM can launch the game or not settings.advanced.game_dir.default=Default (.minecraft/) settings.advanced.game_dir.independent=Independent (.minecraft/versions//, except assets,libraries) settings.advanced.java_args_default=Default java args: -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:MaxPermSize=???m -Xmx???m -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index eaf971055..8892bb495 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -138,6 +138,8 @@ install.success=安裝成功 lang=正體中文 lang.default=跟隨系統語言 +launch.advice.corrected=我们已经修正了问题。如果您確實希望使用您自訂的 Java 虛擬機,您可以在遊戲設定中關閉 Java 虛擬機相容性檢查。 +launch.advice.uncorrected=如果您確實希望使用您自訂的 Java 虛擬機,您可以在遊戲設定中關閉 Java 虛擬機相容性檢查。 launch.advice.different_platform=您的系統為 64 位元,但是 Java 是 32 位元,建議您安裝 64 位 Java。 launch.advice.forge2760_liteloader=Forge 2760 與 LiteLoader 不相容。請刪除 LiteLoader 或者更換 Forge 至 2759 或更舊的版本。 launch.advice.java8_1_13=Minecraft 1.13 只支援 Java 8 或更高版本,請使用 Java 8 或最新版本。 @@ -290,6 +292,7 @@ settings=遊戲設定 settings.advanced=進階設定 settings.advanced.dont_check_game_completeness=不檢查遊戲完整性 +settings.advanced.dont_check_jvm_validity=不檢查 JVM 與遊戲的相容性 settings.advanced.game_dir.default=預設(.minecraft/) settings.advanced.game_dir.independent=各版本獨立(.minecraft/versions/<版本名>/,除 assets、libraries) settings.advanced.java_args_default=啟動器預設新增的參數(請勿重複新增):-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:MaxPermSize=???m -Xmx???m -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true 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 1747a0dc4..b51f5bc23 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -138,6 +138,8 @@ install.success=安装成功 lang=简体中文 lang.default=跟随系统语言 +launch.advice.corrected=我们已经修复了问题。如果您确实希望使用您自定义的 Java 虚拟机,您可以在游戏设置中关闭 Java 虚拟机兼容性检查。 +launch.advice.uncorrected=如果您确实希望使用您自定义的 Java 虚拟机,您可以在游戏设置中关闭 Java 虚拟机兼容性检查。 launch.advice.different_platform=您的系统是 64 位,但是 Java 是 32 位的,建议您安装 64 位 Java。 launch.advice.forge2760_liteloader=Forge 2760 与 LiteLoader 不兼容。请删除 LiteLoader 或者更换 Forge 至 2759 或更旧的版本。 launch.advice.java8_1_13=Minecraft 1.13 只支持 Java 8 或更高版本,请使用 Java 8 或最新版本。 @@ -290,6 +292,7 @@ settings=游戏设置 settings.advanced=高级设置 settings.advanced.dont_check_game_completeness=不检查游戏完整性 +settings.advanced.dont_check_jvm_validity=不检查 JVM 与游戏的兼容性 settings.advanced.game_dir.default=默认(.minecraft/) settings.advanced.game_dir.independent=各版本独立(.minecraft/versions/<版本名>/,除 assets、libraries) settings.advanced.java_args_default=启动器默认添加的参数(请不要重复添加):-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:MaxPermSize=???m -Xmx???m -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true