From 7fb9e241f1e0b7a86de379c9763862f0e5381ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+Ciilu@users.noreply.github.com> Date: Tue, 24 Feb 2026 22:58:07 +0800 Subject: [PATCH 1/2] update --- .../hmcl/ui/versions/VersionPage.java | 24 +++++++++++++++ .../hmcl/ui/versions/VersionSettingsPage.java | 29 +++++++++++++++---- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java index 7ea91bacb8..0184026260 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java @@ -21,6 +21,8 @@ import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.property.*; +import javafx.event.Event; +import javafx.event.EventType; import javafx.scene.Node; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; @@ -61,6 +63,13 @@ public class VersionPage extends DecoratorAnimatedPage implements DecoratorPage private String preferredVersionName = null; + public static class WorkingDirChangedEvent extends Event { + public static final EventType EVENT_TYPE = new EventType<>(Event.ANY, "WORKING_DIR_CHANGED"); + public WorkingDirChangedEvent() { + super(EVENT_TYPE); + } + } + public VersionPage() { versionSettingsTab.setNodeSupplier(loadVersionFor(() -> new VersionSettingsPage(false))); installerListTab.setNodeSupplier(loadVersionFor(InstallerListPage::new)); @@ -74,6 +83,21 @@ public VersionPage() { addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onNavigated); + addEventHandler(WorkingDirChangedEvent.EVENT_TYPE, event -> { + if (this.version.get() != null) { + if (installerListTab.isInitialized()) + installerListTab.getNode().loadVersion(getProfile(), getVersion()); + if (modListTab.isInitialized()) + modListTab.getNode().loadVersion(getProfile(), getVersion()); + if (resourcePackTab.isInitialized()) + resourcePackTab.getNode().loadVersion(getProfile(), getVersion()); + if (worldListTab.isInitialized()) + worldListTab.getNode().loadVersion(getProfile(), getVersion()); + if (schematicsTab.isInitialized()) + schematicsTab.getNode().loadVersion(getProfile(), getVersion()); + } + }); + listenerHolder.add(EventBus.EVENT_BUS.channel(RefreshedVersionsEvent.class).registerWeak(event -> checkSelectedVersion(), EventPriority.HIGHEST)); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index b5fe559312..bc4b3a356d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.ui.versions; import com.jfoenix.controls.*; -import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings; import javafx.beans.property.*; @@ -34,8 +33,12 @@ import javafx.scene.text.Text; import javafx.stage.FileChooser; import javafx.stage.Screen; -import org.jackhuang.hmcl.game.*; +import org.jackhuang.hmcl.game.GameDirectoryType; +import org.jackhuang.hmcl.game.HMCLGameRepository; +import org.jackhuang.hmcl.game.ProcessPriority; +import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.java.JavaManager; +import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.setting.*; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; @@ -48,7 +51,6 @@ import org.jackhuang.hmcl.util.javafx.PropertyUtils; import org.jackhuang.hmcl.util.javafx.SafeStringConverter; import org.jackhuang.hmcl.util.platform.Architecture; -import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.SystemInfo; import org.jackhuang.hmcl.util.platform.hardware.PhysicalMemoryStatus; @@ -99,6 +101,10 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag private final InvalidationListener usesGlobalListener; private final ChangeListener specificSettingsListener; private final InvalidationListener javaListener = any -> initJavaSubtitle(); + + private final ChangeListener gameDirTypeListener = (ob, o, n) -> fireWorkingDirChanged(); + private final ChangeListener gameDirListener = (ob, o, n) -> fireWorkingDirChanged(); + private boolean updatingJavaSetting = false; private boolean updatingSelectedJava = false; @@ -455,13 +461,20 @@ public VersionSettingsPage(boolean globalSetting) { else profile.getRepository().globalizeVersionSetting(versionId); - Platform.runLater(() -> loadVersion(profile, versionId)); + FXUtils.runInFX(() -> { + loadVersion(profile, versionId); + fireWorkingDirChanged(); + }); }; addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onDecoratorPageNavigating); componentList.disableProperty().bind(enableSpecificSettings.not()); } + + private void fireWorkingDirChanged() { + FXUtils.runInFX(() -> fireEvent(new VersionPage.WorkingDirChangedEvent())); + } @Override public void loadVersion(Profile profile, String versionId) { @@ -513,6 +526,9 @@ public void loadVersion(Profile profile, String versionId) { lastVersionSetting.defaultJavaPathPropertyProperty().removeListener(javaListener); lastVersionSetting.javaVersionProperty().removeListener(javaListener); + lastVersionSetting.gameDirTypeProperty().removeListener(gameDirTypeListener); + lastVersionSetting.gameDirProperty().removeListener(gameDirListener); + gameDirItem.selectedDataProperty().unbindBidirectional(lastVersionSetting.gameDirTypeProperty()); gameDirSublist.subtitleProperty().unbind(); @@ -589,6 +605,9 @@ public void loadVersion(Profile profile, String versionId) { gameDirSublist.subtitleProperty().bind(Bindings.createStringBinding(() -> profile.getRepository().getRunDirectory(versionId).toAbsolutePath().normalize().toString(), versionSetting.gameDirProperty(), versionSetting.gameDirTypeProperty())); + versionSetting.gameDirTypeProperty().addListener(gameDirTypeListener); + versionSetting.gameDirProperty().addListener(gameDirListener); + lastVersionSetting = versionSetting; initJavaSubtitle(); @@ -798,7 +817,7 @@ public void run() { if (Controllers.isStopped()) return; - Platform.runLater(() -> memoryStatusProperty.set(status)); + FXUtils.runInFX(() -> memoryStatusProperty.set(status)); try { //noinspection BusyWait From 494a62e59b32efd33e755384234c44880a8023f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+CiiLu@users.noreply.github.com> Date: Wed, 25 Feb 2026 21:26:34 +0800 Subject: [PATCH 2/2] Update VersionSettingsPage.java --- .../org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index bc4b3a356d..ad6ab14187 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.ui.versions; import com.jfoenix.controls.*; +import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings; import javafx.beans.property.*; @@ -817,7 +818,7 @@ public void run() { if (Controllers.isStopped()) return; - FXUtils.runInFX(() -> memoryStatusProperty.set(status)); + Platform.runLater(() -> memoryStatusProperty.set(status)); try { //noinspection BusyWait