diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java index b1f130694..6cdd41a34 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java @@ -24,6 +24,7 @@ import javafx.beans.Observable; import javafx.beans.property.*; import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.event.EventBus; +import org.jackhuang.hmcl.event.EventPriority; import org.jackhuang.hmcl.event.RefreshedVersionsEvent; import org.jackhuang.hmcl.game.HMCLCacheRepository; import org.jackhuang.hmcl.game.HMCLGameRepository; @@ -139,7 +140,7 @@ public final class Profile implements Observable { gameDir.addListener((a, b, newValue) -> repository.changeDirectory(newValue)); this.selectedVersion.addListener(o -> checkSelectedVersion()); - listenerHolder.add(EventBus.EVENT_BUS.channel(RefreshedVersionsEvent.class).registerWeak(event -> checkSelectedVersion())); + listenerHolder.add(EventBus.EVENT_BUS.channel(RefreshedVersionsEvent.class).registerWeak(event -> checkSelectedVersion(), EventPriority.HIGHEST)); addPropertyChangedListener(onInvalidating(this::invalidate)); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java index c7d95b4fe..a04f6ce02 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java @@ -20,11 +20,13 @@ package org.jackhuang.hmcl.ui.profile; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXCheckBox; import com.jfoenix.controls.JFXTextField; +import com.jfoenix.validation.base.ValidatorBase; import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.fxml.FXML; +import javafx.scene.Node; import javafx.scene.layout.StackPane; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profiles; @@ -66,6 +68,19 @@ public final class ProfilePage extends StackPane implements DecoratorPage { FXUtils.loadFXML(this, "/assets/fxml/profile.fxml"); txtProfileName.setText(profileDisplayName); + txtProfileName.getValidators().add(new ValidatorBase() { + { + setMessage(i18n("profile.already_exists")); + } + @Override + protected void eval() { + JFXTextField control = (JFXTextField) this.getSrcControl(); + if (Profiles.getProfiles().stream().anyMatch(profile -> profile.getName().equals(control.getText()))) + hasErrors.set(true); + else + hasErrors.set(false); + } + }); FXUtils.onChangeAndOperate(txtProfileName.textProperty(), it -> { btnSave.setDisable(!txtProfileName.validate() || StringUtils.isBlank(getLocation())); }); diff --git a/HMCL/src/main/resources/assets/fxml/profile.fxml b/HMCL/src/main/resources/assets/fxml/profile.fxml index 90f79381f..d477dc6d7 100644 --- a/HMCL/src/main/resources/assets/fxml/profile.fxml +++ b/HMCL/src/main/resources/assets/fxml/profile.fxml @@ -20,14 +20,17 @@ - + + + + - + diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 720991f4d..2e2d5e0f1 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -268,6 +268,7 @@ world.name.enter=Enter the world name world.time=EEE, MMM d, yyyy HH:mm:ss profile=Game Directories +profile.already_exists=This name already exists, please consider another name. profile.default=Current directory profile.home=User home profile.instance_directory=Game Directory diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index f8b8595e4..7591ad524 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -268,6 +268,7 @@ world.name.enter=輸入世界名稱 world.time=yyyy 年 MM 月 dd 日 HH:mm:ss profile=遊戲目錄 +profile.already_exists=該名稱已存在 profile.default=目前目錄 profile.home=官方啟動器 profile.instance_directory=遊戲路徑 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 c7946b6e5..5531252b4 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -268,6 +268,7 @@ world.name.enter=输入世界名称 world.time=yyyy 年 MM 月 dd 日 HH:mm:ss profile=游戏目录 +profile.already_exists=该名称已存在 profile.default=当前目录 profile.home=官方启动器 profile.instance_directory=游戏路径