diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java index d7e224baa0..4f09e376c9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java @@ -234,7 +234,7 @@ protected Node createItem(ToggleGroup group) { } } - public static final class FileOption extends Option { + public static class FileOption extends Option { private final FileSelector selector = new FileSelector(); public FileOption(String title, T data) { 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 6fcf3c0de0..dbdd0813d7 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 @@ -23,12 +23,15 @@ import javafx.beans.binding.Bindings; import javafx.beans.property.*; import javafx.beans.value.ChangeListener; +import javafx.collections.ObservableList; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.control.Toggle; +import javafx.scene.control.ToggleGroup; import javafx.scene.layout.*; import javafx.scene.text.Text; import javafx.stage.FileChooser; @@ -212,13 +215,38 @@ public VersionSettingsPage(boolean globalSetting) { gameDirItem = new MultiFileItem<>(); gameDirSublist = new ComponentSublist(); + { + HintPane gameDirHint = new HintPane(MessageDialogPane.MessageType.INFO); + gameDirHint.setText(i18n("settings.game.working_directory.should_use_game_repo_feature")); + gameDirSublist.getContent().add(gameDirHint); + } gameDirSublist.getContent().add(gameDirItem); gameDirSublist.setTitle(i18n("settings.game.working_directory")); gameDirSublist.setHasSubtitle(versionId != null); gameDirItem.disableProperty().bind(modpack); - gameDirCustomOption = new MultiFileItem.FileOption<>(i18n("settings.custom"), GameDirectoryType.CUSTOM) - .setChooserTitle(i18n("settings.game.working_directory.choose")) - .setDirectory(true); + gameDirCustomOption = new MultiFileItem.FileOption(i18n("settings.custom"), GameDirectoryType.CUSTOM) { + private final WeakListenerHolder holder = new WeakListenerHolder(); + + @Override + protected Node createItem(ToggleGroup group) { + Node node = super.createItem(group); + + ObservableList children = gameDirItem.getChildren(); + holder.add(FXUtils.observeWeak(() -> { + boolean exist = children.contains(node); + if (!"".equals(getValue()) || gameDirItem.getSelectedData() == GameDirectoryType.CUSTOM) { + if (!exist) { + children.add(node); + } + } else { + if (exist) { + children.remove(node); + } + } + }, valueProperty(), gameDirItem.selectedDataProperty())); + return node; + } + }.setChooserTitle(i18n("settings.game.working_directory.choose")).setDirectory(true); gameDirItem.loadChildren(Arrays.asList( new MultiFileItem.Option<>(i18n("settings.advanced.game_dir.default"), GameDirectoryType.ROOT_FOLDER), @@ -482,6 +510,7 @@ public void loadVersion(Profile profile, String versionId) { this.listenerHolder = new WeakListenerHolder(); if (versionId == null) { + gameDirSublist.setHasSubtitle(false); enableSpecificSettings.set(true); state.set(State.fromTitle(Profiles.getProfileDisplayName(profile) + " - " + i18n("settings.type.global.manage"))); @@ -497,6 +526,7 @@ public void loadVersion(Profile profile, String versionId) { } })); } else { + gameDirSublist.setHasSubtitle(true); navigateToSpecificSettings.unbind(); navigateToSpecificSettings.set(false); } diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 195c935006..e274433490 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1030,18 +1030,16 @@ world.reveal=Reveal in Explorer world.show_all=Show All world.time=EEE, MMM d, yyyy HH\:mm\:ss -profile=Game Directories +profile=Game Repository profile.already_exists=This name already exists, please use a different name. profile.default=Current Directory -profile.home=Vanilla Launcher Directory +profile.home=Vanilla Launcher Repository profile.instance_directory=Instance Directory -profile.instance_directory.choose=Select an instance directory -profile.manage=Instance Directory List +profile.instance_directory.choose=Select an instance Directory profile.name=Name -profile.new=New Directory -profile.title=Game Directories -profile.selected=Selected -profile.use_relative_path=Use relative path for game path if possible +profile.new=New Repository +profile.title=Game Repositories +profile.use_relative_path=Use relative path for game repository path if possible repositories.custom=Custom Maven Repository (%s) repositories.maven_central=Universal (Maven Central) @@ -1162,7 +1160,7 @@ settings.game.working_directory.choose=Select working directory settings.game.working_directory.hint=Turn on the 'Isolated' option under 'Working Directory' to allow the current instance to store its settings, saves, and mods in a separate directory.\n\ \n\ It is recommended to turn this option on to avoid mod conflicts, but you'll need to move your saves manually. -# ' +settings.game.working_directory.should_use_game_repo_feature=Willing to change the game storage path? Go to HMCL Homepage - Version List, and click [Add game repository]. settings.icon=Icon diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index a8c474fdd3..73e7819f9d 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -898,18 +898,16 @@ world.reveal=開啟資料夾 world.show_all=全部顯示 world.time=yyyy年MM月dd日 HH:mm:ss -profile=遊戲目錄 +profile=遊戲倉庫 profile.already_exists=該名稱已存在 -profile.default=目前目錄 -profile.home=官方啟動器目錄 +profile.default=目前目錄倉庫 +profile.home=官方啟動器倉庫 profile.instance_directory=遊戲路徑 profile.instance_directory.choose=選擇遊戲路徑 -profile.manage=遊戲目錄列表 profile.name=名稱 profile.new=建立設定 -profile.title=遊戲目錄 -profile.selected=已選取 -profile.use_relative_path=如可行,則在遊戲目錄使用相對路徑 +profile.title=遊戲倉庫 +profile.use_relative_path=如可行,則在遊戲倉庫使用相對路徑 repositories.custom=自定義 Maven 倉庫(%s) repositories.maven_central=全球(Maven Central) @@ -1021,6 +1019,7 @@ settings.game.management=管理 settings.game.working_directory=執行路徑(版本隔離,修改後請自行移動相關遊戲檔案,如存檔模組設定等) settings.game.working_directory.choose=選擇執行路徑 settings.game.working_directory.hint=在“運行路徑(版本隔離)”選項中開啟“各版本獨立”使當前版本獨立存放設定、存檔、模組等數據,使用模組時建議開啟此選項以避免不同版本模組衝突。修改此選項後請自行移動存檔等檔案。 +settings.game.working_directory.should_use_game_repo_feature=想要更改遊戲的儲存路徑?進入 HMCL 首頁 - 版本列表,點選【添加游戏仓库】 settings.icon=遊戲圖示 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 442513ab26..0768edc4d1 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -897,18 +897,16 @@ world.reveal=打开文件夹 world.show_all=显示全部 world.time=yyyy 年 MM 月 dd 日 HH:mm:ss -profile=游戏目录 +profile=游戏仓库 profile.already_exists=该名称已存在 -profile.default=当前目录 -profile.home=官方启动器目录 +profile.default=当前目录仓库 +profile.home=官方启动器目录仓库 profile.instance_directory=游戏路径 profile.instance_directory.choose=选择游戏路径 -profile.manage=游戏目录列表 profile.name=名称 -profile.new=添加游戏目录 -profile.title=游戏目录 -profile.selected=已选中 -profile.use_relative_path=若可能,游戏目录使用相对路径 +profile.new=添加游戏仓库 +profile.title=游戏仓库 +profile.use_relative_path=若可能,游戏仓库使用相对路径 repositories.custom=自定义 Maven 仓库(%s) repositories.maven_central=全球(Maven Central) @@ -1020,6 +1018,7 @@ settings.game.management=管理 settings.game.working_directory=版本隔离(建议使用模组时开启“各版本隔离”,改后需移动存档模组等相关游戏文件) settings.game.working_directory.choose=选择运行路径 settings.game.working_directory.hint=在“运行路径(版本隔离)”选项中开启“各版本独立”使当前版本独立存放设置、存档、模组等数据,使用模组时建议开启此选项以避免不同版本模组冲突。修改此选项后请自行移动存档等文件。 +settings.game.working_directory.should_use_game_repo_feature=想要更改游戏的存储路径?进入 HMCL 主页 - 版本列表,点击【添加游戏仓库】 settings.icon=游戏图标