From b42213d1886ec14fe76faff8826ae5b5ae575546 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Wed, 22 Jul 2026 11:00:39 +0800 Subject: [PATCH 1/3] =?UTF-8?q?(27)=20=E7=BA=A6=E6=99=9A=E6=98=A5=E5=90=8C?= =?UTF-8?q?=E7=A5=AD=E5=A4=A9=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/download/AdditionalInstallersPage.java | 28 ++----------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java index 7464556d7d6..762874db33f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java @@ -18,10 +18,7 @@ package org.jackhuang.hmcl.ui.download; import javafx.beans.binding.Bindings; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; import org.jackhuang.hmcl.download.DownloadProvider; -import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.GameRepository; import org.jackhuang.hmcl.game.HMCLGameRepository; @@ -33,11 +30,9 @@ import java.util.Optional; -import static org.jackhuang.hmcl.download.LibraryAnalyzer.LibraryType.MINECRAFT; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; class AdditionalInstallersPage extends AbstractInstallersPage { - protected final BooleanProperty compatible = new SimpleBooleanProperty(); protected final GameRepository repository; protected final String gameVersion; protected final Version version; @@ -60,7 +55,7 @@ public AdditionalInstallersPage(String gameVersion, Version version, WizardContr }); } - installable.bind(Bindings.createBooleanBinding(() -> compatible.get() && txtName.validate(), txtName.textProperty(), compatible)); + installable.bind(Bindings.createBooleanBinding(() -> txtName.validate(), txtName.textProperty())); } @Override @@ -81,31 +76,14 @@ private String getVersion(String id) { @Override protected void reload() { - Version resolved = version.resolvePreservingPatches(repository); - LibraryAnalyzer analyzer = LibraryAnalyzer.analyze(resolved, repository.getGameVersion(resolved).orElse(null)); - String game = analyzer.getVersion(MINECRAFT).orElse(null); - String currentGameVersion = Lang.nonNull(getVersion("game"), game); - - boolean compatible = true; - for (InstallerItem library : group.getLibraries()) { String libraryId = library.getLibraryId(); - String version = analyzer.getVersion(libraryId).orElse(null); - String libraryVersion = Lang.requireNonNullElse(getVersion(libraryId), version); - boolean alreadyInstalled = version != null && !(controller.getSettings().get(libraryId) instanceof UpdateInstallerWizardProvider.RemoveVersionAction); - if (!"game".equals(libraryId) && currentGameVersion != null && !currentGameVersion.equals(game) && getVersion(libraryId) == null && alreadyInstalled) { - // For third-party libraries, if game version is being changed, and the library is not being reinstalled, - // warns the user that we should update the library. - library.versionProperty().set(new InstallerItem.InstalledState(libraryVersion, false, true)); - compatible = false; - } else if (alreadyInstalled || getVersion(libraryId) != null) { - library.versionProperty().set(new InstallerItem.InstalledState(libraryVersion, false, false)); + if (controller.getSettings().containsKey(libraryId)) { + library.versionProperty().set(new InstallerItem.InstalledState(getVersion(libraryId), false, false)); } else { library.versionProperty().set(null); } } - - this.compatible.set(compatible); } @Override From d5e4ec5c5a07ca05aad5fbcd84500740022b0efa Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Thu, 30 Jul 2026 21:13:11 +0800 Subject: [PATCH 2/3] =?UTF-8?q?(41)=20=E8=BF=8E=E6=88=96=E9=A5=AF=20?= =?UTF-8?q?=E7=8B=82=E4=B8=8E=E8=B0=A6=20=E9=83=BD=E5=90=88=E8=A1=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/download/AdditionalInstallersPage.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java index 762874db33f..4ca874db616 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java @@ -20,9 +20,8 @@ import javafx.beans.binding.Bindings; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.RemoteVersion; -import org.jackhuang.hmcl.game.GameRepository; +import org.jackhuang.hmcl.game.GameInstanceManifest; import org.jackhuang.hmcl.game.HMCLGameRepository; -import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.ui.InstallerItem; import org.jackhuang.hmcl.ui.wizard.WizardController; import org.jackhuang.hmcl.util.Lang; @@ -33,17 +32,17 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n; class AdditionalInstallersPage extends AbstractInstallersPage { - protected final GameRepository repository; + protected final HMCLGameRepository repository; protected final String gameVersion; - protected final Version version; + protected final GameInstanceManifest manifest; - public AdditionalInstallersPage(String gameVersion, Version version, WizardController controller, HMCLGameRepository repository, DownloadProvider downloadProvider) { + public AdditionalInstallersPage(String gameVersion, GameInstanceManifest manifest, WizardController controller, HMCLGameRepository repository, DownloadProvider downloadProvider) { super(controller, gameVersion, downloadProvider); this.gameVersion = gameVersion; - this.version = version; + this.manifest = manifest; this.repository = repository; - txtName.setText(version.getId()); + txtName.setText(manifest.id().toString()); txtName.setEditable(false); for (InstallerItem library : group.getLibraries()) { @@ -89,4 +88,13 @@ protected void reload() { @Override public void cleanup(SettingsMap settings) { } + + @Override + protected boolean showExtendPane() { + return false; + } + + @Override + protected void resetDefaultName() { + } } From f67010f765a672f1784ab936ed99ef810f9623c8 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Sat, 5 Sep 2026 22:55:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?<8>=20=E6=95=B0=E5=9C=86=E7=BC=BA=20?= =?UTF-8?q?=E9=A3=8E=E9=9B=A8=E6=9D=B3=E5=A6=82=E5=B9=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/download/AdditionalInstallersPage.java | 37 +++++-------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java index 9834ca71ea4..816530f31f4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java @@ -25,29 +25,26 @@ import org.jackhuang.hmcl.game.GameComponentType; import org.jackhuang.hmcl.game.GameInstanceManifest; import org.jackhuang.hmcl.game.HMCLGameInstance; -import org.jackhuang.hmcl.download.RemoteVersion; -import org.jackhuang.hmcl.game.GameComponentType; -import org.jackhuang.hmcl.game.HMCLGameInstance; import org.jackhuang.hmcl.ui.InstallerItem; import org.jackhuang.hmcl.ui.wizard.WizardController; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.SettingsMap; -import org.jetbrains.annotations.Nullable; import java.util.Optional; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; -/// Displays optional component changes while updating an existing game instance. class AdditionalInstallersPage extends AbstractInstallersPage { - /// Creates a page for selecting additional component changes. - /// - /// @param instance the instance being updated - /// @param gameVersion the selected game version - /// @param controller the wizard controller that stores the selected changes - /// @param downloadProvider the provider used to retrieve available component versions + protected final BooleanProperty compatible = new SimpleBooleanProperty(); + protected final String gameVersion; + protected final GameInstanceManifest manifest; + protected final HMCLGameInstance instance; + public AdditionalInstallersPage(HMCLGameInstance instance, String gameVersion, WizardController controller, DownloadProvider downloadProvider) { super(controller, gameVersion, downloadProvider); + this.instance = instance; + this.gameVersion = gameVersion; + this.manifest = instance.getManifest(); txtName.setText(instance.getId().id()); txtName.setEditable(false); @@ -65,31 +62,22 @@ public AdditionalInstallersPage(HMCLGameInstance instance, String gameVersion, W installable.bind(Bindings.createBooleanBinding(() -> txtName.validate(), txtName.textProperty())); } - /// Finishes the update wizard. @Override protected void onInstall() { controller.onFinish(); } - /// Returns the title of the installer selection page. - /// - /// @return the localized page title @Override public String getTitle() { return i18n("install.change_version.title", instance.getId().id()); } - /// Returns the selected version of a component, or `null` if no version is selected. - /// - /// @param type the component type - /// @return the selected component version, or `null` - private @Nullable String getVersion(GameComponentType type) { + private String getVersion(GameComponentType type) { return Optional.ofNullable(controller.getSettings().get(type.getPatchId())) .flatMap(it -> Lang.tryCast(it, ComponentRemoteVersion.class)) .map(ComponentRemoteVersion::getSelfVersion).orElse(null); } - /// Refreshes component states from the changes selected in the wizard. @Override protected void reload() { for (InstallerItem component : group.getComponents()) { @@ -102,22 +90,15 @@ protected void reload() { } } - /// Leaves the wizard settings unchanged when navigating away from this page. - /// - /// @param settings the wizard settings @Override public void cleanup(SettingsMap settings) { } - /// Returns whether name-field extension controls are displayed. - /// - /// @return `false` @Override protected boolean showExtendPane() { return false; } - /// Performs no action because the instance name cannot be edited on this page. @Override protected void resetDefaultName() { }