From dec307b5313300a01850f46d9443217493ee61a7 Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Sun, 13 Oct 2024 21:46:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E5=90=8D=E8=BE=93=E5=85=A5=E6=A1=86?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=B7=B2=E9=80=89=E6=8B=A9=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=99=A8=E5=90=8D=E7=A7=B0=20(#3234)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update InstallersPage.java * 优化代码 * Update InstallersPage.java * Update InstallersPage.java * fix: checkstyle * 给 LibraryAnalyzer.LibraryType.fromPatchId 稍微优化一下,把她里面的实现改为一个预先生成的 map, 相信你知道怎么把这个函数改成一个 lookupMap.get(patchId) 的形式 * Update InstallersPage.java * Update InstallersPage.java * Fix * update --------- Co-authored-by: Glavo --- .../hmcl/ui/download/InstallersPage.java | 51 ++++++++++++++++++- .../hmcl/download/LibraryAnalyzer.java | 12 +++-- 2 files changed, 58 insertions(+), 5 deletions(-) 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) {