From 9f4fbe003198c96449037e92e12f3988dc19d8e7 Mon Sep 17 00:00:00 2001
From: RaphiMC <50594595+RaphiMC@users.noreply.github.com>
Date: Sat, 16 Sep 2023 20:55:31 +0200
Subject: [PATCH] Use event system for GUI related events
---
.../java/net/raphimc/viaproxy/ViaProxy.java | 3 ++-
.../java/net/raphimc/viaproxy/ui/AUITab.java | 6 -----
.../net/raphimc/viaproxy/ui/ViaProxyUI.java | 24 ++++++++++++++-----
.../viaproxy/ui/events/UICloseEvent.java | 21 ++++++++++++++++
.../viaproxy/ui/events/UIInitEvent.java | 21 ++++++++++++++++
.../raphimc/viaproxy/ui/impl/AccountsTab.java | 6 +++--
.../raphimc/viaproxy/ui/impl/AdvancedTab.java | 11 +++++----
.../raphimc/viaproxy/ui/impl/GeneralTab.java | 11 +++++----
8 files changed, 80 insertions(+), 23 deletions(-)
create mode 100644 src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java
create mode 100644 src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java
diff --git a/src/main/java/net/raphimc/viaproxy/ViaProxy.java b/src/main/java/net/raphimc/viaproxy/ViaProxy.java
index 6ecca44..0d39928 100644
--- a/src/main/java/net/raphimc/viaproxy/ViaProxy.java
+++ b/src/main/java/net/raphimc/viaproxy/ViaProxy.java
@@ -47,6 +47,7 @@ import net.raphimc.viaproxy.saves.SaveManager;
import net.raphimc.viaproxy.tasks.LoaderTask;
import net.raphimc.viaproxy.tasks.UpdateCheckTask;
import net.raphimc.viaproxy.ui.ViaProxyUI;
+import net.raphimc.viaproxy.ui.events.UIInitEvent;
import net.raphimc.viaproxy.util.ClassLoaderPriorityUtil;
import net.raphimc.viaproxy.util.logging.Logger;
@@ -143,7 +144,7 @@ public class ViaProxy {
Logger.LOGGER.info("Waiting for UI to be initialized...");
Thread.sleep(1000);
}
- ui.setReady();
+ ViaProxyUI.EVENT_MANAGER.call(new UIInitEvent());
Logger.LOGGER.info("ViaProxy started successfully!");
return;
}
diff --git a/src/main/java/net/raphimc/viaproxy/ui/AUITab.java b/src/main/java/net/raphimc/viaproxy/ui/AUITab.java
index 92701ec..ceff2c1 100644
--- a/src/main/java/net/raphimc/viaproxy/ui/AUITab.java
+++ b/src/main/java/net/raphimc/viaproxy/ui/AUITab.java
@@ -44,10 +44,4 @@ public abstract class AUITab {
protected abstract void init(final JPanel contentPane);
- public void setReady() {
- }
-
- public void onClose() {
- }
-
}
diff --git a/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java b/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java
index e56a759..9d88268 100644
--- a/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java
+++ b/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java
@@ -18,8 +18,14 @@
package net.raphimc.viaproxy.ui;
import com.formdev.flatlaf.FlatDarkLaf;
+import net.lenni0451.lambdaevents.EventHandler;
+import net.lenni0451.lambdaevents.LambdaManager;
+import net.lenni0451.lambdaevents.generator.LambdaMetaFactoryGenerator;
+import net.lenni0451.reflect.JavaBypass;
import net.lenni0451.reflect.stream.RStream;
import net.raphimc.viaproxy.ViaProxy;
+import net.raphimc.viaproxy.ui.events.UICloseEvent;
+import net.raphimc.viaproxy.ui.events.UIInitEvent;
import net.raphimc.viaproxy.ui.impl.AccountsTab;
import net.raphimc.viaproxy.ui.impl.AdvancedTab;
import net.raphimc.viaproxy.ui.impl.GeneralTab;
@@ -35,6 +41,8 @@ import java.util.List;
public class ViaProxyUI extends JFrame {
+ public static final LambdaManager EVENT_MANAGER = LambdaManager.threadSafe(new LambdaMetaFactoryGenerator(JavaBypass.TRUSTED_LOOKUP));
+
public static final int BORDER_PADDING = 10;
public static final int BODY_BLOCK_PADDING = 10;
@@ -59,6 +67,8 @@ public class ViaProxyUI extends JFrame {
ToolTipManager.sharedInstance().setDismissDelay(10_000);
SwingUtilities.updateComponentTreeUI(this);
this.setVisible(true);
+
+ EVENT_MANAGER.register(this);
}
private void setLookAndFeel() {
@@ -83,7 +93,7 @@ public class ViaProxyUI extends JFrame {
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
- for (AUITab tab : ViaProxyUI.this.tabs) tab.onClose();
+ EVENT_MANAGER.call(new UICloseEvent());
}
});
this.setSize(500, 360);
@@ -98,18 +108,20 @@ public class ViaProxyUI extends JFrame {
.fields()
.filter(field -> AUITab.class.isAssignableFrom(field.type()))
.forEach(field -> {
- AUITab tab = field.get();
+ final AUITab tab = field.get();
this.tabs.add(field.get());
tab.add(this.contentPane);
+ EVENT_MANAGER.register(tab);
});
this.contentPane.setEnabledAt(this.contentPane.indexOfTab(this.accountsTab.getName()), false);
}
-
- public void setReady() {
- for (AUITab tab : this.tabs) tab.setReady();
- for (int i = 0; i < this.contentPane.getTabCount(); i++) this.contentPane.setEnabledAt(i, true);
+ @EventHandler
+ private void onInit(final UIInitEvent event) {
+ for (int i = 0; i < this.contentPane.getTabCount(); i++) {
+ this.contentPane.setEnabledAt(i, true);
+ }
}
public void openURL(final String url) {
diff --git a/src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java b/src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java
new file mode 100644
index 0000000..7b49a39
--- /dev/null
+++ b/src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java
@@ -0,0 +1,21 @@
+/*
+ * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
+ * Copyright (C) 2023 RK_01/RaphiMC and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package net.raphimc.viaproxy.ui.events;
+
+public class UICloseEvent {
+}
diff --git a/src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java b/src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java
new file mode 100644
index 0000000..bcf0cc7
--- /dev/null
+++ b/src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java
@@ -0,0 +1,21 @@
+/*
+ * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
+ * Copyright (C) 2023 RK_01/RaphiMC and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package net.raphimc.viaproxy.ui.events;
+
+public class UIInitEvent {
+}
diff --git a/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java b/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java
index 35ec9e1..11a8182 100644
--- a/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java
+++ b/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java
@@ -17,6 +17,7 @@
*/
package net.raphimc.viaproxy.ui.impl;
+import net.lenni0451.lambdaevents.EventHandler;
import net.raphimc.mcauth.MinecraftAuth;
import net.raphimc.mcauth.step.msa.StepMsaDeviceCode;
import net.raphimc.mcauth.util.MicrosoftConstants;
@@ -27,6 +28,7 @@ import net.raphimc.viaproxy.saves.impl.accounts.BedrockAccount;
import net.raphimc.viaproxy.saves.impl.accounts.MicrosoftAccount;
import net.raphimc.viaproxy.ui.AUITab;
import net.raphimc.viaproxy.ui.ViaProxyUI;
+import net.raphimc.viaproxy.ui.events.UIInitEvent;
import net.raphimc.viaproxy.ui.popups.AddAccountPopup;
import net.raphimc.viaproxy.util.GBC;
import net.raphimc.viaproxy.util.TFunction;
@@ -216,8 +218,8 @@ public class AccountsTab extends AUITab {
contentPane.add(body, BorderLayout.CENTER);
}
- @Override
- public void setReady() {
+ @EventHandler
+ private void onInit(final UIInitEvent event) {
ViaProxy.saveManager.accountsSave.getAccounts().forEach(this::addAccount);
DefaultListModel model = (DefaultListModel) this.accountsList.getModel();
if (!model.isEmpty()) this.markSelected(0);
diff --git a/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java b/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java
index 20d6f4d..1e3d0a7 100644
--- a/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java
+++ b/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java
@@ -20,10 +20,13 @@ package net.raphimc.viaproxy.ui.impl;
import com.viaversion.viaversion.util.DumpUtil;
import gs.mclo.api.MclogsClient;
import gs.mclo.api.response.UploadLogResponse;
+import net.lenni0451.lambdaevents.EventHandler;
import net.raphimc.viaproxy.ViaProxy;
import net.raphimc.viaproxy.saves.impl.UISave;
import net.raphimc.viaproxy.ui.AUITab;
import net.raphimc.viaproxy.ui.ViaProxyUI;
+import net.raphimc.viaproxy.ui.events.UICloseEvent;
+import net.raphimc.viaproxy.ui.events.UIInitEvent;
import net.raphimc.viaproxy.util.GBC;
import net.raphimc.viaproxy.util.logging.Logger;
import org.apache.logging.log4j.LogManager;
@@ -200,15 +203,15 @@ public class AdvancedTab extends AUITab {
container.add(padding, BorderLayout.CENTER);
}
- @Override
- public void setReady() {
+ @EventHandler
+ private void onInit(final UIInitEvent event) {
SwingUtilities.invokeLater(() -> {
this.viaVersionDumpButton.setEnabled(true);
});
}
- @Override
- public void onClose() {
+ @EventHandler
+ private void onClose(final UICloseEvent event) {
UISave save = ViaProxy.saveManager.uiSave;
save.put("bind_port", String.valueOf(this.bindPort.getValue()));
save.put("proxy", this.proxy.getText());
diff --git a/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java b/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java
index bf932af..330241c 100644
--- a/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java
+++ b/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java
@@ -18,6 +18,7 @@
package net.raphimc.viaproxy.ui.impl;
import com.google.common.net.HostAndPort;
+import net.lenni0451.lambdaevents.EventHandler;
import net.raphimc.vialoader.util.VersionEnum;
import net.raphimc.viaproxy.ViaProxy;
import net.raphimc.viaproxy.cli.options.Options;
@@ -27,6 +28,8 @@ import net.raphimc.viaproxy.saves.impl.UISave;
import net.raphimc.viaproxy.saves.impl.accounts.OfflineAccount;
import net.raphimc.viaproxy.ui.AUITab;
import net.raphimc.viaproxy.ui.ViaProxyUI;
+import net.raphimc.viaproxy.ui.events.UICloseEvent;
+import net.raphimc.viaproxy.ui.events.UIInitEvent;
import net.raphimc.viaproxy.util.GBC;
import net.raphimc.viaproxy.util.logging.Logger;
import org.jdesktop.swingx.VerticalLayout;
@@ -185,16 +188,16 @@ public class GeneralTab extends AUITab {
parent.add(footer);
}
- @Override
- public void setReady() {
+ @EventHandler
+ private void setReady(final UIInitEvent event) {
SwingUtilities.invokeLater(() -> {
this.stateButton.setText("Start");
this.stateButton.setEnabled(true);
});
}
- @Override
- public void onClose() {
+ @EventHandler
+ private void onClose(final UICloseEvent event) {
UISave save = ViaProxy.saveManager.uiSave;
save.put("server_address", this.serverAddress.getText());
save.put("server_version", String.valueOf(this.serverVersion.getSelectedIndex()));