Merge 71960e0a9f961bb39e99addc604aa8c5b70c2c29 into 3eddfa23b70f8bd6d64ea5cf576fccbe5a0f35c2

This commit is contained in:
Burning_TNT 2025-07-31 22:55:21 +08:00 committed by GitHub
commit 77cbc67463
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 38 additions and 5 deletions

View File

@ -240,7 +240,7 @@ public final class MultiFileItem<T> extends VBox {
}
}
public static final class FileOption<T> extends Option<T> {
public static class FileOption<T> extends Option<T> {
private final FileSelector selector = new FileSelector();
public FileOption(String title, T data) {

View File

@ -23,12 +23,15 @@ import javafx.beans.InvalidationListener;
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;
@ -258,13 +261,38 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
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<GameDirectoryType>(i18n("settings.custom"), GameDirectoryType.CUSTOM) {
private final WeakListenerHolder holder = new WeakListenerHolder();
@Override
protected Node createItem(ToggleGroup group) {
Node node = super.createItem(group);
ObservableList<Node> 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),
@ -537,6 +565,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
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")));
@ -552,6 +581,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
}
}));
} else {
gameDirSublist.setHasSubtitle(true);
navigateToSpecificSettings.unbind();
navigateToSpecificSettings.set(false);
}

View File

@ -1306,6 +1306,7 @@ settings.game.working_directory.choose=Choose the working directory
settings.game.working_directory.hint=Enable the "Isolated" option in "Working Directory" to allow the current instance to store its settings, saves, and mods in a separate directory.\n\
\n\
It is recommended to enable this option to avoid mod conflicts, but you will 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

View File

@ -950,7 +950,7 @@ world.name=世界名稱
world.name.enter=輸入世界名稱
world.show_all=全部顯示
profile=遊戲目錄
profile=遊戲倉庫
profile.already_exists=該名稱已存在
profile.default=目前目錄
profile.home=官方啟動器目錄
@ -1103,6 +1103,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=遊戲圖示

View File

@ -1113,6 +1113,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=游戏图标