From 419229ff15c4c6a8ea1d3220021fce5ec2f25f46 Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Mon, 26 Feb 2024 00:21:14 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=96=B0?=
=?UTF-8?q?=E7=89=88=E7=8E=A9=E5=AE=B6=E4=BF=A1=E6=81=AF=E5=8A=A0=E8=BD=BD?=
=?UTF-8?q?=E5=92=8C=E8=B7=A8=E6=9C=8D=E5=90=8C=E6=AD=A5=E7=9A=84=E9=97=AE?=
=?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 8 +-
.../plugin/ball/bukkit/HamsterBallPlugin.java | 8 +-
.../listener/UpdatePlayerInfoListener.java | 2 +-
.../ball/bukkit/util/BallBukkitUtils.java | 3 +-
.../plugin/ball/bungee/HamsterBallPlugin.java | 27 ++--
.../bungee/listener/BallBungeeListener.java | 137 ++++++++++++------
.../bungee/listener/BallBungeeListenerV2.java | 107 --------------
.../listener/BallBungeeMainListener.java | 60 ++++++++
.../listener/UpdatePlayerInfoListener.java | 15 +-
.../ball/bungee/util/BallBungeeCordUtils.java | 5 +-
.../mc/plugin/ball/common/api/BallAPI.java | 47 +++---
.../common/listener/BallCommonListener.java | 123 +++++++++++++++-
.../common/listener/BallRedisListener.java | 99 -------------
build.gradle.kts | 2 +-
14 files changed, 326 insertions(+), 317 deletions(-)
delete mode 100644 ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListenerV2.java
create mode 100644 ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeMainListener.java
diff --git a/README.md b/README.md
index 953972e..525874e 100644
--- a/README.md
+++ b/README.md
@@ -51,9 +51,9 @@ repositories {
dependencies {
// 对于 Bukkit 插件
- compileOnly("cn.hamster3.mc.plugin:ball-bukkit:1.5.2")
+ compileOnly("cn.hamster3.mc.plugin:ball-bukkit:1.5.3")
// 对于 BungeeCord 插件
- compileOnly("cn.hamster3.mc.plugin:ball-bungee:1.5.2")
+ compileOnly("cn.hamster3.mc.plugin:ball-bungee:1.5.3")
}
```
@@ -79,13 +79,13 @@ dependencies {
cn.hamster3.mc.plugin
ball-bukkit
- 1.5.2
+ 1.5.3
cn.hamster3.mc.plugin
ball-bungee
- 1.5.2
+ 1.5.3
diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java
index d15dd6d..d701e61 100644
--- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java
+++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java
@@ -62,7 +62,7 @@ public class HamsterBallPlugin extends JavaPlugin {
BallAPI.getInstance().getEventBus().register(BallBukkitListener.INSTANCE);
logger.info("已注册监听器 BallBukkitListener");
if (BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) {
- BallAPI.getInstance().subscribe(BallAPI.PLAYER_INFO_UPDATE_CHANNEL);
+ BallAPI.getInstance().subscribe(BallAPI.PLAYER_INFO_CHANNEL);
Bukkit.getPluginManager().registerEvents(UpdatePlayerInfoListener.INSTANCE, this);
BallAPI.getInstance().getEventBus().register(UpdatePlayerInfoListener.INSTANCE);
logger.info("已注册监听器 UpdatePlayerInfoListener");
@@ -76,15 +76,17 @@ public class HamsterBallPlugin extends JavaPlugin {
playerInfo.setOnline(false);
BallBukkitUtils.uploadPlayerInfo(playerInfo);
});
+ } else {
+ BallAPI.getInstance().subscribeIgnorePrefix(BallAPI.PLAYER_INFO_CHANNEL);
}
sync(() -> {
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
PlaceholderHook.INSTANCE.register();
logger.info("已挂载 PlaceholderAPI 变量");
}
- BallAPI.getInstance().sendBallMessage(
+ BallAPI.getInstance().sendRawBallMessage(
BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(),
- new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()), false
+ new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
);
});
long time = System.currentTimeMillis() - start;
diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java
index 75c09bc..38e0a0f 100644
--- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java
+++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java
@@ -26,7 +26,7 @@ public class UpdatePlayerInfoListener implements Listener {
@Subscribe
public void onBallPlayerLogin(BallPlayerLoginEvent event) {
BallPlayerInfo info = event.getPlayerInfo();
- PLAYER_PROXY_SERVER.put(info.getUuid(), BallAPI.getInstance().getBallConfig().getChannelPrefix() + ":" + info.getProxyServer());
+ PLAYER_PROXY_SERVER.put(info.getUuid(), info.getProxyServer());
}
@EventHandler(ignoreCancelled = true)
diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java
index cc7b838..a169e35 100644
--- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java
+++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java
@@ -16,6 +16,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
+@SuppressWarnings("CallToPrintStackTrace")
public final class BallBukkitUtils {
private BallBukkitUtils() {
}
@@ -65,7 +66,7 @@ public final class BallBukkitUtils {
e.printStackTrace();
}
BallAPI.getInstance().sendBallMessage(
- BallAPI.PLAYER_INFO_UPDATE_CHANNEL,
+ BallAPI.PLAYER_INFO_CHANNEL,
BallActions.BallPlayerInfoUpdate.name(),
new BallPlayerInfoUpdateEvent(playerInfo)
);
diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/HamsterBallPlugin.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/HamsterBallPlugin.java
index ee7da6e..9ce7598 100644
--- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/HamsterBallPlugin.java
+++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/HamsterBallPlugin.java
@@ -2,25 +2,24 @@ package cn.hamster3.mc.plugin.ball.bungee;
import cn.hamster3.mc.plugin.ball.bungee.api.BallBungeeCordAPI;
import cn.hamster3.mc.plugin.ball.bungee.listener.BallBungeeListener;
-import cn.hamster3.mc.plugin.ball.bungee.listener.BallBungeeListenerV2;
+import cn.hamster3.mc.plugin.ball.bungee.listener.BallBungeeMainListener;
import cn.hamster3.mc.plugin.ball.bungee.listener.UpdatePlayerInfoListener;
import cn.hamster3.mc.plugin.ball.bungee.util.BallBungeeCordUtils;
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
import cn.hamster3.mc.plugin.ball.common.event.BallActions;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
+import lombok.Getter;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.plugin.Plugin;
import java.util.logging.Logger;
+@SuppressWarnings("CallToPrintStackTrace")
public class HamsterBallPlugin extends Plugin {
+ @Getter
private static HamsterBallPlugin instance;
- public static HamsterBallPlugin getInstance() {
- return instance;
- }
-
@Override
public void onLoad() {
long start = System.currentTimeMillis();
@@ -48,16 +47,21 @@ public class HamsterBallPlugin extends Plugin {
} catch (Exception e) {
e.printStackTrace();
}
- ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeListener.INSTANCE);
+ BallAPI.getInstance().getEventBus().register(BallBungeeListener.INSTANCE);
logger.info("已注册监听器 BallBungeeListener");
- BallAPI.getInstance().getEventBus().register(BallBungeeListenerV2.INSTANCE);
- logger.info("已注册监听器 BallBungeeListenerV2");
+ ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeMainListener.INSTANCE);
+ logger.info("已注册监听器 BallBungeeMainListener");
ProxyServer.getInstance().getPluginManager().registerListener(this, UpdatePlayerInfoListener.INSTANCE);
logger.info("已注册监听器 UpdatePlayerInfoListener");
- BallAPI.getInstance().sendBallMessage(
+
+ if (BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) {
+ BallAPI.getInstance().subscribePatterns("*" + BallAPI.PLAYER_INFO_CHANNEL);
+ } else {
+ BallAPI.getInstance().subscribeIgnorePrefix(BallAPI.PLAYER_INFO_CHANNEL);
+ }
+ BallAPI.getInstance().sendRawBallMessage(
BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(),
- new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()),
- false
+ new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
);
// 移除失效的在线玩家
BallAPI.getInstance().getAllPlayerInfo().values()
@@ -68,7 +72,6 @@ public class HamsterBallPlugin extends Plugin {
playerInfo.setOnline(false);
BallBungeeCordUtils.uploadPlayerInfo(playerInfo);
});
-
long time = System.currentTimeMillis() - start;
logger.info("仓鼠球启动完成,总计耗时 " + time + " ms");
}
diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListener.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListener.java
index 28fa283..878d004 100644
--- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListener.java
+++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListener.java
@@ -1,62 +1,107 @@
package cn.hamster3.mc.plugin.ball.bungee.listener;
-import cn.hamster3.mc.plugin.ball.bungee.util.BallBungeeCordUtils;
+import cn.hamster3.mc.plugin.ball.bungee.HamsterBallPlugin;
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
-import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
-import cn.hamster3.mc.plugin.ball.common.event.BallActions;
-import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerLoginEvent;
-import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerPostLoginEvent;
-import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerPreLoginEvent;
-import net.md_5.bungee.api.connection.PendingConnection;
+import cn.hamster3.mc.plugin.ball.common.entity.BallServerType;
+import cn.hamster3.mc.plugin.ball.common.event.operate.*;
+import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
+import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.audience.Audience;
+import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
+import com.google.common.eventbus.Subscribe;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.chat.BaseComponent;
+import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.event.LoginEvent;
-import net.md_5.bungee.api.event.PostLoginEvent;
-import net.md_5.bungee.api.event.PreLoginEvent;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.event.EventHandler;
-import net.md_5.bungee.event.EventPriority;
-public final class BallBungeeListener implements Listener {
+import java.util.UUID;
+
+public class BallBungeeListener {
public static final BallBungeeListener INSTANCE = new BallBungeeListener();
private BallBungeeListener() {
}
- @EventHandler(priority = EventPriority.HIGH)
- public void onPreLogin(PreLoginEvent event) {
- BallAPI.getInstance().sendBallMessage(
- BallAPI.BALL_CHANNEL,
- BallActions.BallPlayerPreLogin.name(),
- new BallPlayerPreLoginEvent(event.getConnection().getName()),
- false
- );
- }
-
- @EventHandler(priority = EventPriority.HIGH)
- public void onLogin(LoginEvent event) {
- if (event.isCancelled()) {
+ @Subscribe
+ public void onDispatchConsoleCommand(DispatchConsoleCommandEvent event) {
+ if (event.getType() != null && event.getType() != BallServerType.PROXY) {
return;
}
- PendingConnection connection = event.getConnection();
- BallAPI.getInstance().sendBallMessage(
- BallAPI.BALL_CHANNEL,
- BallActions.BallPlayerLogin.name(),
- new BallPlayerLoginEvent(new BallPlayerInfo(
- connection.getUniqueId(), connection.getName(), "connecting",
- BallAPI.getInstance().getLocalServerId(), true
- )), false
- );
+ if (event.getServerID() != null && !BallAPI.getInstance().isLocalServer(event.getServerID())) {
+ return;
+ }
+ ProxyServer server = ProxyServer.getInstance();
+ server.getPluginManager().dispatchCommand(server.getConsole(), event.getCommand());
}
- @EventHandler(priority = EventPriority.HIGH)
- public void onPostLogin(PostLoginEvent event) {
- ProxiedPlayer player = event.getPlayer();
- BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true);
- BallAPI.getInstance().sendBallMessage(
- BallAPI.BALL_CHANNEL,
- BallActions.BallPlayerPostLogin.name(),
- new BallPlayerPostLoginEvent(playerInfo),
- false
- );
+ @Subscribe
+ public void onDispatchPlayerCommandEvent(DispatchPlayerCommandEvent event) {
+ if (event.getType() != null && event.getType() != BallServerType.GAME) {
+ return;
+ }
+ ProxyServer server = ProxyServer.getInstance();
+ if (event.getUuid() != null) {
+ ProxiedPlayer player = server.getPlayer(event.getUuid());
+ if (player == null) {
+ return;
+ }
+ server.getPluginManager().dispatchCommand(player, event.getCommand());
+ return;
+ }
+ for (ProxiedPlayer player : server.getPlayers()) {
+ server.getPluginManager().dispatchCommand(player, event.getCommand());
+ }
+ }
+
+ @Subscribe
+ public void onKickPlayerEvent(KickPlayerEvent event) {
+ ProxiedPlayer player = ProxyServer.getInstance().getPlayer(event.getUuid());
+ BaseComponent[] components = BungeeComponentSerializer.get().serialize(event.getReason());
+ player.disconnect(components);
+ }
+
+ @Subscribe
+ public void onSendMessageToPlayerEvent(SendMessageToPlayerEvent event) {
+ for (UUID receiver : event.getReceivers()) {
+ Audience audience = CoreAPI.getInstance().getAudienceProvider().player(receiver);
+ event.getMessage().show(audience);
+ }
+ }
+
+ @Subscribe
+ public void onSendPlayerToLocationEvent(SendPlayerToLocationEvent event) {
+ String serverID = event.getLocation().getServerID();
+ ServerInfo serverInfo = ProxyServer.getInstance().getServerInfo(serverID);
+ if (serverInfo == null) {
+ HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 服务器 " + serverID + " 不在线");
+ return;
+ }
+ for (UUID uuid : event.getSendPlayerUUID()) {
+ ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid);
+ if (player == null) {
+ continue;
+ }
+ if (player.getServer().getInfo().getName().equals(serverID)) {
+ continue;
+ }
+ player.connect(serverInfo);
+ }
+ }
+
+ @Subscribe
+ public void onSendPlayerToPlayerEvent(SendPlayerToPlayerEvent event) {
+ UUID toPlayerUUID = event.getToPlayerUUID();
+ ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID);
+ if (toPlayer == null) {
+ HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线");
+ return;
+ }
+ ServerInfo toServer = toPlayer.getServer().getInfo();
+ for (UUID uuid : event.getSendPlayerUUID()) {
+ ProxiedPlayer sendPlayer = ProxyServer.getInstance().getPlayer(uuid);
+ if (sendPlayer.getServer().getInfo().getName().equals(toServer.getName())) {
+ continue;
+ }
+ sendPlayer.connect(toServer);
+ }
}
}
diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListenerV2.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListenerV2.java
deleted file mode 100644
index 15b7025..0000000
--- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeListenerV2.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package cn.hamster3.mc.plugin.ball.bungee.listener;
-
-import cn.hamster3.mc.plugin.ball.bungee.HamsterBallPlugin;
-import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
-import cn.hamster3.mc.plugin.ball.common.entity.BallServerType;
-import cn.hamster3.mc.plugin.ball.common.event.operate.*;
-import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
-import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.audience.Audience;
-import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
-import com.google.common.eventbus.Subscribe;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.BaseComponent;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
-import java.util.UUID;
-
-public class BallBungeeListenerV2 {
- public static final BallBungeeListenerV2 INSTANCE = new BallBungeeListenerV2();
-
- private BallBungeeListenerV2() {
- }
-
- @Subscribe
- public void onDispatchConsoleCommand(DispatchConsoleCommandEvent event) {
- if (event.getType() != null && event.getType() != BallServerType.PROXY) {
- return;
- }
- if (event.getServerID() != null && !BallAPI.getInstance().isLocalServer(event.getServerID())) {
- return;
- }
- ProxyServer server = ProxyServer.getInstance();
- server.getPluginManager().dispatchCommand(server.getConsole(), event.getCommand());
- }
-
- @Subscribe
- public void onDispatchPlayerCommandEvent(DispatchPlayerCommandEvent event) {
- if (event.getType() != null && event.getType() != BallServerType.GAME) {
- return;
- }
- ProxyServer server = ProxyServer.getInstance();
- if (event.getUuid() != null) {
- ProxiedPlayer player = server.getPlayer(event.getUuid());
- if (player == null) {
- return;
- }
- server.getPluginManager().dispatchCommand(player, event.getCommand());
- return;
- }
- for (ProxiedPlayer player : server.getPlayers()) {
- server.getPluginManager().dispatchCommand(player, event.getCommand());
- }
- }
-
- @Subscribe
- public void onKickPlayerEvent(KickPlayerEvent event) {
- ProxiedPlayer player = ProxyServer.getInstance().getPlayer(event.getUuid());
- BaseComponent[] components = BungeeComponentSerializer.get().serialize(event.getReason());
- player.disconnect(components);
- }
-
- @Subscribe
- public void onSendMessageToPlayerEvent(SendMessageToPlayerEvent event) {
- for (UUID receiver : event.getReceivers()) {
- Audience audience = CoreAPI.getInstance().getAudienceProvider().player(receiver);
- event.getMessage().show(audience);
- }
- }
-
- @Subscribe
- public void onSendPlayerToLocationEvent(SendPlayerToLocationEvent event) {
- String serverID = event.getLocation().getServerID();
- ServerInfo serverInfo = ProxyServer.getInstance().getServerInfo(serverID);
- if (serverInfo == null) {
- HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 服务器 " + serverID + " 不在线");
- return;
- }
- for (UUID uuid : event.getSendPlayerUUID()) {
- ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid);
- if (player == null) {
- continue;
- }
- if (player.getServer().getInfo().getName().equals(serverID)) {
- continue;
- }
- player.connect(serverInfo);
- }
- }
-
- @Subscribe
- public void onSendPlayerToPlayerEvent(SendPlayerToPlayerEvent event) {
- UUID toPlayerUUID = event.getToPlayerUUID();
- ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID);
- if (toPlayer == null) {
- HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线");
- return;
- }
- ServerInfo toServer = toPlayer.getServer().getInfo();
- for (UUID uuid : event.getSendPlayerUUID()) {
- ProxiedPlayer sendPlayer = ProxyServer.getInstance().getPlayer(uuid);
- if (sendPlayer.getServer().getInfo().getName().equals(toServer.getName())) {
- continue;
- }
- sendPlayer.connect(toServer);
- }
- }
-}
diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeMainListener.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeMainListener.java
new file mode 100644
index 0000000..89019e7
--- /dev/null
+++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeMainListener.java
@@ -0,0 +1,60 @@
+package cn.hamster3.mc.plugin.ball.bungee.listener;
+
+import cn.hamster3.mc.plugin.ball.bungee.util.BallBungeeCordUtils;
+import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
+import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
+import cn.hamster3.mc.plugin.ball.common.event.BallActions;
+import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerLoginEvent;
+import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerPostLoginEvent;
+import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerPreLoginEvent;
+import net.md_5.bungee.api.connection.PendingConnection;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.event.LoginEvent;
+import net.md_5.bungee.api.event.PostLoginEvent;
+import net.md_5.bungee.api.event.PreLoginEvent;
+import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.event.EventHandler;
+import net.md_5.bungee.event.EventPriority;
+
+public final class BallBungeeMainListener implements Listener {
+ public static final BallBungeeMainListener INSTANCE = new BallBungeeMainListener();
+
+ private BallBungeeMainListener() {
+ }
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void onPreLogin(PreLoginEvent event) {
+ BallAPI.getInstance().sendRawBallMessage(
+ BallAPI.BALL_CHANNEL,
+ BallActions.BallPlayerPreLogin.name(),
+ new BallPlayerPreLoginEvent(event.getConnection().getName())
+ );
+ }
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void onLogin(LoginEvent event) {
+ if (event.isCancelled()) {
+ return;
+ }
+ PendingConnection connection = event.getConnection();
+ BallAPI.getInstance().sendRawBallMessage(
+ BallAPI.BALL_CHANNEL,
+ BallActions.BallPlayerLogin.name(),
+ new BallPlayerLoginEvent(new BallPlayerInfo(
+ connection.getUniqueId(), connection.getName(), "connecting",
+ BallAPI.getInstance().getLocalServerId(), true
+ ))
+ );
+ }
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void onPostLogin(PostLoginEvent event) {
+ ProxiedPlayer player = event.getPlayer();
+ BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true);
+ BallAPI.getInstance().sendRawBallMessage(
+ BallAPI.BALL_CHANNEL,
+ BallActions.BallPlayerPostLogin.name(),
+ new BallPlayerPostLoginEvent(playerInfo)
+ );
+ }
+}
diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/UpdatePlayerInfoListener.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/UpdatePlayerInfoListener.java
index 5155192..049ec28 100644
--- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/UpdatePlayerInfoListener.java
+++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/UpdatePlayerInfoListener.java
@@ -26,11 +26,10 @@ public class UpdatePlayerInfoListener implements Listener {
ProxiedPlayer player = event.getPlayer();
BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true);
playerInfo.setGameServer(event.getTarget().getName());
- BallAPI.getInstance().sendBallMessage(
+ BallAPI.getInstance().sendRawBallMessage(
BallAPI.BALL_CHANNEL,
BallActions.BallPlayerPreConnectServer.name(),
- new BallPlayerPreConnectServerEvent(playerInfo, playerInfo.getGameServer(), event.getTarget().getName()),
- false
+ new BallPlayerPreConnectServerEvent(playerInfo, playerInfo.getGameServer(), event.getTarget().getName())
);
BallBungeeCordUtils.uploadPlayerInfo(playerInfo);
}
@@ -40,11 +39,10 @@ public class UpdatePlayerInfoListener implements Listener {
ProxiedPlayer player = event.getPlayer();
BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true);
playerInfo.setGameServer(event.getServer().getInfo().getName());
- BallAPI.getInstance().sendBallMessage(
+ BallAPI.getInstance().sendRawBallMessage(
BallAPI.BALL_CHANNEL,
BallActions.BallPlayerPostConnectServer.name(),
- new BallPlayerPostConnectServerEvent(playerInfo),
- false
+ new BallPlayerPostConnectServerEvent(playerInfo)
);
BallBungeeCordUtils.uploadPlayerInfo(playerInfo);
}
@@ -53,11 +51,10 @@ public class UpdatePlayerInfoListener implements Listener {
public void onPlayerDisconnect(PlayerDisconnectEvent event) {
ProxiedPlayer player = event.getPlayer();
BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, false);
- BallAPI.getInstance().sendBallMessage(
+ BallAPI.getInstance().sendRawBallMessage(
BallAPI.BALL_CHANNEL,
BallActions.BallPlayerLogout.name(),
- new BallPlayerLogoutEvent(playerInfo),
- false
+ new BallPlayerLogoutEvent(playerInfo)
);
BallBungeeCordUtils.uploadPlayerInfo(playerInfo);
}
diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java
index dd1d7ea..cb78d82 100644
--- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java
+++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java
@@ -18,6 +18,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
+@SuppressWarnings("CallToPrintStackTrace")
public final class BallBungeeCordUtils {
private BallBungeeCordUtils() {
}
@@ -51,8 +52,8 @@ public final class BallBungeeCordUtils {
e.printStackTrace();
}
if (!BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) {
- BallAPI.getInstance().sendBallMessage(
- BallAPI.PLAYER_INFO_UPDATE_CHANNEL,
+ BallAPI.getInstance().sendRawBallMessage(
+ BallAPI.PLAYER_INFO_CHANNEL,
BallActions.BallPlayerInfoUpdate.name(),
new BallPlayerInfoUpdateEvent(playerInfo)
);
diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java
index e98ad47..5874fa2 100644
--- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java
+++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java
@@ -30,7 +30,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
@Getter
-@SuppressWarnings("unused")
+@SuppressWarnings({"unused", "CallToPrintStackTrace"})
public abstract class BallAPI {
/**
* API 使用的通信频道
@@ -39,7 +39,7 @@ public abstract class BallAPI {
/**
* API 使用的玩家信息更新通信频道
*/
- public static final String PLAYER_INFO_UPDATE_CHANNEL = "HamsterBall:PlayerInfo";
+ public static final String PLAYER_INFO_CHANNEL = "HamsterBall:PlayerInfo";
/**
* API 实例
*/
@@ -354,8 +354,8 @@ public abstract class BallAPI {
* @param doneMessage 传送完成后显示的消息
*/
public void sendPlayerToLocation(@NotNull Collection sendPlayerUUID, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) {
- sendBallMessage(BALL_CHANNEL, BallActions.SendPlayerToLocation.name(),
- new SendPlayerToLocationEvent(new HashSet<>(sendPlayerUUID), location, doneMessage), false
+ sendRawBallMessage(BALL_CHANNEL, BallActions.SendPlayerToLocation.name(),
+ new SendPlayerToLocationEvent(new HashSet<>(sendPlayerUUID), location, doneMessage)
);
}
@@ -384,11 +384,10 @@ public abstract class BallAPI {
* @param doneTargetMessage 传送完成后目标玩家显示的消息,自动将 %player_name% 替换成被传送者的名称
*/
public void sendPlayerToPlayer(@NotNull Collection sendPlayerUUID, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) {
- sendBallMessage(
+ sendRawBallMessage(
BALL_CHANNEL,
BallActions.SendPlayerToPlayer.name(),
- new SendPlayerToPlayerEvent(new HashSet<>(sendPlayerUUID), toPlayer, doneMessage, doneTargetMessage),
- false
+ new SendPlayerToPlayerEvent(new HashSet<>(sendPlayerUUID), toPlayer, doneMessage, doneTargetMessage)
);
}
@@ -403,14 +402,13 @@ public abstract class BallAPI {
}
/**
- * 发送一条服务消息
+ * 发送一条服务消息,不自动添加频道前缀
*
* @param channel 消息频道
* @param action 执行动作
- * @param prefix 是否自动为消息频道添加分组前缀
*/
- public void sendBallMessage(@NotNull String channel, @NotNull String action, boolean prefix) {
- sendBallMessage(channel, new BallMessage(action), prefix);
+ public void sendRawBallMessage(@NotNull String channel, @NotNull String action) {
+ sendBallMessage(channel, new BallMessage(action), false);
}
/**
@@ -425,15 +423,14 @@ public abstract class BallAPI {
}
/**
- * 发送一条有附加参数的服务消息
+ * 发送一条有附加参数的服务消息,不自动添加频道前缀
*
* @param channel 消息频道
* @param action 执行动作
* @param content 附加参数
- * @param prefix 是否自动为消息频道添加分组前缀
*/
- public void sendBallMessage(@NotNull String channel, @NotNull String action, @NotNull Object content, boolean prefix) {
- sendBallMessage(channel, new BallMessage(action, content), prefix);
+ public void sendRawBallMessage(@NotNull String channel, @NotNull String action, @NotNull Object content) {
+ sendBallMessage(channel, new BallMessage(action, content), false);
}
/**
@@ -448,23 +445,23 @@ public abstract class BallAPI {
/**
* 发送自定义消息
*
- * @param message 消息内容
- * @param prefix 是否自动为消息频道添加分组前缀
+ * @param message 消息内容
+ * @param addPrefix 是否自动为消息频道添加分组前缀
*/
- public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean prefix) {
- sendBallMessage(channel, message, prefix, false);
+ public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean addPrefix) {
+ sendBallMessage(channel, message, addPrefix, false);
}
/**
* 自定义服务消息信息并发送
*
- * @param channel 消息频道
- * @param message 消息内容
- * @param prefix 是否自动为消息频道添加分组前缀
- * @param block 是否阻塞(设置为 true 则必须等待消息写入网络的操作完成后,该方法才会退出)
+ * @param channel 消息频道
+ * @param message 消息内容
+ * @param addPrefix 是否自动为消息频道添加分组前缀
+ * @param block 是否阻塞(设置为 true 则必须等待消息写入网络的操作完成后,该方法才会退出)
*/
- public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean prefix, boolean block) {
- if (prefix) {
+ public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean addPrefix, boolean block) {
+ if (addPrefix) {
channel = ballConfig.getChannelPrefix() + channel;
}
if (block) {
diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallCommonListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallCommonListener.java
index f87e8e7..f1e908b 100644
--- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallCommonListener.java
+++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallCommonListener.java
@@ -3,12 +3,14 @@ package cn.hamster3.mc.plugin.ball.common.listener;
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo;
-import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerConnectServerEvent;
-import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerInfoUpdateEvent;
+import cn.hamster3.mc.plugin.ball.common.event.BallActions;
+import cn.hamster3.mc.plugin.ball.common.event.message.MessageReceivedEvent;
+import cn.hamster3.mc.plugin.ball.common.event.operate.*;
+import cn.hamster3.mc.plugin.ball.common.event.player.*;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOfflineEvent;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
+import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import com.google.common.eventbus.Subscribe;
-import org.jetbrains.annotations.NotNull;
public class BallCommonListener {
public static final BallCommonListener INSTANCE = new BallCommonListener();
@@ -17,19 +19,126 @@ public class BallCommonListener {
}
@Subscribe
- public void onBallPlayerConnectServer(@NotNull BallPlayerConnectServerEvent event) {
+ public void onMessageReceived(MessageReceivedEvent message) {
+ String channel = message.getChannel();
+ if (!BallAPI.BALL_CHANNEL.equals(channel)) {
+ return;
+ }
+ switch (BallActions.valueOf(message.getAction())) {
+ // operate type
+ case BroadcastPlayerMessage: {
+ BroadcastPlayerMessageEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BroadcastPlayerMessageEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case DispatchConsoleCommand: {
+ DispatchConsoleCommandEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), DispatchConsoleCommandEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case DispatchPlayerCommand: {
+ DispatchPlayerCommandEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), DispatchPlayerCommandEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case KickPlayer: {
+ KickPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), KickPlayerEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case SendMessageToPlayer: {
+ SendMessageToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), SendMessageToPlayerEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case SendPlayerToLocation: {
+ SendPlayerToLocationEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), SendPlayerToLocationEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case SendPlayerToPlayer: {
+ SendPlayerToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), SendPlayerToPlayerEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+
+ // player type
+ case BallPlayerPreLogin: {
+ BallPlayerPreLoginEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerPreLoginEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case BallPlayerLogin: {
+ BallPlayerLoginEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerLoginEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case BallPlayerPostLogin: {
+ BallPlayerPostLoginEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerPostLoginEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case BallPlayerPreConnectServer: {
+ BallPlayerPreConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerPreConnectServerEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case BallPlayerConnectServer: {
+ BallPlayerConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerConnectServerEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case BallPlayerPostConnectServer: {
+ BallPlayerPostConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerPostConnectServerEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case BallPlayerLogout: {
+ BallPlayerLogoutEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerLogoutEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+
+ // server type
+ case ServerOffline: {
+ ServerOfflineEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), ServerOfflineEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ case ServerOnline: {
+ ServerOnlineEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), ServerOnlineEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ break;
+ }
+ }
+ }
+
+ @Subscribe
+ public void handlePlayerInfo(MessageReceivedEvent message) {
+ if (!message.getChannel().contains(BallAPI.PLAYER_INFO_CHANNEL)) {
+ return;
+ }
+ if (BallActions.valueOf(message.getAction()) != BallActions.BallPlayerInfoUpdate) {
+ return;
+ }
+ BallPlayerInfoUpdateEvent event = CoreAPI.getInstance().getGson().fromJson(message.getContent(), BallPlayerInfoUpdateEvent.class);
+ BallAPI.getInstance().getEventBus().post(event);
+ }
+
+ @Subscribe
+ public void onBallPlayerConnectServer(BallPlayerConnectServerEvent event) {
BallPlayerInfo info = event.getPlayerInfo();
BallAPI.getInstance().getAllPlayerInfo().put(info.getUuid(), info);
}
@Subscribe
- public void onBallPlayerInfoUpdate(@NotNull BallPlayerInfoUpdateEvent event) {
+ public void onBallPlayerInfoUpdate(BallPlayerInfoUpdateEvent event) {
BallPlayerInfo info = event.getPlayerInfo();
BallAPI.getInstance().getAllPlayerInfo().put(info.getUuid(), info);
}
@Subscribe
- public void onServerOnline(@NotNull ServerOnlineEvent event) {
+ public void onServerOnline(ServerOnlineEvent event) {
BallServerInfo info = event.getServerInfo();
BallAPI.getInstance().getAllServerInfo().put(info.getId(), info);
switch (info.getType()) {
@@ -53,7 +162,7 @@ public class BallCommonListener {
}
@Subscribe
- public void onServerOffline(@NotNull ServerOfflineEvent event) {
+ public void onServerOffline(ServerOfflineEvent event) {
String serverID = event.getServerID();
BallServerInfo info = BallAPI.getInstance().getAllServerInfo().remove(serverID);
if (info == null) {
diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java
index 07abcda..3a80313 100644
--- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java
+++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java
@@ -2,13 +2,7 @@ package cn.hamster3.mc.plugin.ball.common.listener;
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
import cn.hamster3.mc.plugin.ball.common.data.BallMessage;
-import cn.hamster3.mc.plugin.ball.common.event.BallActions;
import cn.hamster3.mc.plugin.ball.common.event.message.MessageReceivedEvent;
-import cn.hamster3.mc.plugin.ball.common.event.operate.*;
-import cn.hamster3.mc.plugin.ball.common.event.player.*;
-import cn.hamster3.mc.plugin.ball.common.event.server.ServerOfflineEvent;
-import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
-import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.lib.io.lettuce.core.pubsub.RedisPubSubListener;
import com.google.common.eventbus.EventBus;
@@ -32,99 +26,6 @@ public class BallRedisListener implements RedisPubSubListener