diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java index b9c8e0c33..1e0bc2d8d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java @@ -52,6 +52,8 @@ public class InstallersPage extends Control implements WizardPage { protected JFXTextField txtName = new JFXTextField(); protected BooleanProperty installable = new SimpleBooleanProperty(); + private boolean isNameModifiedByUser = false; + public InstallersPage(WizardController controller, HMCLGameRepository repository, String gameVersion, DownloadProvider downloadProvider) { this.controller = controller; this.group = new InstallerItem.InstallerItemGroup(gameVersion, getInstallerItemStyle()); @@ -61,7 +63,8 @@ public class InstallersPage extends Control implements WizardPage { new Validator(i18n("install.new_game.already_exists"), str -> !repository.versionIdConflicts(str)), new Validator(i18n("install.new_game.malformed"), HMCLGameRepository::isValidVersionId)); installable.bind(createBooleanBinding(txtName::validate, txtName.textProperty())); - txtName.setText(gameVersion); + + txtName.textProperty().addListener((obs, oldText, newText) -> isNameModifiedByUser = true); for (InstallerItem library : group.getLibraries()) { String libraryId = library.getLibraryId(); @@ -103,6 +106,9 @@ public class InstallersPage extends Control implements WizardPage { library.versionProperty().set(null); } } + if (!isNameModifiedByUser) { + setTxtNameWithLoaders(); + } } @Override @@ -124,6 +130,49 @@ public class InstallersPage extends Control implements WizardPage { return new InstallersPageSkin(this); } + private void setTxtNameWithLoaders() { + StringBuilder nameBuilder = new StringBuilder(group.getGame().versionProperty().get().getVersion()); + + for (InstallerItem library : group.getLibraries()) { + String libraryId = library.getLibraryId().replace(LibraryAnalyzer.LibraryType.MINECRAFT.getPatchId(), ""); + if (!controller.getSettings().containsKey(libraryId)) { + continue; + } + + LibraryAnalyzer.LibraryType libraryType = LibraryAnalyzer.LibraryType.fromPatchId(libraryId); + if (libraryType != null) { + String loaderName; + switch (libraryType) { + case FORGE: + loaderName = i18n("install.installer.forge"); + break; + case NEO_FORGE: + loaderName = i18n("install.installer.neoforge"); + break; + case FABRIC: + loaderName = i18n("install.installer.fabric"); + break; + case LITELOADER: + loaderName = i18n("install.installer.liteloader"); + break; + case QUILT: + loaderName = i18n("install.installer.quilt"); + break; + case OPTIFINE: + loaderName = i18n("install.installer.optifine"); + break; + default: + continue; + } + + nameBuilder.append("-").append(loaderName); + } + } + + txtName.setText(nameBuilder.toString()); + isNameModifiedByUser = false; + } + protected static class InstallersPageSkin extends SkinBase { /** diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/LibraryAnalyzer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/LibraryAnalyzer.java index 71f963cfb..d7ac46571 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/LibraryAnalyzer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/LibraryAnalyzer.java @@ -270,6 +270,13 @@ public final class LibraryAnalyzer implements Iterable PATCH_ID_MAP = new HashMap<>(); + static { + for (LibraryType type : values()) { + PATCH_ID_MAP.put(type.getPatchId(), type); + } + } + LibraryType(boolean modLoader, String patchId, Pattern group, Pattern artifact, ModLoaderType modLoaderType) { this.modLoader = modLoader; this.patchId = patchId; @@ -291,10 +298,7 @@ public final class LibraryAnalyzer implements Iterable libraries) {