From a5c2eec5e54e35dfa897ddc654bcf446105197aa Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Sat, 11 Nov 2023 17:54:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20guava=20=E7=9A=84?= =?UTF-8?q?=20EventBus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ball-bukkit/build.gradle.kts | 6 +- .../plugin/ball/bukkit/HamsterBallPlugin.java | 18 +- .../bukkit/listener/BallBukkitListener.java | 204 +++++++------- .../build.gradle.kts | 6 +- .../plugin/core/bungee/HamsterBallPlugin.java | 12 +- .../core/bungee/api/BallBungeeCordAPI.java | 0 .../listener/BallBungeeCordListener.java | 184 +++++++++++++ .../core/bungee/util/BallBungeeCordUtils.java | 3 +- .../src/main/resources/bungee.yml | 0 .../src/main/resources/config.yml | 0 .../listener/BallBungeeCordListener.java | 205 -------------- ball-common/build.gradle.kts | 6 +- .../mc/plugin/ball/common/api/BallAPI.java | 253 ++++-------------- ...{BallMessageInfo.java => BallMessage.java} | 18 +- .../plugin/ball/common/event/BallActions.java | 24 ++ .../event/message/MessageReceivedEvent.java | 11 + .../event/message/MessageSentEvent.java | 11 + .../operate/BroadcastPlayerMessageEvent.java | 3 - .../operate/DispatchConsoleCommandEvent.java | 2 - .../operate/DispatchPlayerCommandEvent.java | 2 - .../common/event/operate/KickPlayerEvent.java | 2 - .../operate/SendMessageToPlayerEvent.java | 2 - .../operate/SendPlayerToLocationEvent.java | 2 - .../operate/SendPlayerToPlayerEvent.java | 3 - .../player/BallPlayerConnectServerEvent.java | 2 - .../player/BallPlayerInfoUpdateEvent.java | 2 - .../event/player/BallPlayerLoginEvent.java | 2 - .../event/player/BallPlayerLogoutEvent.java | 2 - .../BallPlayerPostConnectServerEvent.java | 2 - .../player/BallPlayerPostLoginEvent.java | 2 - .../BallPlayerPreConnectServerEvent.java | 3 - .../event/player/BallPlayerPreLoginEvent.java | 2 - .../event/server/ServerOfflineEvent.java | 2 - .../event/server/ServerOnlineEvent.java | 2 - .../common/listener/BallCommonListener.java | 81 ++++++ .../common/listener/BallDebugListener.java | 13 +- .../ball/common/listener/BallListener.java | 55 ---- .../common/listener/BallMessageListener.java | 167 ------------ .../common/listener/BallRedisListener.java | 143 ++++++++++ .../common/listener/ListenerPriority.java | 45 ---- settings.gradle.kts | 4 +- 41 files changed, 642 insertions(+), 864 deletions(-) rename {ball-bungeecord => ball-bungee}/build.gradle.kts (74%) rename {ball-bungeecord => ball-bungee}/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java (89%) rename {ball-bungeecord => ball-bungee}/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java (100%) create mode 100644 ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java rename {ball-bungeecord => ball-bungee}/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java (97%) rename {ball-bungeecord => ball-bungee}/src/main/resources/bungee.yml (100%) rename {ball-bungeecord => ball-bungee}/src/main/resources/config.yml (100%) delete mode 100644 ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java rename ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/{BallMessageInfo.java => BallMessage.java} (87%) create mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/BallActions.java create mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageReceivedEvent.java create mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageSentEvent.java create mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallCommonListener.java delete mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java delete mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java create mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java delete mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/ListenerPriority.java diff --git a/ball-bukkit/build.gradle.kts b/ball-bukkit/build.gradle.kts index 5fb8d8f..4af0bb7 100644 --- a/ball-bukkit/build.gradle.kts +++ b/ball-bukkit/build.gradle.kts @@ -1,4 +1,4 @@ -@file:Suppress("GradlePackageVersionRange") +@file:Suppress("VulnerableLibrariesLocal", "GradlePackageVersionRange", "GradlePackageUpdate") evaluationDependsOn(":ball-common") @@ -8,8 +8,8 @@ dependencies { compileOnly("cn.hamster3.mc.plugin:core-bukkit:+") compileOnly("me.clip:placeholderapi:+") { isTransitive = false } - // https://mvnrepository.com/artifact/io.lettuce/lettuce-core - implementation("io.lettuce:lettuce-core:6.2.6.RELEASE") + + implementation("io.lettuce:lettuce-core:+") } tasks { 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 2359b8f..3229492 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 @@ -4,6 +4,7 @@ import cn.hamster3.mc.plugin.ball.bukkit.api.BallBukkitAPI; import cn.hamster3.mc.plugin.ball.bukkit.hook.PlaceholderHook; import cn.hamster3.mc.plugin.ball.bukkit.listener.BallBukkitListener; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; +import cn.hamster3.mc.plugin.ball.common.event.BallActions; import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -55,25 +56,18 @@ public class HamsterBallPlugin extends JavaPlugin { } catch (Exception e) { e.printStackTrace(); } - if (!BallAPI.getInstance().isEnabled()) { - sync(() -> { - logger.info("由于 HamsterBall 未能成功连接, 服务器将立即关闭"); - Bukkit.shutdown(); - }); - return; - } Bukkit.getPluginManager().registerEvents(BallBukkitListener.INSTANCE, this); + BallAPI.getInstance().getEventBus().register(BallBukkitListener.INSTANCE); logger.info("已注册 BallBukkitListener"); - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - ServerOnlineEvent.ACTION, - new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()) - ); sync(() -> { if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { PlaceholderHook.INSTANCE.register(); logger.info("已挂载 PlaceholderAPI 变量"); } + BallAPI.getInstance().sendBallMessage( + BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(), + new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()) + ); }); long time = System.currentTimeMillis() - start; logger.info("仓鼠球启动完成,总计耗时 " + time + " ms"); diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java index c1506f1..ee4e5aa 100644 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java +++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java @@ -3,15 +3,14 @@ package cn.hamster3.mc.plugin.ball.bukkit.listener; import cn.hamster3.mc.plugin.ball.bukkit.HamsterBallPlugin; import cn.hamster3.mc.plugin.ball.bukkit.data.BukkitLocation; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; import cn.hamster3.mc.plugin.ball.common.event.operate.*; -import cn.hamster3.mc.plugin.ball.common.listener.BallListener; import cn.hamster3.mc.plugin.core.bukkit.api.CoreBukkitAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.audience.Audience; import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.TextReplacementConfig; +import com.google.common.eventbus.Subscribe; import lombok.AllArgsConstructor; import lombok.Data; import org.bukkit.Bukkit; @@ -33,7 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.UUID; -public class BallBukkitListener implements Listener, BallListener { +public class BallBukkitListener implements Listener { public static final BallBukkitListener INSTANCE = new BallBukkitListener(); private final HashMap playerToLocation = new HashMap<>(); @@ -42,108 +41,6 @@ public class BallBukkitListener implements Listener, BallListener { private BallBukkitListener() { } - @Override - public void onMessageReceived(@NotNull BallMessageInfo info) { - switch (info.getAction()) { - case BroadcastPlayerMessageEvent.ACTION: { - BroadcastPlayerMessageEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BroadcastPlayerMessageEvent.class); - DisplayMessage message = event.getMessage(); - Audience audience = CoreAPI.getInstance().getAudienceProvider().all(); - message.show(audience); - break; - } - case DispatchConsoleCommandEvent.ACTION: { - DispatchConsoleCommandEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), DispatchConsoleCommandEvent.class); - if (event.getType() != null && event.getType() != BallServerType.GAME) { - return; - } - if (event.getServerID() != null && !BallAPI.getInstance().isLocalServer(event.getServerID())) { - return; - } - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), event.getCommand()); - break; - } - case DispatchPlayerCommandEvent.ACTION: { - DispatchPlayerCommandEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), DispatchPlayerCommandEvent.class); - if (event.getType() != null && event.getType() != BallServerType.GAME) { - return; - } - if (event.getUuid() != null) { - Player player = Bukkit.getPlayer(event.getUuid()); - if (player == null) { - return; - } - Bukkit.dispatchCommand(player, event.getCommand()); - return; - } - for (Player player : Bukkit.getOnlinePlayers()) { - Bukkit.dispatchCommand(player, event.getCommand()); - } - break; - } - case SendPlayerToLocationEvent.ACTION: { - SendPlayerToLocationEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), SendPlayerToLocationEvent.class); - BukkitLocation location = new BukkitLocation(event.getLocation()); - if (BallAPI.getInstance().isLocalServer(location.getServerID())) { - for (UUID uuid : event.getSendPlayerUUID()) { - Player player = Bukkit.getPlayer(uuid); - if (player != null) { - HamsterBallPlugin.sync(() -> { - player.teleport(location.toBukkitLocation()); - if (event.getDoneMessage() != null) { - Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player); - event.getDoneMessage().show(audience); - } - }); - } else { - playerToLocation.put(uuid, new ToLocation(location.toBukkitLocation(), event.getDoneMessage())); - } - } - } - break; - } - case SendPlayerToPlayerEvent.ACTION: { - SendPlayerToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), SendPlayerToPlayerEvent.class); - Player toPlayer = Bukkit.getPlayer(event.getToPlayerUUID()); - if (toPlayer == null) { - break; - } - Location location = toPlayer.getLocation(); - for (UUID uuid : event.getSendPlayerUUID()) { - Player sendPlayer = Bukkit.getPlayer(uuid); - if (sendPlayer != null) { - HamsterBallPlugin.sync(() -> { - sendPlayer.teleport(location); - if (event.getDoneMessage() != null) { - Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(sendPlayer); - event.getDoneMessage().show(audience, TextReplacementConfig.builder() - .matchLiteral("%player_name%") - .replacement(toPlayer.getName()) - .build()); - } - if (event.getDoneTargetMessage() != null) { - Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(toPlayer); - event.getDoneTargetMessage().show(audience, TextReplacementConfig.builder() - .matchLiteral("%player_name%") - .replacement(sendPlayer.getName()) - .build()); - } - }); - } else { - ToPlayer data = new ToPlayer( - toPlayer.getUniqueId(), - toPlayer.getLocation(), - event.getDoneMessage(), - event.getDoneTargetMessage() - ); - playerToPlayer.put(uuid, data); - } - } - break; - } - } - } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); @@ -189,6 +86,103 @@ public class BallBukkitListener implements Listener, BallListener { }); } + @Subscribe + public void onBroadcastPlayerMessage(BroadcastPlayerMessageEvent event) { + DisplayMessage message = event.getMessage(); + Audience audience = CoreAPI.getInstance().getAudienceProvider().all(); + message.show(audience); + } + + @Subscribe + public void onDispatchConsoleCommand(DispatchConsoleCommandEvent event) { + if (event.getType() != null && event.getType() != BallServerType.GAME) { + return; + } + if (event.getServerID() != null && !BallAPI.getInstance().isLocalServer(event.getServerID())) { + return; + } + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), event.getCommand()); + } + + @Subscribe + public void onDispatchPlayerCommand(DispatchPlayerCommandEvent event) { + if (event.getType() != null && event.getType() != BallServerType.GAME) { + return; + } + if (event.getUuid() != null) { + Player player = Bukkit.getPlayer(event.getUuid()); + if (player == null) { + return; + } + Bukkit.dispatchCommand(player, event.getCommand()); + return; + } + for (Player player : Bukkit.getOnlinePlayers()) { + Bukkit.dispatchCommand(player, event.getCommand()); + } + } + + @Subscribe + public void onSendPlayerToLocation(SendPlayerToLocationEvent event) { + BukkitLocation location = new BukkitLocation(event.getLocation()); + if (!BallAPI.getInstance().isLocalServer(location.getServerID())) { + return; + } + for (UUID uuid : event.getSendPlayerUUID()) { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + HamsterBallPlugin.sync(() -> { + player.teleport(location.toBukkitLocation()); + if (event.getDoneMessage() != null) { + Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player); + event.getDoneMessage().show(audience); + } + }); + } else { + playerToLocation.put(uuid, new ToLocation(location.toBukkitLocation(), event.getDoneMessage())); + } + } + } + + @Subscribe + public void onSendPlayerToPlayer(SendPlayerToPlayerEvent event) { + Player toPlayer = Bukkit.getPlayer(event.getToPlayerUUID()); + if (toPlayer == null) { + return; + } + Location location = toPlayer.getLocation(); + for (UUID uuid : event.getSendPlayerUUID()) { + Player sendPlayer = Bukkit.getPlayer(uuid); + if (sendPlayer != null) { + HamsterBallPlugin.sync(() -> { + sendPlayer.teleport(location); + if (event.getDoneMessage() != null) { + Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(sendPlayer); + event.getDoneMessage().show(audience, TextReplacementConfig.builder() + .matchLiteral("%player_name%") + .replacement(toPlayer.getName()) + .build()); + } + if (event.getDoneTargetMessage() != null) { + Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(toPlayer); + event.getDoneTargetMessage().show(audience, TextReplacementConfig.builder() + .matchLiteral("%player_name%") + .replacement(sendPlayer.getName()) + .build()); + } + }); + } else { + ToPlayer data = new ToPlayer( + toPlayer.getUniqueId(), + toPlayer.getLocation(), + event.getDoneMessage(), + event.getDoneTargetMessage() + ); + playerToPlayer.put(uuid, data); + } + } + } + @NotNull private List getCachedPlayerMessage(@NotNull UUID uuid) throws SQLException { ArrayList list = new ArrayList<>(); diff --git a/ball-bungeecord/build.gradle.kts b/ball-bungee/build.gradle.kts similarity index 74% rename from ball-bungeecord/build.gradle.kts rename to ball-bungee/build.gradle.kts index c8c71f3..d42aec7 100644 --- a/ball-bungeecord/build.gradle.kts +++ b/ball-bungee/build.gradle.kts @@ -1,3 +1,5 @@ +@file:Suppress("VulnerableLibrariesLocal", "GradlePackageVersionRange", "GradlePackageUpdate") + evaluationDependsOn(":ball-common") dependencies { @@ -5,8 +7,8 @@ dependencies { compileOnly("net.md-5:bungeecord-api:+") compileOnly("cn.hamster3.mc.plugin:core-bungeecord:+") - // https://mvnrepository.com/artifact/io.lettuce/lettuce-core - implementation("io.lettuce:lettuce-core:6.2.6.RELEASE") + + implementation("io.lettuce:lettuce-core:+") } tasks { diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java similarity index 89% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java rename to ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java index b4b27bd..71f708f 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java +++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java @@ -2,6 +2,7 @@ package cn.hamster3.mc.plugin.core.bungee; 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 cn.hamster3.mc.plugin.core.bungee.api.BallBungeeCordAPI; import cn.hamster3.mc.plugin.core.bungee.listener.BallBungeeCordListener; @@ -45,18 +46,15 @@ public class HamsterBallPlugin extends Plugin { } catch (Exception e) { e.printStackTrace(); } - if (!BallAPI.getInstance().isEnabled()) { - ProxyServer.getInstance().stop("由于 HamsterBall 未能成功连接, 服务器将立即关闭"); - return; - } ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE); + BallAPI.getInstance().getEventBus().register(BallBungeeCordListener.INSTANCE); logger.info("已注册 BallBungeeCordListener"); BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - ServerOnlineEvent.ACTION, + BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(), new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()) ); - BallAPI.getInstance().getAllPlayerInfo().values() + // 移除失效的在线玩家 + BallAPI.getInstance().getPlayerInfo().values() .stream() .filter(BallPlayerInfo::isOnline) .filter(o -> BallAPI.getInstance().isLocalServer(o.getProxyServer())) diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java similarity index 100% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java rename to ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java new file mode 100644 index 0000000..d140226 --- /dev/null +++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java @@ -0,0 +1,184 @@ +package cn.hamster3.mc.plugin.core.bungee.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.BallServerType; +import cn.hamster3.mc.plugin.ball.common.event.BallActions; +import cn.hamster3.mc.plugin.ball.common.event.operate.*; +import cn.hamster3.mc.plugin.ball.common.event.player.*; +import cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin; +import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils; +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.PendingConnection; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.*; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; + +import java.util.UUID; + +public final class BallBungeeCordListener implements Listener { + public static final BallBungeeCordListener INSTANCE = new BallBungeeCordListener(); + + private BallBungeeCordListener() { + } + + @EventHandler(priority = EventPriority.HIGH) + public void onPreLogin(PreLoginEvent event) { + BallAPI.getInstance().sendBallMessage( + 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().sendBallMessage( + 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().sendBallMessage( + BallAPI.BALL_CHANNEL, BallActions.BallPlayerPostLogin.name(), + new BallPlayerPostLoginEvent(playerInfo) + ); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onServerConnect(ServerConnectEvent event) { + ProxiedPlayer player = event.getPlayer(); + BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true); + playerInfo.setGameServer(event.getTarget().getName()); + BallAPI.getInstance().sendBallMessage( + BallAPI.BALL_CHANNEL, BallActions.BallPlayerPreConnectServer.name(), + new BallPlayerPreConnectServerEvent(playerInfo, playerInfo.getGameServer(), event.getTarget().getName()) + ); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onServerConnected(ServerConnectedEvent event) { + ProxiedPlayer player = event.getPlayer(); + BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true); + playerInfo.setGameServer(event.getServer().getInfo().getName()); + BallAPI.getInstance().sendBallMessage( + BallAPI.BALL_CHANNEL, + BallActions.BallPlayerPostConnectServer.name(), + new BallPlayerPostConnectServerEvent(playerInfo) + ); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerDisconnect(PlayerDisconnectEvent event) { + ProxiedPlayer player = event.getPlayer(); + BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, false); + BallAPI.getInstance().sendBallMessage(BallAPI.BALL_CHANNEL, BallActions.BallPlayerLogout.name(), + new BallPlayerLogoutEvent(playerInfo) + ); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); + } + + @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-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java similarity index 97% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java rename to ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java index 9244d06..a075e89 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java +++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java @@ -2,6 +2,7 @@ package cn.hamster3.mc.plugin.core.bungee.util; 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.BallPlayerInfoUpdateEvent; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariConfig; @@ -51,7 +52,7 @@ public final class BallBungeeCordUtils { } BallAPI.getInstance().sendBallMessage( BallAPI.BALL_CHANNEL, - BallPlayerInfoUpdateEvent.ACTION, + BallActions.BallPlayerInfoUpdate.name(), new BallPlayerInfoUpdateEvent(playerInfo) ); }); diff --git a/ball-bungeecord/src/main/resources/bungee.yml b/ball-bungee/src/main/resources/bungee.yml similarity index 100% rename from ball-bungeecord/src/main/resources/bungee.yml rename to ball-bungee/src/main/resources/bungee.yml diff --git a/ball-bungeecord/src/main/resources/config.yml b/ball-bungee/src/main/resources/config.yml similarity index 100% rename from ball-bungeecord/src/main/resources/config.yml rename to ball-bungee/src/main/resources/config.yml diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java deleted file mode 100644 index 35d1724..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java +++ /dev/null @@ -1,205 +0,0 @@ -package cn.hamster3.mc.plugin.core.bungee.listener; - -import cn.hamster3.mc.plugin.ball.common.api.BallAPI; -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; -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.listener.BallListener; -import cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin; -import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils; -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 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.*; -import net.md_5.bungee.api.plugin.Listener; -import net.md_5.bungee.event.EventHandler; -import net.md_5.bungee.event.EventPriority; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -public final class BallBungeeCordListener implements Listener, BallListener { - public static final BallBungeeCordListener INSTANCE = new BallBungeeCordListener(); - - private BallBungeeCordListener() { - } - - @Override - public void onMessageReceived(@NotNull BallMessageInfo info) { - switch (info.getAction()) { - case DispatchConsoleCommandEvent.ACTION: { - DispatchConsoleCommandEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), DispatchConsoleCommandEvent.class); - 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()); - break; - } - case DispatchPlayerCommandEvent.ACTION: { - DispatchPlayerCommandEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), DispatchPlayerCommandEvent.class); - 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()); - } - break; - } - case KickPlayerEvent.ACTION: { - KickPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), KickPlayerEvent.class); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(event.getUuid()); - BaseComponent[] components = BungeeComponentSerializer.get().serialize(event.getReason()); - player.disconnect(components); - break; - } - case SendMessageToPlayerEvent.ACTION: { - SendMessageToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), SendMessageToPlayerEvent.class); - for (UUID receiver : event.getReceivers()) { - Audience audience = CoreAPI.getInstance().getAudienceProvider().player(receiver); - event.getMessage().show(audience); - } - break; - } - case SendPlayerToLocationEvent.ACTION: { - SendPlayerToLocationEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), SendPlayerToLocationEvent.class); - String serverID = event.getLocation().getServerID(); - ServerInfo serverInfo = ProxyServer.getInstance().getServerInfo(serverID); - if (serverInfo == null) { - HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 服务器 " + serverID + " 不在线"); - break; - } - 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); - } - break; - } - case SendPlayerToPlayerEvent.ACTION: { - SendPlayerToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), SendPlayerToPlayerEvent.class); - UUID toPlayerUUID = event.getToPlayerUUID(); - ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID); - if (toPlayer == null) { - HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线"); - break; - } - 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); - } - } - } - } - - @EventHandler(priority = EventPriority.HIGH) - public void onPreLogin(PreLoginEvent event) { - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallPlayerPreLoginEvent.ACTION, - new BallPlayerPreLoginEvent(event.getConnection().getName()) - ); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onLogin(LoginEvent event) { - if (event.isCancelled()) { - return; - } - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallPlayerLoginEvent.ACTION, - new BallPlayerLoginEvent(new BallPlayerInfo( - event.getConnection().getUniqueId(), - event.getConnection().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().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallPlayerPostLoginEvent.ACTION, - new BallPlayerPostLoginEvent(playerInfo) - ); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onServerConnect(ServerConnectEvent event) { - ProxiedPlayer player = event.getPlayer(); - BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true); - playerInfo.setGameServer(event.getTarget().getName()); - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallPlayerPreConnectServerEvent.ACTION, - new BallPlayerPreConnectServerEvent(playerInfo, playerInfo.getGameServer(), event.getTarget().getName()) - ); - BallBungeeCordUtils.uploadPlayerInfo(playerInfo); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onServerConnected(ServerConnectedEvent event) { - ProxiedPlayer player = event.getPlayer(); - BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, true); - playerInfo.setGameServer(event.getServer().getInfo().getName()); - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallPlayerPostConnectServerEvent.ACTION, - new BallPlayerPostConnectServerEvent(playerInfo) - ); - BallBungeeCordUtils.uploadPlayerInfo(playerInfo); - } - - @EventHandler - public void onServerSwitch(ServerSwitchEvent event) { - } - - @EventHandler(priority = EventPriority.HIGH) - public void onServerDisconnect(ServerDisconnectEvent event) { - } - - @EventHandler(priority = EventPriority.HIGH) - public void onPlayerDisconnect(PlayerDisconnectEvent event) { - ProxiedPlayer player = event.getPlayer(); - BallPlayerInfo playerInfo = BallBungeeCordUtils.getPlayerInfo(player, false); - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallPlayerLogoutEvent.ACTION, - new BallPlayerLogoutEvent(playerInfo) - ); - BallBungeeCordUtils.uploadPlayerInfo(playerInfo); - } -} diff --git a/ball-common/build.gradle.kts b/ball-common/build.gradle.kts index fcb0a68..22db957 100644 --- a/ball-common/build.gradle.kts +++ b/ball-common/build.gradle.kts @@ -1,12 +1,12 @@ -@file:Suppress("VulnerableLibrariesLocal") +@file:Suppress("VulnerableLibrariesLocal", "GradlePackageVersionRange", "GradlePackageUpdate") dependencies { compileOnly("cn.hamster3.mc.plugin:core-common:+") compileOnly("com.google.code.gson:gson:2.8.0") + compileOnly("com.google.guava:guava:31.0-jre") - // https://mvnrepository.com/artifact/io.lettuce/lettuce-core - compileOnly("io.lettuce:lettuce-core:6.2.6.RELEASE") + compileOnly("io.lettuce:lettuce-core:+") } tasks { 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 e35a81a..d0d0b10 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 @@ -1,22 +1,22 @@ package cn.hamster3.mc.plugin.ball.common.api; import cn.hamster3.mc.plugin.ball.common.data.BallLocation; -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; +import cn.hamster3.mc.plugin.ball.common.data.BallMessage; 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.entity.BallServerType; +import cn.hamster3.mc.plugin.ball.common.event.BallActions; +import cn.hamster3.mc.plugin.ball.common.event.message.MessageSentEvent; import cn.hamster3.mc.plugin.ball.common.event.operate.*; -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.server.ServerOfflineEvent; -import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent; +import cn.hamster3.mc.plugin.ball.common.listener.BallCommonListener; import cn.hamster3.mc.plugin.ball.common.listener.BallDebugListener; -import cn.hamster3.mc.plugin.ball.common.listener.BallListener; -import cn.hamster3.mc.plugin.ball.common.listener.BallMessageListener; -import cn.hamster3.mc.plugin.ball.common.listener.ListenerPriority; +import cn.hamster3.mc.plugin.ball.common.listener.BallRedisListener; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.Component; +import com.google.common.eventbus.AsyncEventBus; +import com.google.common.eventbus.EventBus; import io.lettuce.core.RedisClient; import io.lettuce.core.pubsub.StatefulRedisPubSubConnection; import lombok.Getter; @@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; @SuppressWarnings("unused") +@Getter public abstract class BallAPI { /** * API 使用的通信频道 @@ -51,105 +52,29 @@ public abstract class BallAPI { @NotNull private final RedisClient redisClient; @NotNull - private final StatefulRedisPubSubConnection pubSubConnection; - + private final StatefulRedisPubSubConnection subConnection; @NotNull - private List listeners; - @Getter - private boolean enabled; + private final StatefulRedisPubSubConnection pubConnection; + @NotNull + private final EventBus eventBus; public BallAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { this.localServerInfo = localServerInfo; this.datasource = datasource; this.redisClient = redisClient; - pubSubConnection = redisClient.connectPubSub(BallMessageInfo.CODEC); + subConnection = redisClient.connectPubSub(BallMessage.CODEC); + pubConnection = redisClient.connectPubSub(BallMessage.CODEC); serverInfo = new ConcurrentHashMap<>(); playerInfo = new ConcurrentHashMap<>(); - listeners = new ArrayList<>(); - enabled = false; - initListener(debug); - } - - private void initListener(boolean debug) { - addListener(new BallListener() { - @Override - public ListenerPriority getPriority() { - return ListenerPriority.LOW; - } - - @Override - public void onBallPlayerConnectServer(@NotNull BallPlayerConnectServerEvent event) { - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - } - - @Override - public void onBallPlayerInfoUpdate(@NotNull BallPlayerInfoUpdateEvent event) { - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - } - - @Override - public void onServerOnline(@NotNull ServerOnlineEvent event) { - BallServerInfo info = event.getServerInfo(); - serverInfo.put(info.getId(), info); - switch (info.getType()) { - case GAME: { - playerInfo.forEach((uuid, playerInfo) -> { - if (playerInfo.getGameServer().equals(info.getId())) { - playerInfo.setOnline(false); - } - }); - break; - } - case PROXY: { - playerInfo.forEach((uuid, playerInfo) -> { - if (playerInfo.getProxyServer().equals(info.getId())) { - playerInfo.setOnline(false); - } - }); - break; - } - } - } - - @Override - public void onServerOffline(@NotNull ServerOfflineEvent event) { - String serverID = event.getServerID(); - BallServerInfo info = serverInfo.remove(serverID); - if (info == null) { - return; - } - switch (info.getType()) { - case GAME: { - playerInfo.forEach((uuid, playerInfo) -> { - if (playerInfo.getGameServer().equals(info.getId())) { - playerInfo.setOnline(false); - } - }); - break; - } - case PROXY: { - playerInfo.forEach((uuid, playerInfo) -> { - if (playerInfo.getProxyServer().equals(info.getId())) { - playerInfo.setOnline(false); - } - }); - break; - } - } - } - }); + eventBus = new AsyncEventBus("HamsterBall - EventBus", CoreAPI.getInstance().getExecutorService()); + eventBus.register(BallCommonListener.INSTANCE); if (debug) { getLogger().warning("已启用调试模式"); - pubSubConnection.addListener(BallDebugListener.INSTANCE); + subConnection.addListener(BallDebugListener.INSTANCE); } } protected void enable() throws SQLException, InterruptedException { - if (enabled) { - return; - } BallServerInfo localInfo = getLocalServerInfo(); try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { @@ -216,13 +141,12 @@ public abstract class BallAPI { } } RedisClient client = getRedisClient(); - pubSubConnection.addListener(BallMessageListener.INSTANCE); - pubSubConnection.async().subscribe("HamsterBall"); - enabled = true; + subConnection.addListener(BallRedisListener.INSTANCE); + subConnection.async().subscribe(BALL_CHANNEL); } protected void disable() throws SQLException, InterruptedException { - sendBallMessage(new BallMessageInfo(BALL_CHANNEL, ServerOfflineEvent.ACTION, new ServerOfflineEvent(getLocalServerId())), true); + sendBallMessage(new BallMessage(BALL_CHANNEL, BallActions.ServerOffline.name(), new ServerOfflineEvent(getLocalServerId())), true); try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { try (PreparedStatement statement = connection.prepareStatement( @@ -279,12 +203,12 @@ public abstract class BallAPI { * @param message 消息 */ public void broadcastPlayerMessage(@NotNull DisplayMessage message) { - sendBallMessage(new BallMessageInfo( + sendBallMessage(new BallMessage( BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - BroadcastPlayerMessageEvent.ACTION, + BallActions.BroadcastPlayerMessage.name(), CoreAPI.getInstance().getGson().toJsonTree( new BroadcastPlayerMessageEvent(message) ) @@ -299,12 +223,12 @@ public abstract class BallAPI { * @param command 命令内容 */ public void dispatchConsoleCommand(@Nullable BallServerType type, @Nullable String serverID, @NotNull String command) { - sendBallMessage(new BallMessageInfo( + sendBallMessage(new BallMessage( BALL_CHANNEL, getLocalServerId(), null, BallServerType.GAME, - DispatchConsoleCommandEvent.ACTION, + BallActions.DispatchConsoleCommand.name(), CoreAPI.getInstance().getGson().toJsonTree( new DispatchConsoleCommandEvent(type, serverID, command) ) @@ -319,12 +243,12 @@ public abstract class BallAPI { * @param command 命令内容 */ public void dispatchPlayerCommand(@Nullable BallServerType type, @Nullable UUID uuid, @NotNull String command) { - sendBallMessage(new BallMessageInfo( + sendBallMessage(new BallMessage( BALL_CHANNEL, getLocalServerId(), null, BallServerType.GAME, - DispatchPlayerCommandEvent.ACTION, + BallActions.DispatchPlayerCommand.name(), CoreAPI.getInstance().getGson().toJsonTree( new DispatchPlayerCommandEvent(type, uuid, command) ) @@ -348,12 +272,12 @@ public abstract class BallAPI { * @param reason 原因 */ public void kickPlayer(@NotNull UUID uuid, @NotNull Component reason) { - sendBallMessage(new BallMessageInfo( + sendBallMessage(new BallMessage( BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - KickPlayerEvent.ACTION, + BallActions.KickPlayer.name(), CoreAPI.getInstance().getGson().toJsonTree( new KickPlayerEvent(uuid, reason) ) @@ -368,34 +292,7 @@ public abstract class BallAPI { * @param cache 当玩家不在线时,是否缓存消息等待玩家上线再发送 */ public void sendMessageToPlayer(@NotNull UUID receiver, @NotNull DisplayMessage message, boolean cache) { - BallPlayerInfo info = getPlayerInfo(receiver); - if (info == null || !info.isOnline()) { - if (!cache) { - return; - } - try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { - try (PreparedStatement statement = connection.prepareStatement( - "INSERT INTO `hamster_ball_cached_message` VALUES(?, ?);" - )) { - statement.setString(1, receiver.toString()); - statement.setString(2, message.toJson().toString()); - statement.executeUpdate(); - } - } catch (Exception e) { - e.printStackTrace(); - } - return; - } - sendBallMessage(new BallMessageInfo( - BALL_CHANNEL, - getLocalServerId(), - null, - BallServerType.PROXY, - SendMessageToPlayerEvent.ACTION, - CoreAPI.getInstance().getGson().toJsonTree( - new SendMessageToPlayerEvent(Collections.singleton(receiver), message) - ) - )); + sendMessageToPlayer(Collections.singleton(receiver), message, cache); } /** @@ -425,12 +322,12 @@ public abstract class BallAPI { } } } - sendBallMessage(new BallMessageInfo( + sendBallMessage(new BallMessage( BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - SendMessageToPlayerEvent.ACTION, + BallActions.SendMessageToPlayer.name(), CoreAPI.getInstance().getGson().toJsonTree( new SendMessageToPlayerEvent(new HashSet<>(receivers), message) ) @@ -449,11 +346,7 @@ public abstract class BallAPI { * @param doneMessage 传送完成后显示的消息 */ public void sendPlayerToLocation(@NotNull UUID sendPlayerUUID, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { - sendBallMessage( - BALL_CHANNEL, - SendPlayerToLocationEvent.ACTION, - new SendPlayerToLocationEvent(Collections.singleton(sendPlayerUUID), location, doneMessage) - ); + sendPlayerToLocation(Collections.singleton(sendPlayerUUID), location, doneMessage); } /** @@ -468,9 +361,7 @@ public abstract class BallAPI { * @param doneMessage 传送完成后显示的消息 */ public void sendPlayerToLocation(@NotNull Collection sendPlayerUUID, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { - sendBallMessage( - BALL_CHANNEL, - SendPlayerToLocationEvent.ACTION, + sendBallMessage(BALL_CHANNEL, BallActions.SendPlayerToLocation.name(), new SendPlayerToLocationEvent(new HashSet<>(sendPlayerUUID), location, doneMessage) ); } @@ -486,11 +377,7 @@ public abstract class BallAPI { * @param doneTargetMessage 传送完成后目标玩家显示的消息,自动将 %player_name% 替换成被传送者的名称 */ public void sendPlayerToPlayer(@NotNull UUID sendPlayer, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) { - sendBallMessage( - BALL_CHANNEL, - SendPlayerToPlayerEvent.ACTION, - new SendPlayerToPlayerEvent(Collections.singleton(sendPlayer), toPlayer, doneMessage, doneTargetMessage) - ); + sendPlayerToPlayer(Collections.singleton(sendPlayer), toPlayer, doneMessage, doneTargetMessage); } /** @@ -504,9 +391,7 @@ public abstract class BallAPI { * @param doneTargetMessage 传送完成后目标玩家显示的消息,自动将 %player_name% 替换成被传送者的名称 */ public void sendPlayerToPlayer(@NotNull Collection sendPlayerUUID, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) { - sendBallMessage( - BALL_CHANNEL, - SendPlayerToPlayerEvent.ACTION, + sendBallMessage(BALL_CHANNEL, BallActions.SendPlayerToPlayer.name(), new SendPlayerToPlayerEvent(new HashSet<>(sendPlayerUUID), toPlayer, doneMessage, doneTargetMessage) ); } @@ -518,7 +403,7 @@ public abstract class BallAPI { * @param action 执行动作 */ public void sendBallMessage(@NotNull String channel, @NotNull String action) { - sendBallMessage(new BallMessageInfo(channel, action)); + sendBallMessage(new BallMessage(channel, action)); } /** @@ -529,7 +414,7 @@ public abstract class BallAPI { * @param content 附加参数 */ public void sendBallMessage(@NotNull String channel, @NotNull String action, @NotNull Object content) { - sendBallMessage(new BallMessageInfo(channel, action, content)); + sendBallMessage(new BallMessage(channel, action, content)); } /** @@ -537,45 +422,29 @@ public abstract class BallAPI { * * @param messageInfo 消息内容 */ - public void sendBallMessage(@NotNull BallMessageInfo messageInfo) { + public void sendBallMessage(@NotNull BallMessage messageInfo) { sendBallMessage(messageInfo, false); } /** * 自定义服务消息信息并发送 * - * @param messageInfo 消息内容 + * @param ballMessage 消息内容 * @param block 是否阻塞(设置为 true 则必须等待消息写入网络的操作完成后,该方法才会退出) */ - public void sendBallMessage(@NotNull BallMessageInfo messageInfo, boolean block) { - String string = CoreAPI.getInstance().getGson().toJson(messageInfo); - try (StatefulRedisPubSubConnection connection = getRedisClient().connectPubSub(BallMessageInfo.CODEC)) { - if (block) { - connection.sync().publish("HamsterBall", messageInfo); - } else { - connection.async().publish("HamsterBall", messageInfo); - } + public void sendBallMessage(@NotNull BallMessage ballMessage, boolean block) { + String string = CoreAPI.getInstance().getGson().toJson(ballMessage); + if (block) { + pubConnection.sync().publish(BALL_CHANNEL, ballMessage); + eventBus.post(new MessageSentEvent(ballMessage)); + } else { + pubConnection.async().publish(BALL_CHANNEL, ballMessage).whenComplete((aLong, throwable) -> { + if (throwable != null) { + return; + } + eventBus.post(new MessageSentEvent(ballMessage)); + }); } - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onMessageSend(messageInfo); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - } - - public void addListener(@NotNull BallListener listener) { - ArrayList newListeners = new ArrayList<>(listeners); - newListeners.add(listener); - newListeners.sort(Comparator.comparing(BallListener::getPriority)); - listeners = newListeners; - } - - public void removeListener(@NotNull BallListener listener) { - ArrayList newListeners = new ArrayList<>(listeners); - newListeners.remove(listener); - listeners = newListeners; } /** @@ -705,21 +574,6 @@ public abstract class BallAPI { return info.getName(); } - @NotNull - public Map getAllServerInfo() { - return serverInfo; - } - - @NotNull - public Map getAllPlayerInfo() { - return playerInfo; - } - - @NotNull - public List getListeners() { - return listeners; - } - @NotNull public abstract Logger getLogger(); @@ -727,9 +581,4 @@ public abstract class BallAPI { public DataSource getDatasource() { return datasource == null ? CoreAPI.getInstance().getDataSource() : datasource; } - - @NotNull - public RedisClient getRedisClient() { - return redisClient; - } } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessage.java similarity index 87% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessage.java index 7d9b7ee..29bddb7 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessage.java @@ -22,20 +22,20 @@ import java.util.UUID; */ @Data @SuppressWarnings("unused") -public class BallMessageInfo { +public class BallMessage { /** * 编解码器 */ - public static final RedisCodec CODEC = new RedisCodec() { + public static final RedisCodec CODEC = new RedisCodec() { @Override public String decodeKey(ByteBuffer bytes) { return StringCodec.UTF8.decodeKey(bytes); } @Override - public BallMessageInfo decodeValue(ByteBuffer bytes) { + public BallMessage decodeValue(ByteBuffer bytes) { String string = StringCodec.UTF8.decodeValue(bytes); - return CoreAPI.getInstance().getGson().fromJson(string, BallMessageInfo.class); + return CoreAPI.getInstance().getGson().fromJson(string, BallMessage.class); } @Override @@ -44,7 +44,7 @@ public class BallMessageInfo { } @Override - public ByteBuffer encodeValue(BallMessageInfo value) { + public ByteBuffer encodeValue(BallMessage value) { return StringCodec.UTF8.encodeValue(CoreAPI.getInstance().getGson().toJson(value)); } }; @@ -90,21 +90,21 @@ public class BallMessageInfo { */ private JsonElement content; - public BallMessageInfo(@NotNull String channel, @NotNull String action) { + public BallMessage(@NotNull String channel, @NotNull String action) { senderID = BallAPI.getInstance().getLocalServerId(); this.channel = channel; this.action = action; } - public BallMessageInfo(@NotNull String channel, @NotNull String action, @NotNull Object content) { + public BallMessage(@NotNull String channel, @NotNull String action, @NotNull Object content) { this.channel = channel; senderID = BallAPI.getInstance().getLocalServerId(); this.action = action; this.content = CoreAPI.getInstance().getGson().toJsonTree(content); } - public BallMessageInfo(@NotNull String channel, @NotNull String senderID, @Nullable String receiverID, - @Nullable BallServerType receiverType, @NotNull String action, @Nullable JsonElement content) { + public BallMessage(@NotNull String channel, @NotNull String senderID, @Nullable String receiverID, + @Nullable BallServerType receiverType, @NotNull String action, @Nullable JsonElement content) { this.channel = channel; this.senderID = senderID; this.receiverID = receiverID; diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/BallActions.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/BallActions.java new file mode 100644 index 0000000..26c65ce --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/BallActions.java @@ -0,0 +1,24 @@ +package cn.hamster3.mc.plugin.ball.common.event; + +public enum BallActions { + BroadcastPlayerMessage, + DispatchConsoleCommand, + DispatchPlayerCommand, + KickPlayer, + SendMessageToPlayer, + SendPlayerToLocation, + SendPlayerToPlayer, + + BallPlayerPreLogin, + BallPlayerLogin, + BallPlayerPostLogin, + BallPlayerPreConnectServer, + BallPlayerConnectServer, + BallPlayerPostConnectServer, + BallPlayerLogout, + + BallPlayerInfoUpdate, + + ServerOffline, + ServerOnline, +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageReceivedEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageReceivedEvent.java new file mode 100644 index 0000000..554bf20 --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageReceivedEvent.java @@ -0,0 +1,11 @@ +package cn.hamster3.mc.plugin.ball.common.event.message; + +import cn.hamster3.mc.plugin.ball.common.data.BallMessage; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MessageReceivedEvent { + private BallMessage message; +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageSentEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageSentEvent.java new file mode 100644 index 0000000..4761c3a --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/message/MessageSentEvent.java @@ -0,0 +1,11 @@ +package cn.hamster3.mc.plugin.ball.common.event.message; + +import cn.hamster3.mc.plugin.ball.common.data.BallMessage; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MessageSentEvent { + private BallMessage message; +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java index 6342330..ae8e886 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java @@ -8,9 +8,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BroadcastPlayerMessageEvent { - public static final String ACTION = "BroadcastPlayerMessage"; - @NotNull private final DisplayMessage message; - } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java index a27e40e..0c4ec36 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java @@ -9,8 +9,6 @@ import org.jetbrains.annotations.Nullable; @Data @AllArgsConstructor public class DispatchConsoleCommandEvent { - public static final String ACTION = "DispatchConsoleCommand"; - @Nullable private final BallServerType type; @Nullable diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java index e13018b..1e9365a 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java @@ -11,8 +11,6 @@ import java.util.UUID; @Data @AllArgsConstructor public class DispatchPlayerCommandEvent { - public static final String ACTION = "DispatchPlayerCommand"; - @Nullable private final BallServerType type; @Nullable diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java index 64bee96..ba571da 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java @@ -10,8 +10,6 @@ import java.util.UUID; @Data @AllArgsConstructor public class KickPlayerEvent { - public static final String ACTION = "KickPlayer"; - @NotNull private final UUID uuid; @NotNull diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java index 23c48f3..a1a1885 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java @@ -11,8 +11,6 @@ import java.util.UUID; @Data @AllArgsConstructor public class SendMessageToPlayerEvent { - public static final String ACTION = "SendMessageToPlayer"; - @NotNull private final Set receivers; @NotNull diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java index d4519eb..a701911 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java @@ -13,8 +13,6 @@ import java.util.UUID; @Data @AllArgsConstructor public class SendPlayerToLocationEvent { - public static final String ACTION = "SendPlayerToLocation"; - @NotNull private final Set sendPlayerUUID; @NotNull diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java index 3af5576..9797624 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java @@ -12,8 +12,6 @@ import java.util.UUID; @Data @AllArgsConstructor public class SendPlayerToPlayerEvent { - public static final String ACTION = "SendPlayerToPlayer"; - @NotNull private final Set sendPlayerUUID; @NotNull @@ -22,5 +20,4 @@ public class SendPlayerToPlayerEvent { private final DisplayMessage doneMessage; @Nullable private final DisplayMessage doneTargetMessage; - } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java index 4dde9f2..a66fc6e 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java @@ -18,8 +18,6 @@ import org.jetbrains.annotations.Nullable; @Data @AllArgsConstructor public class BallPlayerConnectServerEvent { - public static final String ACTION = "PlayerConnectServer"; - @NotNull private final BallPlayerInfo playerInfo; @Nullable diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java index 5df3559..3a030e1 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java @@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BallPlayerInfoUpdateEvent { - public static final String ACTION = "PlayerInfoUpdateEvent"; - @NotNull private final BallPlayerInfo playerInfo; } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java index 8605061..a6f51c1 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java @@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BallPlayerLoginEvent { - public static final String ACTION = "PlayerLogin"; - @NotNull private final BallPlayerInfo playerInfo; diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java index fdca0b3..ced102d 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java @@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BallPlayerLogoutEvent { - public static final String ACTION = "PlayerLogout"; - @NotNull private BallPlayerInfo playerInfo; } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java index d63ae4e..8ba54f4 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java @@ -15,8 +15,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BallPlayerPostConnectServerEvent { - public static final String ACTION = "PlayerPostConnectServer"; - @NotNull private final BallPlayerInfo playerInfo; } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java index 299fa50..0220d80 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java @@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BallPlayerPostLoginEvent { - public static final String ACTION = "PlayerPostLogin"; - @NotNull private final BallPlayerInfo playerInfo; } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java index 9a21b5f..ffd2b7a 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java @@ -16,13 +16,10 @@ import org.jetbrains.annotations.Nullable; @Data @AllArgsConstructor public class BallPlayerPreConnectServerEvent { - public static final String ACTION = "PlayerPreConnectServer"; - @NotNull private final BallPlayerInfo playerInfo; @Nullable private final String from; @NotNull private final String to; - } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java index 23ce371..63f5c57 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java @@ -10,8 +10,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class BallPlayerPreLoginEvent { - public static final String ACTION = "PlayerPreLogin"; - @NotNull private final String playerName; } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java index 2109925..494952f 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java @@ -10,8 +10,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class ServerOfflineEvent { - public static final String ACTION = "ServerOffline"; - @NotNull private final String serverID; } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java index 1fc203e..23e71fe 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java @@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor public class ServerOnlineEvent { - public static final String ACTION = "ServerOnline"; - @NotNull private final BallServerInfo serverInfo; 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 new file mode 100644 index 0000000..4d575de --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallCommonListener.java @@ -0,0 +1,81 @@ +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.server.ServerOfflineEvent; +import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent; +import com.google.common.eventbus.Subscribe; +import org.jetbrains.annotations.NotNull; + +public class BallCommonListener { + public static final BallCommonListener INSTANCE = new BallCommonListener(); + + private BallCommonListener() { + } + + @Subscribe + public void onBallPlayerConnectServer(@NotNull BallPlayerConnectServerEvent event) { + BallPlayerInfo info = event.getPlayerInfo(); + BallAPI.getInstance().getPlayerInfo().put(info.getUuid(), info); + } + + @Subscribe + public void onBallPlayerInfoUpdate(@NotNull BallPlayerInfoUpdateEvent event) { + BallPlayerInfo info = event.getPlayerInfo(); + BallAPI.getInstance().getPlayerInfo().put(info.getUuid(), info); + } + + @Subscribe + public void onServerOnline(@NotNull ServerOnlineEvent event) { + BallServerInfo info = event.getServerInfo(); + BallAPI.getInstance().getServerInfo().put(info.getId(), info); + switch (info.getType()) { + case GAME: { + BallAPI.getInstance().getPlayerInfo().forEach((uuid, playerInfo) -> { + if (playerInfo.getGameServer().equals(info.getId())) { + playerInfo.setOnline(false); + } + }); + break; + } + case PROXY: { + BallAPI.getInstance().getPlayerInfo().forEach((uuid, playerInfo) -> { + if (playerInfo.getProxyServer().equals(info.getId())) { + playerInfo.setOnline(false); + } + }); + break; + } + } + } + + @Subscribe + public void onServerOffline(@NotNull ServerOfflineEvent event) { + String serverID = event.getServerID(); + BallServerInfo info = BallAPI.getInstance().getServerInfo().remove(serverID); + if (info == null) { + return; + } + switch (info.getType()) { + case GAME: { + BallAPI.getInstance().getPlayerInfo().forEach((uuid, playerInfo) -> { + if (playerInfo.getGameServer().equals(info.getId())) { + playerInfo.setOnline(false); + } + }); + break; + } + case PROXY: { + BallAPI.getInstance().getPlayerInfo().forEach((uuid, playerInfo) -> { + if (playerInfo.getProxyServer().equals(info.getId())) { + playerInfo.setOnline(false); + } + }); + break; + } + } + } +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java index de77072..80b6d51 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java @@ -1,43 +1,38 @@ 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.BallMessageInfo; +import cn.hamster3.mc.plugin.ball.common.data.BallMessage; import io.lettuce.core.pubsub.RedisPubSubListener; -public class BallDebugListener implements RedisPubSubListener { +public class BallDebugListener implements RedisPubSubListener { public static final BallDebugListener INSTANCE = new BallDebugListener(); private BallDebugListener() { } @Override - public void message(String channel, BallMessageInfo event) { + public void message(String channel, BallMessage event) { BallAPI.getInstance().getLogger().info("从 " + channel + " 收到了一条消息: " + event); } @Override - public void message(String pattern, String channel, BallMessageInfo event) { + public void message(String pattern, String channel, BallMessage event) { BallAPI.getInstance().getLogger().info("从 " + pattern + "(" + channel + ") 收到了一条消息: " + event); } @Override public void subscribed(String channel, long count) { - BallAPI.getInstance().getLogger().info("已订阅 redis 频道: " + channel); - } @Override public void psubscribed(String pattern, long count) { - BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); } @Override public void unsubscribed(String channel, long count) { - BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道: " + channel); } @Override public void punsubscribed(String pattern, long count) { - BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); } } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java deleted file mode 100644 index a360f1e..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.listener; - -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; -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 org.jetbrains.annotations.NotNull; - -public interface BallListener { - /** - * 该监听器的执行优先级 - * - * @return 优先级 - */ - default ListenerPriority getPriority() { - return ListenerPriority.NORMAL; - } - - default void onMessageReceived(@NotNull BallMessageInfo event) { - } - - default void onMessageSend(@NotNull BallMessageInfo event) { - } - - default void onBallPlayerPreLogin(@NotNull BallPlayerPreLoginEvent event) { - } - - default void onBallPlayerLogin(@NotNull BallPlayerLoginEvent event) { - } - - default void onBallPlayerPostLogin(@NotNull BallPlayerPostLoginEvent event) { - } - - default void onBallPlayerPreConnectServer(@NotNull BallPlayerPreConnectServerEvent event) { - } - - default void onBallPlayerConnectServer(@NotNull BallPlayerConnectServerEvent event) { - } - - default void onBallPlayerPostConnectServer(@NotNull BallPlayerPostConnectServerEvent event) { - } - - default void onBallPlayerLogout(@NotNull BallPlayerLogoutEvent event) { - } - - default void onBallPlayerInfoUpdate(@NotNull BallPlayerInfoUpdateEvent event) { - } - - default void onServerOnline(@NotNull ServerOnlineEvent event) { - } - - default void onServerOffline(@NotNull ServerOfflineEvent event) { - } - -} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java deleted file mode 100644 index 6b0451e..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java +++ /dev/null @@ -1,167 +0,0 @@ -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.BallMessageInfo; -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 io.lettuce.core.pubsub.RedisPubSubListener; - -public class BallMessageListener implements RedisPubSubListener { - public static final BallMessageListener INSTANCE = new BallMessageListener(); - - private BallMessageListener() { - } - - @Override - public void message(String channel, BallMessageInfo info) { - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onMessageReceived(info); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - if (!BallAPI.BALL_CHANNEL.equals(info.getChannel())) { - return; - } - switch (info.getAction()) { - case BallPlayerPreLoginEvent.ACTION: { - BallPlayerPreLoginEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerPreLoginEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerPreLogin(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerLoginEvent.ACTION: { - BallPlayerLoginEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerLoginEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerLogin(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerPostLoginEvent.ACTION: { - BallPlayerPostLoginEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerPostLoginEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerPostLogin(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerPreConnectServerEvent.ACTION: { - BallPlayerPreConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerPreConnectServerEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerPreConnectServer(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerConnectServerEvent.ACTION: { - BallPlayerConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerConnectServerEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerConnectServer(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerPostConnectServerEvent.ACTION: { - BallPlayerPostConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerPostConnectServerEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerPostConnectServer(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerLogoutEvent.ACTION: { - BallPlayerLogoutEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerLogoutEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerLogout(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case BallPlayerInfoUpdateEvent.ACTION: { - BallPlayerInfoUpdateEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), BallPlayerInfoUpdateEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onBallPlayerInfoUpdate(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case ServerOfflineEvent.ACTION: { - ServerOfflineEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), ServerOfflineEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onServerOffline(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - case ServerOnlineEvent.ACTION: { - ServerOnlineEvent event = CoreAPI.getInstance().getGson().fromJson(info.getContent(), ServerOnlineEvent.class); - for (BallListener listener : BallAPI.getInstance().getListeners()) { - try { - listener.onServerOnline(event); - } catch (Exception | Error e) { - e.printStackTrace(); - } - } - break; - } - } - } - - @Override - public void message(String pattern, String channel, BallMessageInfo info) { - message(channel, info); - } - - @Override - public void subscribed(String channel, long count) { - - } - - @Override - public void psubscribed(String pattern, long count) { - - } - - @Override - public void unsubscribed(String channel, long count) { - - } - - @Override - public void punsubscribed(String pattern, long count) { - - } -} 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 new file mode 100644 index 0000000..756ed8e --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallRedisListener.java @@ -0,0 +1,143 @@ +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 io.lettuce.core.pubsub.RedisPubSubListener; + +public class BallRedisListener implements RedisPubSubListener { + public static final BallRedisListener INSTANCE = new BallRedisListener(); + + private BallRedisListener() { + } + + @Override + public void message(String channel, BallMessage ballMessage) { + BallAPI.getInstance().getEventBus().post(new MessageReceivedEvent(ballMessage)); + if (!BallAPI.BALL_CHANNEL.equals(ballMessage.getChannel())) { + return; + } + switch (BallActions.valueOf(ballMessage.getAction())) { + case BroadcastPlayerMessage: { + BroadcastPlayerMessageEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BroadcastPlayerMessageEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case DispatchConsoleCommand: { + DispatchConsoleCommandEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), DispatchConsoleCommandEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case DispatchPlayerCommand: { + DispatchPlayerCommandEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), DispatchPlayerCommandEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case KickPlayer: { + KickPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), KickPlayerEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case SendMessageToPlayer: { + SendMessageToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), SendMessageToPlayerEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case SendPlayerToLocation: { + SendPlayerToLocationEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), SendPlayerToLocationEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case SendPlayerToPlayer: { + SendPlayerToPlayerEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), SendPlayerToPlayerEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + + case BallPlayerPreLogin: { + BallPlayerPreLoginEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerPreLoginEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case BallPlayerLogin: { + BallPlayerLoginEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerLoginEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case BallPlayerPostLogin: { + BallPlayerPostLoginEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerPostLoginEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case BallPlayerPreConnectServer: { + BallPlayerPreConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerPreConnectServerEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case BallPlayerConnectServer: { + BallPlayerConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerConnectServerEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case BallPlayerPostConnectServer: { + BallPlayerPostConnectServerEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerPostConnectServerEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case BallPlayerLogout: { + BallPlayerLogoutEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerLogoutEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + + case BallPlayerInfoUpdate: { + BallPlayerInfoUpdateEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), BallPlayerInfoUpdateEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + + case ServerOffline: { + ServerOfflineEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), ServerOfflineEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + case ServerOnline: { + ServerOnlineEvent event = CoreAPI.getInstance().getGson().fromJson(ballMessage.getContent(), ServerOnlineEvent.class); + BallAPI.getInstance().getEventBus().post(event); + break; + } + } + } + + @Override + public void message(String pattern, String channel, BallMessage info) { + message(channel, info); + } + + @Override + public void subscribed(String channel, long count) { + BallAPI.getInstance().getLogger().info("已订阅 redis 频道: " + channel); + + } + + @Override + public void psubscribed(String pattern, long count) { + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); + } + + @Override + public void unsubscribed(String channel, long count) { + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道: " + channel); + } + + @Override + public void punsubscribed(String pattern, long count) { + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); + } +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/ListenerPriority.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/ListenerPriority.java deleted file mode 100644 index c589478..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/ListenerPriority.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.listener; - -@SuppressWarnings("unused") -public enum ListenerPriority { - - /** - * Event call is of very low importance and should be run first, to allow - * other plugins to further customise the outcome - */ - LOWEST(0), - /** - * Event call is of low importance - */ - LOW(1), - /** - * Event call is neither important nor unimportant, and may be run - * normally - */ - NORMAL(2), - /** - * Event call is of high importance - */ - HIGH(3), - /** - * Event call is critical and must have the final say in what happens - * to the event - */ - HIGHEST(4), - /** - * Event is listened to purely for monitoring the outcome of an event. - *

- * No modifications to the event should be made under this priority - */ - MONITOR(5); - - private final int slot; - - ListenerPriority(int slot) { - this.slot = slot; - } - - public int getSlot() { - return slot; - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 8325d3e..689e8bc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,6 +6,6 @@ pluginManagement { } } rootProject.name = "hamster-ball" -include("ball-bukkit") include("ball-common") -include("ball-bungeecord") +include("ball-bukkit") +include("ball-bungee")