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