diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/event/AccountLoadingEvent.java b/HMCL/src/main/java/org/jackhuang/hmcl/event/AccountLoadingEvent.java index 1fc343485..02485fc97 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/event/AccountLoadingEvent.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/event/AccountLoadingEvent.java @@ -17,6 +17,13 @@ */ package org.jackhuang.hmcl.event; +import org.jackhuang.hmcl.auth.Account; +import org.jackhuang.hmcl.setting.Profile; +import org.jackhuang.hmcl.util.ToStringBuilder; + +import java.util.Collection; +import java.util.Collections; + /** * This event gets fired when loading accounts. *
@@ -26,14 +33,29 @@ package org.jackhuang.hmcl.event; */ public class AccountLoadingEvent extends Event { + private final Collection accounts; + /** * Constructor. * * @param source {@link org.jackhuang.hmcl.setting.Settings} */ - public AccountLoadingEvent(Object source) { + public AccountLoadingEvent(Object source, Collection accounts) { super(source); + this.accounts = Collections.unmodifiableCollection(accounts); } + + public Collection getAccounts() { + return accounts; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("source", source) + .append("accounts", accounts) + .toString(); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/event/OutOfDateEvent.java b/HMCL/src/main/java/org/jackhuang/hmcl/event/OutOfDateEvent.java index 9f5d25840..fe6fbfd4b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/event/OutOfDateEvent.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/event/OutOfDateEvent.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.event; +import org.jackhuang.hmcl.util.ToStringBuilder; import org.jackhuang.hmcl.util.VersionNumber; /** @@ -42,4 +43,11 @@ public final class OutOfDateEvent extends Event { return true; } + @Override + public String toString() { + return new ToStringBuilder(this) + .append("source", getSource()) + .append("version", getVersion()) + .toString(); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileChangedEvent.java b/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileChangedEvent.java index 87d229e44..2155d94cc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileChangedEvent.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileChangedEvent.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.event; import org.jackhuang.hmcl.setting.Profile; +import org.jackhuang.hmcl.util.ToStringBuilder; /** * This event gets fired when the selected profile changed. @@ -44,4 +45,11 @@ public final class ProfileChangedEvent extends Event { return profile; } + @Override + public String toString() { + return new ToStringBuilder(this) + .append("source", source) + .append("profile", profile) + .toString(); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileLoadingEvent.java b/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileLoadingEvent.java index f5ef78dc8..81ff05379 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileLoadingEvent.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/event/ProfileLoadingEvent.java @@ -17,6 +17,12 @@ */ package org.jackhuang.hmcl.event; +import org.jackhuang.hmcl.setting.Profile; +import org.jackhuang.hmcl.util.ToStringBuilder; + +import java.util.Collection; +import java.util.Collections; + /** * This event gets fired when loading profiles. *
@@ -26,14 +32,29 @@ package org.jackhuang.hmcl.event; */ public class ProfileLoadingEvent extends Event { + private final Collection profiles; + /** * Constructor. * * @param source {@link org.jackhuang.hmcl.setting.Settings} */ - public ProfileLoadingEvent(Object source) { + public ProfileLoadingEvent(Object source, Collection profiles) { super(source); + + this.profiles = Collections.unmodifiableCollection(profiles); } + public Collection getProfiles() { + return profiles; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("source", source) + .append("profiles", profiles) + .toString(); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index e16322193..2f5596e5d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -50,7 +50,6 @@ public final class LauncherHelper { public static final LauncherHelper INSTANCE = new LauncherHelper(); private LauncherHelper(){} - private TaskExecutor executor; public static final Queue PROCESSES = new ConcurrentLinkedQueue<>(); private final TaskExecutorDialogPane launchingStepsPane = new TaskExecutorDialogPane(() -> {}); @@ -78,7 +77,7 @@ public final class LauncherHelper { VersionSetting setting = profile.getVersionSetting(selectedVersion); Optional gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version)); - TaskExecutor executor = this.executor = Task.of(Schedulers.javafx(), () -> Controllers.dialog(launchingStepsPane)) + TaskExecutor executor = Task.of(Schedulers.javafx(), () -> Controllers.dialog(launchingStepsPane)) .then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.DEPENDENCIES))) .then(variables -> { if (setting.isNotCheckGame()) @@ -162,8 +161,7 @@ public final class LauncherHelper { Controllers.closeDialog(); }); } - - LauncherHelper.this.executor = null; + launchingStepsPane.setExecutor(null); } }); 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 4d56d93d6..6b7c4257b 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 org.jackhuang.hmcl.game.HMCLGameRepository; import org.jackhuang.hmcl.mod.ModManager; import org.jackhuang.hmcl.util.ImmediateObjectProperty; import org.jackhuang.hmcl.util.ImmediateStringProperty; +import org.jackhuang.hmcl.util.ToStringBuilder; import java.io.File; import java.lang.reflect.Type; @@ -146,6 +147,14 @@ public final class Profile { vs.setUsesGlobal(true); } + @Override + public String toString() { + return new ToStringBuilder(this) + .append("gameDir", getGameDir()) + .append("name", getName()) + .toString(); + } + public void addPropertyChangedListener(InvalidationListener listener) { nameProperty.addListener(listener); globalProperty.addListener(listener); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index 9a8830b5b..584d2e6a5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -535,7 +535,7 @@ public class Settings { } private void onProfileChanged() { - EventBus.EVENT_BUS.fireEvent(new ProfileChangedEvent(SETTINGS, getSelectedProfile())); + EventBus.EVENT_BUS.fireEvent(new ProfileChangedEvent(this, getSelectedProfile())); getSelectedProfile().getRepository().refreshVersionsAsync().start(); } @@ -548,11 +548,11 @@ public class Settings { * Invoked by loading GUI phase. */ public void onProfileLoading() { - EventBus.EVENT_BUS.fireEvent(new ProfileLoadingEvent(SETTINGS)); + EventBus.EVENT_BUS.fireEvent(new ProfileLoadingEvent(this, getProfiles())); onProfileChanged(); } public void onAccountLoading() { - EventBus.EVENT_BUS.fireEvent(new AccountLoadingEvent(SETTINGS)); + EventBus.EVENT_BUS.fireEvent(new AccountLoadingEvent(this, getAccounts())); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java index 7867986b7..a903880e4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java @@ -45,6 +45,7 @@ import javafx.scene.shape.Rectangle; import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.StageStyle; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.EnumBackgroundImage; import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.setting.Theme; @@ -140,7 +141,7 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza FXUtils.loadFXML(this, "/assets/fxml/decorator.fxml"); - onCloseButtonAction = new SimpleObjectProperty<>(this, "onCloseButtonAction", primaryStage::close); + onCloseButtonAction = new SimpleObjectProperty<>(this, "onCloseButtonAction", Launcher::stopApplication); primaryStage.initStyle(StageStyle.UNDECORATED); btnClose.setGraphic(close); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java index 249b4dd57..0038117a9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java @@ -57,7 +57,9 @@ public class TaskExecutorDialogPane extends StackPane { public void setExecutor(TaskExecutor executor) { this.executor = executor; - taskListPane.setExecutor(executor); + + if (executor != null) + taskListPane.setExecutor(executor); } public StringProperty titleProperty() { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java index d4e673776..a02afc07b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java @@ -37,6 +37,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { private static final HashMap SOURCE = new HashMap() { { put("javafx.fxml.LoadException", Launcher.i18n("crash.NoClassDefFound")); + put("Location is not set", Launcher.i18n("crash.NoClassDefFound")); put("UnsatisfiedLinkError", Launcher.i18n("crash.user_fault")); put("java.lang.NoClassDefFoundError", Launcher.i18n("crash.NoClassDefFound")); put("java.lang.VerifyError", Launcher.i18n("crash.NoClassDefFound")); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java index 9bc41f637..389a64d1f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java @@ -17,6 +17,8 @@ */ package org.jackhuang.hmcl.auth; +import org.jackhuang.hmcl.util.ToStringBuilder; + import java.util.Map; import java.util.UUID; @@ -64,4 +66,13 @@ public abstract class Account { public abstract Map toStorage(); public abstract void clearCache(); + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("username", getUsername()) + .append("character", getCharacter()) + .append("uuid", getUUID()) + .toString(); + } }