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 1be3b93..2359b8f 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 @@ -3,6 +3,8 @@ package cn.hamster3.mc.plugin.ball.bukkit; 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.server.ServerOnlineEvent; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; @@ -53,8 +55,20 @@ 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); 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(); diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java index 7a54cf5..4c24ef9 100644 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java +++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java @@ -1,18 +1,10 @@ package cn.hamster3.mc.plugin.ball.bukkit.api; import cn.hamster3.mc.plugin.ball.bukkit.HamsterBallPlugin; -import cn.hamster3.mc.plugin.ball.bukkit.event.MessageSendEvent; -import cn.hamster3.mc.plugin.ball.bukkit.event.operate.*; -import cn.hamster3.mc.plugin.ball.bukkit.event.player.*; -import cn.hamster3.mc.plugin.ball.bukkit.event.server.ServerOfflineEvent; -import cn.hamster3.mc.plugin.ball.bukkit.event.server.ServerOnlineEvent; import cn.hamster3.mc.plugin.ball.bukkit.util.BallBukkitUtils; 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.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.core.common.api.CoreAPI; import io.lettuce.core.RedisClient; import org.bukkit.Bukkit; @@ -79,167 +71,9 @@ public class BallBukkitAPI extends BallAPI { super.disable(); } - @Override - public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean block) { - Bukkit.getPluginManager().callEvent(new MessageSendEvent(Bukkit.isPrimaryThread(), channel, message)); - super.sendBallMessage(channel, message, block); - } - - @Override - protected void onMessage(String channel, BallMessage message) { - if (!BallAPI.BALL_CHANNEL.equals(channel)) { - return; - } - switch (BallActions.valueOf(message.getAction())) { - case BroadcastPlayerMessage: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BroadcastPlayerMessageEvent.class) - ); - break; - } - case DispatchConsoleCommand: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(DispatchConsoleCommandEvent.class) - ); - break; - } - case DispatchPlayerCommand: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(DispatchPlayerCommandEvent.class) - ); - break; - } - case KickPlayer: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(KickPlayerEvent.class) - ); - break; - } - case SendMessageToPlayer: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(SendMessageToPlayerEvent.class) - ); - break; - } - case SendPlayerToLocation: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(SendPlayerToLocationEvent.class) - ); - break; - } - case SendPlayerToPlayer: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(SendPlayerToPlayerEvent.class) - ); - break; - } - case PlayerInfoUpdate: { - BallPlayerInfoUpdateEvent event = message.getContentAs(BallPlayerInfoUpdateEvent.class); - Bukkit.getPluginManager().callEvent(event); - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - break; - } - case PlayerPreLogin: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerPreLoginEvent.class) - ); - break; - } - case PlayerLogin: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerLoginEvent.class) - ); - break; - } - case PlayerPostLogin: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerPostLoginEvent.class) - ); - break; - } - case PlayerPreConnectServer: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerPreConnectServerEvent.class) - ); - break; - } - case PlayerConnectServer: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerConnectServerEvent.class) - ); - break; - } - case PlayerPostConnectServer: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerPostConnectServerEvent.class) - ); - break; - } - case PlayerLogout: { - Bukkit.getPluginManager().callEvent( - message.getContentAs(BallPlayerLogoutEvent.class) - ); - break; - } - case ServerOnline: { - ServerOnlineEvent event = message.getContentAs(ServerOnlineEvent.class); - Bukkit.getPluginManager().callEvent(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; - } - } - break; - } - case ServerOffline: { - ServerOfflineEvent event = message.getContentAs(ServerOfflineEvent.class); - Bukkit.getPluginManager().callEvent(event); - String serverID = event.getServerInfo().getId(); - 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; - } - } - break; - } - } - } - @Override public @NotNull Logger getLogger() { return HamsterBallPlugin.getInstance().getLogger(); } -} \ No newline at end of file + +} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/MessageReceiveEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/MessageReceiveEvent.java deleted file mode 100644 index 3ae79e6..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/MessageReceiveEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event; - -import cn.hamster3.mc.plugin.ball.common.data.BallMessage; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -@Getter -public class MessageReceiveEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final String channel; - @NotNull - private final BallMessage message; - - public MessageReceiveEvent(@NotNull String channel, @NotNull BallMessage message) { - super(true); - this.channel = channel; - this.message = message; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/MessageSendEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/MessageSendEvent.java deleted file mode 100644 index 61633f6..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/MessageSendEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event; - -import cn.hamster3.mc.plugin.ball.common.data.BallMessage; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -@Getter -public class MessageSendEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final String channel; - @NotNull - private final BallMessage message; - - public MessageSendEvent(boolean isAsync, @NotNull String channel, @NotNull BallMessage message) { - super(isAsync); - this.channel = channel; - this.message = message; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/BroadcastPlayerMessageEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/BroadcastPlayerMessageEvent.java deleted file mode 100644 index 3cf1f1c..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/BroadcastPlayerMessageEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -@Getter -public class BroadcastPlayerMessageEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final DisplayMessage message; - - public BroadcastPlayerMessageEvent(@NotNull DisplayMessage message) { - super(true); - this.message = message; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } - -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/DispatchConsoleCommandEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/DispatchConsoleCommandEvent.java deleted file mode 100644 index 35e8416..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/DispatchConsoleCommandEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -@Getter -public class DispatchConsoleCommandEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @Nullable - private final BallServerType serverType; - @Nullable - private final String serverID; - @NotNull - private final String command; - - public DispatchConsoleCommandEvent(@Nullable BallServerType serverType, @Nullable String serverID, @NotNull String command) { - super(true); - this.serverType = serverType; - this.serverID = serverID; - this.command = command; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/DispatchPlayerCommandEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/DispatchPlayerCommandEvent.java deleted file mode 100644 index 92f4726..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/DispatchPlayerCommandEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; - -@Getter -public class DispatchPlayerCommandEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @Nullable - private final BallServerType serverType; - @Nullable - private final UUID uuid; - @NotNull - private final String command; - - public DispatchPlayerCommandEvent(@Nullable BallServerType serverType, @Nullable UUID uuid, @NotNull String command) { - super(true); - this.serverType = serverType; - this.uuid = uuid; - this.command = command; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/KickPlayerEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/KickPlayerEvent.java deleted file mode 100644 index 2ea62a0..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/KickPlayerEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.Component; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -@Getter -public class KickPlayerEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final UUID uuid; - @NotNull - private final Component reason; - - public KickPlayerEvent(@NotNull UUID uuid, @NotNull Component reason) { - super(true); - this.uuid = uuid; - this.reason = reason; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendMessageToPlayerEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendMessageToPlayerEvent.java deleted file mode 100644 index 7852c7a..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendMessageToPlayerEvent.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -import java.util.Set; -import java.util.UUID; - -@Getter -public class SendMessageToPlayerEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final Set receivers; - @NotNull - private final DisplayMessage message; - - public SendMessageToPlayerEvent(@NotNull Set receivers, @NotNull DisplayMessage message) { - super(true); - this.receivers = receivers; - this.message = message; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendPlayerToLocationEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendPlayerToLocationEvent.java deleted file mode 100644 index 115187b..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendPlayerToLocationEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.ball.common.data.BallLocation; -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; -import java.util.UUID; - -@Getter -public class SendPlayerToLocationEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final Set sendPlayer; - @NotNull - private final BallLocation location; - @Nullable - private final DisplayMessage doneMessage; - - public SendPlayerToLocationEvent(@NotNull Set sendPlayer, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { - super(true); - this.sendPlayer = sendPlayer; - this.location = location; - this.doneMessage = doneMessage; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendPlayerToPlayerEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendPlayerToPlayerEvent.java deleted file mode 100644 index 1d15f29..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/operate/SendPlayerToPlayerEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.operate; - -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; -import java.util.UUID; - -@Getter -public class SendPlayerToPlayerEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final Set sendPlayer; - @NotNull - private final UUID toPlayer; - @Nullable - private final DisplayMessage doneMessage; - @Nullable - private final DisplayMessage doneTargetMessage; - - public SendPlayerToPlayerEvent(@NotNull Set sendPlayer, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) { - super(true); - this.sendPlayer = sendPlayer; - this.toPlayer = toPlayer; - this.doneMessage = doneMessage; - this.doneTargetMessage = doneTargetMessage; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } - -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerConnectServerEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerConnectServerEvent.java deleted file mode 100644 index 5fd5a5d..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerConnectServerEvent.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * 玩家进入子服 - *

- * 仅在使用 velocity 代理端时才会触发这个事件 - * - * @see BallPlayerPreConnectServerEvent 玩家准备进入子服 - * @see BallPlayerConnectServerEvent 玩家进入子服 - * @see BallPlayerPostConnectServerEvent 玩家已经进入子服 - */ -@Getter -public class BallPlayerConnectServerEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - @Nullable - private final String from; - @NotNull - private final String to; - - public BallPlayerConnectServerEvent(@NotNull BallPlayerInfo playerInfo, @Nullable String from, @NotNull String to) { - super(true); - this.playerInfo = playerInfo; - this.from = from; - this.to = to; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerInfoUpdateEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerInfoUpdateEvent.java deleted file mode 100644 index 71d0917..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerInfoUpdateEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家已进入子服 - */ -@Getter -public class BallPlayerInfoUpdateEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - - public BallPlayerInfoUpdateEvent(@NotNull BallPlayerInfo playerInfo) { - super(true); - this.playerInfo = playerInfo; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerLoginEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerLoginEvent.java deleted file mode 100644 index e2d34e0..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerLoginEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家连接到代理服务器 - */ -@Getter -public class BallPlayerLoginEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - - public BallPlayerLoginEvent(@NotNull BallPlayerInfo playerInfo) { - super(true); - this.playerInfo = playerInfo; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } - -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerLogoutEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerLogoutEvent.java deleted file mode 100644 index fc9a9c2..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerLogoutEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家与代理服务器断开连接 - */ -@Getter -public class BallPlayerLogoutEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - - public BallPlayerLogoutEvent(@NotNull BallPlayerInfo playerInfo) { - super(true); - this.playerInfo = playerInfo; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPostConnectServerEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPostConnectServerEvent.java deleted file mode 100644 index 42d00e1..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPostConnectServerEvent.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家已经进入子服 - * - * @see BallPlayerPreConnectServerEvent 玩家准备进入子服 - * @see BallPlayerConnectServerEvent 玩家进入子服 - * @see BallPlayerPostConnectServerEvent 玩家已经进入子服 - */ -@Getter -public class BallPlayerPostConnectServerEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - @NotNull - private final String from; - @NotNull - private final String to; - - public BallPlayerPostConnectServerEvent(@NotNull BallPlayerInfo playerInfo, @NotNull String from, @NotNull String to) { - super(true); - this.playerInfo = playerInfo; - this.from = from; - this.to = to; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPostLoginEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPostLoginEvent.java deleted file mode 100644 index c25fa46..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPostLoginEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家已连接到代理服务器 - */ -@Getter -public class BallPlayerPostLoginEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - - public BallPlayerPostLoginEvent(@NotNull BallPlayerInfo playerInfo) { - super(true); - this.playerInfo = playerInfo; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPreConnectServerEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPreConnectServerEvent.java deleted file mode 100644 index fc7d6b6..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPreConnectServerEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * 玩家准备进入子服 - * - * @see BallPlayerPreConnectServerEvent 玩家准备进入子服 - * @see BallPlayerConnectServerEvent 玩家进入子服 - * @see BallPlayerPostConnectServerEvent 玩家已经进入子服 - */ -@Getter -public class BallPlayerPreConnectServerEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallPlayerInfo playerInfo; - @Nullable - private final String from; - @NotNull - private final String to; - - public BallPlayerPreConnectServerEvent(@NotNull BallPlayerInfo playerInfo, @Nullable String from, @NotNull String to) { - super(true); - this.playerInfo = playerInfo; - this.from = from; - this.to = to; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPreLoginEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPreLoginEvent.java deleted file mode 100644 index b0dce2b..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/player/BallPlayerPreLoginEvent.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.player; - -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家准备连接到代理服务器 - */ -@Getter -public class BallPlayerPreLoginEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final String playerName; - - public BallPlayerPreLoginEvent(@NotNull String playerName) { - super(true); - this.playerName = playerName; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/server/ServerOfflineEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/server/ServerOfflineEvent.java deleted file mode 100644 index a0bc421..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/server/ServerOfflineEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.server; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 服务器离线 - */ -@Getter -public class ServerOfflineEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallServerInfo serverInfo; - - public ServerOfflineEvent(@NotNull BallServerInfo serverInfo) { - super(true); - this.serverInfo = serverInfo; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/server/ServerOnlineEvent.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/server/ServerOnlineEvent.java deleted file mode 100644 index f4dfeb4..0000000 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/event/server/ServerOnlineEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bukkit.event.server; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; -import lombok.Getter; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -/** - * 服务器上线 - */ -@Getter -public class ServerOnlineEvent extends Event { - @Getter - private static final HandlerList handlerList = new HandlerList(); - - @NotNull - private final BallServerInfo serverInfo; - - public ServerOnlineEvent(@NotNull BallServerInfo serverInfo) { - super(true); - this.serverInfo = serverInfo; - } - - @NotNull - @Override - public HandlerList getHandlers() { - return handlerList; - } -} 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 209f375..c1506f1 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 @@ -2,9 +2,11 @@ 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.bukkit.event.operate.*; 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; @@ -31,7 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.UUID; -public class BallBukkitListener implements Listener { +public class BallBukkitListener implements Listener, BallListener { public static final BallBukkitListener INSTANCE = new BallBukkitListener(); private final HashMap playerToLocation = new HashMap<>(); @@ -40,6 +42,108 @@ public class BallBukkitListener implements Listener { 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(); @@ -85,102 +189,6 @@ public class BallBukkitListener implements Listener { }); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onBroadcastPlayerMessage(BroadcastPlayerMessageEvent event) { - DisplayMessage message = event.getMessage(); - Audience audience = CoreAPI.getInstance().getAudienceProvider().all(); - message.show(audience); - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onDispatchConsoleCommand(DispatchConsoleCommandEvent event) { - if (event.getServerType() != null && event.getServerType() != BallServerType.GAME) { - return; - } - if (event.getServerID() != null && !BallAPI.getInstance().isLocalServer(event.getServerID())) { - return; - } - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), event.getCommand()); - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onDispatchPlayerCommand(DispatchPlayerCommandEvent event) { - if (event.getServerType() != null && event.getServerType() != 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()); - } - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onSendPlayerToLocation(SendPlayerToLocationEvent event) { - BukkitLocation location = new BukkitLocation(event.getLocation()); - if (BallAPI.getInstance().isLocalServer(location.getServerID())) { - for (UUID uuid : event.getSendPlayer()) { - 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())); - } - } - } - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onSendPlayerToPlayer(SendPlayerToPlayerEvent event) { - Player toPlayer = Bukkit.getPlayer(event.getToPlayer()); - if (toPlayer == null) { - return; - } - Location location = toPlayer.getLocation(); - for (UUID uuid : event.getSendPlayer()) { - 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/src/main/java/cn/hamster3/mc/plugin/ball/bungee/api/BallBungeeCordAPI.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/api/BallBungeeCordAPI.java deleted file mode 100644 index 2fbd2a8..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/api/BallBungeeCordAPI.java +++ /dev/null @@ -1,245 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.api; - -import cn.hamster3.mc.plugin.ball.bungee.HamsterBallPlugin; -import cn.hamster3.mc.plugin.ball.bungee.event.MessageReceiveEvent; -import cn.hamster3.mc.plugin.ball.bungee.event.MessageSendEvent; -import cn.hamster3.mc.plugin.ball.bungee.event.operate.*; -import cn.hamster3.mc.plugin.ball.bungee.event.player.*; -import cn.hamster3.mc.plugin.ball.bungee.event.server.ServerOfflineEvent; -import cn.hamster3.mc.plugin.ball.bungee.event.server.ServerOnlineEvent; -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.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.core.bungee.util.CoreBungeeCordUtils; -import cn.hamster3.mc.plugin.core.common.api.CoreAPI; -import io.lettuce.core.RedisClient; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.config.Configuration; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.sql.DataSource; -import java.sql.SQLException; -import java.util.Map; -import java.util.logging.Logger; - -public class BallBungeeCordAPI extends BallAPI { - public BallBungeeCordAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { - super(localServerInfo, datasource, redisClient, debug); - } - - public static BallBungeeCordAPI getInstance() { - return (BallBungeeCordAPI) instance; - } - - public static void init() { - if (instance != null) { - return; - } - HamsterBallPlugin plugin = HamsterBallPlugin.getInstance(); - Configuration config = CoreBungeeCordUtils.getPluginConfig(plugin); - Map env = System.getenv(); - - BallServerInfo serverInfo = new BallServerInfo( - env.getOrDefault("BALL_LOCAL_SERVER_INFO_ID", config.getString("server-info.id")), - env.getOrDefault("BALL_LOCAL_SERVER_INFO_NAME", config.getString("server-info.name")), - BallServerType.PROXY, - env.getOrDefault("BALL_LOCAL_SERVER_IP", config.getString("server-info.host", "0.0.0.0")), - Integer.parseInt( - env.getOrDefault("BALL_LOCAL_SERVER_PORT", config.getString("server-info.port", "25577")) - ) - ); - - DataSource datasource; - if (config.contains("datasource")) { - plugin.getLogger().info("检测到配置文件中包含 datasource 节点,启用自定义数据库连接"); - datasource = BallBungeeCordUtils.getDataSource(config.getSection("datasource")); - } else { - plugin.getLogger().info("未检测到配置文件中的 datasource 节点,复用 HamsterCore 数据库连接"); - datasource = CoreAPI.getInstance().getDataSource(); - } - - RedisClient redisClient = RedisClient.create(config.getString("redis-url", "redis://localhost:6379?clientName=HamsterBall")); - - instance = new BallBungeeCordAPI(serverInfo, datasource, redisClient, config.getBoolean("debug", false)); - } - - @Override - public void enable() throws SQLException, InterruptedException { - super.enable(); - } - - @Override - public void disable() throws SQLException, InterruptedException { - super.disable(); - } - - @Override - public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean block) { - ProxyServer.getInstance().getPluginManager().callEvent(new MessageSendEvent(channel, message)); - super.sendBallMessage(channel, message, block); - } - - @Override - protected void onMessage(String channel, BallMessage message) { - ProxyServer.getInstance().getPluginManager().callEvent(new MessageReceiveEvent(channel, message)); - if (!BallAPI.BALL_CHANNEL.equals(channel)) { - return; - } - switch (BallActions.valueOf(message.getAction())) { - case BroadcastPlayerMessage: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BroadcastPlayerMessageEvent.class) - ); - break; - } - case DispatchConsoleCommand: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(DispatchConsoleCommandEvent.class) - ); - break; - } - case DispatchPlayerCommand: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(DispatchPlayerCommandEvent.class) - ); - break; - } - case KickPlayer: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(KickPlayerEvent.class) - ); - break; - } - case SendMessageToPlayer: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(SendMessageToPlayerEvent.class) - ); - break; - } - case SendPlayerToLocation: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(SendPlayerToLocationEvent.class) - ); - break; - } - case SendPlayerToPlayer: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(SendPlayerToPlayerEvent.class) - ); - break; - } - case PlayerInfoUpdate: { - BallPlayerInfoUpdateEvent event = message.getContentAs(BallPlayerInfoUpdateEvent.class); - ProxyServer.getInstance().getPluginManager().callEvent(event); - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - break; - } - case PlayerPreLogin: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerPreLoginEvent.class) - ); - break; - } - case PlayerLogin: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerLoginEvent.class) - ); - break; - } - case PlayerPostLogin: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerPostLoginEvent.class) - ); - break; - } - case PlayerPreConnectServer: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerPreConnectServerEvent.class) - ); - break; - } - case PlayerConnectServer: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerConnectServerEvent.class) - ); - break; - } - case PlayerPostConnectServer: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerPostConnectServerEvent.class) - ); - break; - } - case PlayerLogout: { - ProxyServer.getInstance().getPluginManager().callEvent( - message.getContentAs(BallPlayerLogoutEvent.class) - ); - break; - } - case ServerOnline: { - ServerOnlineEvent event = message.getContentAs(ServerOnlineEvent.class); - ProxyServer.getInstance().getPluginManager().callEvent(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; - } - } - break; - } - case ServerOffline: { - ServerOfflineEvent event = message.getContentAs(ServerOfflineEvent.class); - ProxyServer.getInstance().getPluginManager().callEvent(event); - String serverID = event.getServerInfo().getId(); - 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; - } - } - break; - } - } - } - - @Override - public @NotNull Logger getLogger() { - return HamsterBallPlugin.getInstance().getLogger(); - } -} diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/MessageReceiveEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/MessageReceiveEvent.java deleted file mode 100644 index 0af7261..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/MessageReceiveEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event; - -import cn.hamster3.mc.plugin.ball.common.data.BallMessage; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -@Getter -public class MessageReceiveEvent extends Event { - @NotNull - private final String channel; - @NotNull - private final BallMessage message; - - public MessageReceiveEvent(@NotNull String channel, @NotNull BallMessage message) { - this.channel = channel; - this.message = message; - } -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/MessageSendEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/MessageSendEvent.java deleted file mode 100644 index 95bec25..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/MessageSendEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event; - -import cn.hamster3.mc.plugin.ball.common.data.BallMessage; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -@Getter -public class MessageSendEvent extends Event { - @NotNull - private final String channel; - @NotNull - private final BallMessage message; - - public MessageSendEvent(@NotNull String channel, @NotNull BallMessage message) { - this.channel = channel; - this.message = message; - } -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/BroadcastPlayerMessageEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/BroadcastPlayerMessageEvent.java deleted file mode 100644 index d24d39c..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/BroadcastPlayerMessageEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -@Getter -@AllArgsConstructor -public class BroadcastPlayerMessageEvent extends Event { - @NotNull - private final DisplayMessage message; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/DispatchConsoleCommandEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/DispatchConsoleCommandEvent.java deleted file mode 100644 index f16190e..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/DispatchConsoleCommandEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -@Getter -@AllArgsConstructor -public class DispatchConsoleCommandEvent extends Event { - @Nullable - private final BallServerType serverType; - @Nullable - private final String serverID; - @NotNull - private final String command; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/DispatchPlayerCommandEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/DispatchPlayerCommandEvent.java deleted file mode 100644 index f256dba..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/DispatchPlayerCommandEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; - -@Getter -@AllArgsConstructor -public class DispatchPlayerCommandEvent extends Event { - @Nullable - private final BallServerType serverType; - @Nullable - private final UUID uuid; - @NotNull - private final String command; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/KickPlayerEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/KickPlayerEvent.java deleted file mode 100644 index 9cc3868..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/KickPlayerEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.Component; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -@Getter -@AllArgsConstructor -public class KickPlayerEvent extends Event { - @NotNull - private final UUID uuid; - @NotNull - private final Component reason; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendMessageToPlayerEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendMessageToPlayerEvent.java deleted file mode 100644 index 4d3e99f..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendMessageToPlayerEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -import java.util.Set; -import java.util.UUID; - -@Getter -@AllArgsConstructor -public class SendMessageToPlayerEvent extends Event { - @NotNull - private final Set receivers; - @NotNull - private final DisplayMessage message; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendPlayerToLocationEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendPlayerToLocationEvent.java deleted file mode 100644 index 1231276..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendPlayerToLocationEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.ball.common.data.BallLocation; -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; -import java.util.UUID; - -@Getter -@AllArgsConstructor -public class SendPlayerToLocationEvent extends Event { - @NotNull - private final Set sendPlayer; - @NotNull - private final BallLocation location; - @Nullable - private final DisplayMessage doneMessage; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendPlayerToPlayerEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendPlayerToPlayerEvent.java deleted file mode 100644 index 5b16e9d..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/operate/SendPlayerToPlayerEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.operate; - -import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; -import java.util.UUID; - -@Getter -@AllArgsConstructor -public class SendPlayerToPlayerEvent extends Event { - @NotNull - private final Set sendPlayer; - @NotNull - private final UUID toPlayer; - @Nullable - private final DisplayMessage doneMessage; - @Nullable - private final DisplayMessage doneTargetMessage; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerInfoUpdateEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerInfoUpdateEvent.java deleted file mode 100644 index 606c578..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerInfoUpdateEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家已进入子服 - */ -@Getter -@AllArgsConstructor -public class BallPlayerInfoUpdateEvent extends Event { - @NotNull - private final BallPlayerInfo playerInfo; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerLoginEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerLoginEvent.java deleted file mode 100644 index 315c5e2..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerLoginEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家连接到代理服务器 - */ -@Getter -@AllArgsConstructor -public class BallPlayerLoginEvent extends Event { - @NotNull - private final BallPlayerInfo playerInfo; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerLogoutEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerLogoutEvent.java deleted file mode 100644 index 6121986..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerLogoutEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家与代理服务器断开连接 - */ -@Getter -@AllArgsConstructor -public class BallPlayerLogoutEvent extends Event { - @NotNull - private BallPlayerInfo playerInfo; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPostLoginEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPostLoginEvent.java deleted file mode 100644 index cbbb671..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPostLoginEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家已连接到代理服务器 - */ -@Getter -@AllArgsConstructor -public class BallPlayerPostLoginEvent extends Event { - @NotNull - private final BallPlayerInfo playerInfo; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPreLoginEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPreLoginEvent.java deleted file mode 100644 index 6b69073..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPreLoginEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家准备连接到代理服务器 - */ -@Getter -@AllArgsConstructor -public class BallPlayerPreLoginEvent extends Event { - @NotNull - private final String playerName; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/server/ServerOfflineEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/server/ServerOfflineEvent.java deleted file mode 100644 index a2ea9f4..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/server/ServerOfflineEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.server; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 服务器离线 - */ -@Getter -@AllArgsConstructor -public class ServerOfflineEvent extends Event { - @NotNull - private final BallServerInfo serverInfo; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/server/ServerOnlineEvent.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/server/ServerOnlineEvent.java deleted file mode 100644 index 2b8e175..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/server/ServerOnlineEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.server; - -import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; -import org.jetbrains.annotations.NotNull; - -/** - * 服务器上线 - */ -@Getter -@AllArgsConstructor -public class ServerOnlineEvent extends Event { - @NotNull - private final BallServerInfo serverInfo; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeCordListener.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeCordListener.java deleted file mode 100644 index 2b8f575..0000000 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/listener/BallBungeeCordListener.java +++ /dev/null @@ -1,201 +0,0 @@ -package cn.hamster3.mc.plugin.ball.bungee.listener; - -import cn.hamster3.mc.plugin.ball.bungee.HamsterBallPlugin; -import cn.hamster3.mc.plugin.ball.bungee.event.operate.*; -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.entity.BallServerType; -import cn.hamster3.mc.plugin.ball.common.event.BallActions; -import cn.hamster3.mc.plugin.ball.common.event.player.*; -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 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.PlayerPreLogin.name(), - new BallPlayerPreLogin(event.getConnection().getName()) - ); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onLogin(LoginEvent event) { - if (event.isCancelled()) { - return; - } - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallActions.PlayerLogin.name(), - new BallPlayerLogin( - 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, - BallActions.PlayerPostLogin.name(), - new BallPlayerPostLogin(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.PlayerPreConnectServer.name(), - new BallPlayerPreConnectServer(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); - String from = playerInfo.getGameServer(); - String to = event.getServer().getInfo().getName(); - playerInfo.setGameServer(to); - BallAPI.getInstance().sendBallMessage( - BallAPI.BALL_CHANNEL, - BallActions.PlayerPostConnectServer.name(), - new BallPlayerPostConnectServer(playerInfo, from, to) - ); - 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, - BallActions.PlayerLogout.name(), - new BallPlayerLogout(playerInfo) - ); - BallBungeeCordUtils.uploadPlayerInfo(playerInfo); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onDispatchConsoleCommand(DispatchConsoleCommandEvent event) { - if (event.getServerType() != null && event.getServerType() != BallServerType.PROXY) { - return; - } - 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 onDispatchPlayerCommand(DispatchPlayerCommandEvent event) { - if (event.getServerType() != null && event.getServerType() != 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()); - } - } - - @EventHandler(priority = EventPriority.HIGH) - public void onKickPlayer(KickPlayerEvent event) { - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(event.getUuid()); - BaseComponent[] components = BungeeComponentSerializer.get().serialize(event.getReason()); - player.disconnect(components); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onSendMessageToPlayer(SendMessageToPlayerEvent event) { - for (UUID receiver : event.getReceivers()) { - Audience audience = CoreAPI.getInstance().getAudienceProvider().player(receiver); - event.getMessage().show(audience); - } - } - - @EventHandler(priority = EventPriority.HIGH) - public void onSendPlayerToLocation(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.getSendPlayer()) { - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - if (player == null) { - continue; - } - if (player.getServer().getInfo().getName().equals(serverID)) { - continue; - } - player.connect(serverInfo); - } - } - - @EventHandler(priority = EventPriority.HIGH) - public void onSendPlayerToPlayer(SendPlayerToPlayerEvent event) { - UUID toPlayerUUID = event.getToPlayer(); - ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID); - if (toPlayer == null) { - HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线"); - return; - } - ServerInfo toServer = toPlayer.getServer().getInfo(); - for (UUID uuid : event.getSendPlayer()) { - 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/ball/bungee/HamsterBallPlugin.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java similarity index 77% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/HamsterBallPlugin.java rename to ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java index bfc4553..b4b27bd 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/HamsterBallPlugin.java +++ b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java @@ -1,10 +1,11 @@ -package cn.hamster3.mc.plugin.ball.bungee; +package cn.hamster3.mc.plugin.core.bungee; -import cn.hamster3.mc.plugin.ball.bungee.api.BallBungeeCordAPI; -import cn.hamster3.mc.plugin.ball.bungee.listener.BallBungeeCordListener; -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.server.ServerOnlineEvent; +import cn.hamster3.mc.plugin.core.bungee.api.BallBungeeCordAPI; +import cn.hamster3.mc.plugin.core.bungee.listener.BallBungeeCordListener; +import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.plugin.Plugin; @@ -44,8 +45,17 @@ 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); logger.info("已注册 BallBungeeCordListener"); + BallAPI.getInstance().sendBallMessage( + BallAPI.BALL_CHANNEL, + ServerOnlineEvent.ACTION, + new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()) + ); BallAPI.getInstance().getAllPlayerInfo().values() .stream() .filter(BallPlayerInfo::isOnline) diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java new file mode 100644 index 0000000..1811139 --- /dev/null +++ b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java @@ -0,0 +1,75 @@ +package cn.hamster3.mc.plugin.core.bungee.api; + +import cn.hamster3.mc.plugin.ball.common.api.BallAPI; +import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; +import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; +import cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin; +import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils; +import cn.hamster3.mc.plugin.core.bungee.util.CoreBungeeCordUtils; +import cn.hamster3.mc.plugin.core.common.api.CoreAPI; +import io.lettuce.core.RedisClient; +import net.md_5.bungee.config.Configuration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.sql.DataSource; +import java.sql.SQLException; +import java.util.Map; +import java.util.logging.Logger; + +public class BallBungeeCordAPI extends BallAPI { + public BallBungeeCordAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { + super(localServerInfo, datasource, redisClient, debug); + } + + public static BallBungeeCordAPI getInstance() { + return (BallBungeeCordAPI) instance; + } + + public static void init() { + if (instance != null) { + return; + } + HamsterBallPlugin plugin = HamsterBallPlugin.getInstance(); + Configuration config = CoreBungeeCordUtils.getPluginConfig(plugin); + Map env = System.getenv(); + + BallServerInfo serverInfo = new BallServerInfo( + env.getOrDefault("BALL_LOCAL_SERVER_INFO_ID", config.getString("server-info.id")), + env.getOrDefault("BALL_LOCAL_SERVER_INFO_NAME", config.getString("server-info.name")), + BallServerType.PROXY, + env.getOrDefault("BALL_LOCAL_SERVER_IP", config.getString("server-info.host", "0.0.0.0")), + Integer.parseInt( + env.getOrDefault("BALL_LOCAL_SERVER_PORT", config.getString("server-info.port", "25577")) + ) + ); + + DataSource datasource; + if (config.contains("datasource")) { + plugin.getLogger().info("检测到配置文件中包含 datasource 节点,启用自定义数据库连接"); + datasource = BallBungeeCordUtils.getDataSource(config.getSection("datasource")); + } else { + plugin.getLogger().info("未检测到配置文件中的 datasource 节点,复用 HamsterCore 数据库连接"); + datasource = CoreAPI.getInstance().getDataSource(); + } + + RedisClient redisClient = RedisClient.create(config.getString("redis-url", "redis://localhost:6379?clientName=HamsterBall")); + + instance = new BallBungeeCordAPI(serverInfo, datasource, redisClient, config.getBoolean("debug", false)); + } + + @Override + public void enable() throws SQLException, InterruptedException { + super.enable(); + } + + @Override + public void disable() throws SQLException, InterruptedException { + super.disable(); + } + + @Override + public @NotNull Logger getLogger() { + return HamsterBallPlugin.getInstance().getLogger(); + } +} 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 new file mode 100644 index 0000000..35d1724 --- /dev/null +++ b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java @@ -0,0 +1,205 @@ +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-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java similarity index 94% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java rename to ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java index e1db2aa..9244d06 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/util/BallBungeeCordUtils.java +++ b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java @@ -1,9 +1,8 @@ -package cn.hamster3.mc.plugin.ball.bungee.util; +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.BallPlayerInfoUpdate; +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; import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariDataSource; @@ -52,8 +51,8 @@ public final class BallBungeeCordUtils { } BallAPI.getInstance().sendBallMessage( BallAPI.BALL_CHANNEL, - BallActions.PlayerInfoUpdate.name(), - new BallPlayerInfoUpdate(playerInfo) + BallPlayerInfoUpdateEvent.ACTION, + new BallPlayerInfoUpdateEvent(playerInfo) ); }); } diff --git a/ball-bungeecord/src/main/resources/bungee.yml b/ball-bungeecord/src/main/resources/bungee.yml index c618590..72be04a 100644 --- a/ball-bungeecord/src/main/resources/bungee.yml +++ b/ball-bungeecord/src/main/resources/bungee.yml @@ -1,5 +1,5 @@ name: HamsterBall -main: cn.hamster3.mc.plugin.ball.bungee.HamsterBallPlugin +main: cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin version: ${version} author: MiniDay 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 e571b64..e35a81a 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,20 +1,23 @@ 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.BallMessage; +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.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.operate.*; -import cn.hamster3.mc.plugin.ball.common.event.server.ServerOffline; -import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnline; -import cn.hamster3.mc.plugin.ball.common.listener.BallDebugLogListener; +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.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.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 io.lettuce.core.RedisClient; -import io.lettuce.core.pubsub.RedisPubSubListener; import io.lettuce.core.pubsub.StatefulRedisPubSubConnection; import lombok.Getter; import org.jetbrains.annotations.NotNull; @@ -42,32 +45,111 @@ public abstract class BallAPI { @NotNull protected final Map playerInfo; @NotNull - protected final StatefulRedisPubSubConnection pubConnection; - @NotNull - protected final StatefulRedisPubSubConnection subConnection; - @NotNull private final BallServerInfo localServerInfo; @Nullable private final DataSource datasource; @NotNull private final RedisClient redisClient; + @NotNull + private final StatefulRedisPubSubConnection pubSubConnection; + + @NotNull + private List listeners; + @Getter + private boolean enabled; public BallAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { this.localServerInfo = localServerInfo; this.datasource = datasource; this.redisClient = redisClient; - pubConnection = redisClient.connectPubSub(BallMessage.REDIS_CODEC); - subConnection = redisClient.connectPubSub(BallMessage.REDIS_CODEC); + pubSubConnection = redisClient.connectPubSub(BallMessageInfo.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; + } + } + } + }); if (debug) { getLogger().warning("已启用调试模式"); - subConnection.addListener(BallDebugLogListener.INSTANCE); + pubSubConnection.addListener(BallDebugListener.INSTANCE); } - subConnection.addListener(new InnerListener()); } protected void enable() throws SQLException, InterruptedException { + if (enabled) { + return; + } BallServerInfo localInfo = getLocalServerInfo(); try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { @@ -117,7 +199,6 @@ public abstract class BallAPI { } } } - getLogger().info("已加载 " + serverInfo.size() + " 条服务器信息"); try (PreparedStatement statement = connection.prepareStatement( "SELECT * FROM `hamster_ball_player_info`;" )) { @@ -133,15 +214,15 @@ public abstract class BallAPI { } } } - getLogger().info("已加载 " + playerInfo.size() + " 条玩家信息"); } - - subscribe(BALL_CHANNEL); - sendBallMessage(BALL_CHANNEL, new BallMessage(BallActions.ServerOnline.name(), new ServerOnline(getLocalServerInfo())), true); + RedisClient client = getRedisClient(); + pubSubConnection.addListener(BallMessageListener.INSTANCE); + pubSubConnection.async().subscribe("HamsterBall"); + enabled = true; } protected void disable() throws SQLException, InterruptedException { - sendBallMessage(BALL_CHANNEL, new BallMessage(BallActions.ServerOffline.name(), new ServerOffline(getLocalServerInfo())), true); + sendBallMessage(new BallMessageInfo(BALL_CHANNEL, ServerOfflineEvent.ACTION, new ServerOfflineEvent(getLocalServerId())), true); try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { try (PreparedStatement statement = connection.prepareStatement( @@ -158,9 +239,9 @@ public abstract class BallAPI { statement.executeUpdate(); } } - getLogger().info("正在关闭 redis 客户端"); + getLogger().info("正在关闭 redission"); getRedisClient().close(); - getLogger().info("已关闭 redis 客户端"); + getLogger().info("已关闭 redission"); } /** @@ -198,13 +279,14 @@ public abstract class BallAPI { * @param message 消息 */ public void broadcastPlayerMessage(@NotNull DisplayMessage message) { - sendBallMessage(BALL_CHANNEL, new BallMessage( + sendBallMessage(new BallMessageInfo( + BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - BallActions.BroadcastPlayerMessage.name(), + BroadcastPlayerMessageEvent.ACTION, CoreAPI.getInstance().getGson().toJsonTree( - new BroadcastPlayerMessage(message) + new BroadcastPlayerMessageEvent(message) ) )); } @@ -217,13 +299,14 @@ public abstract class BallAPI { * @param command 命令内容 */ public void dispatchConsoleCommand(@Nullable BallServerType type, @Nullable String serverID, @NotNull String command) { - sendBallMessage(BALL_CHANNEL, new BallMessage( + sendBallMessage(new BallMessageInfo( + BALL_CHANNEL, getLocalServerId(), null, BallServerType.GAME, - BallActions.DispatchConsoleCommand.name(), + DispatchConsoleCommandEvent.ACTION, CoreAPI.getInstance().getGson().toJsonTree( - new DispatchConsoleCommand(type, serverID, command) + new DispatchConsoleCommandEvent(type, serverID, command) ) )); } @@ -236,13 +319,14 @@ public abstract class BallAPI { * @param command 命令内容 */ public void dispatchPlayerCommand(@Nullable BallServerType type, @Nullable UUID uuid, @NotNull String command) { - sendBallMessage(BALL_CHANNEL, new BallMessage( + sendBallMessage(new BallMessageInfo( + BALL_CHANNEL, getLocalServerId(), null, BallServerType.GAME, - BallActions.DispatchPlayerCommand.name(), + DispatchPlayerCommandEvent.ACTION, CoreAPI.getInstance().getGson().toJsonTree( - new DispatchPlayerCommand(type, uuid, command) + new DispatchPlayerCommandEvent(type, uuid, command) ) )); } @@ -264,13 +348,14 @@ public abstract class BallAPI { * @param reason 原因 */ public void kickPlayer(@NotNull UUID uuid, @NotNull Component reason) { - sendBallMessage(BALL_CHANNEL, new BallMessage( + sendBallMessage(new BallMessageInfo( + BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - BallActions.KickPlayer.name(), + KickPlayerEvent.ACTION, CoreAPI.getInstance().getGson().toJsonTree( - new KickPlayer(uuid, reason) + new KickPlayerEvent(uuid, reason) ) )); } @@ -301,13 +386,14 @@ public abstract class BallAPI { } return; } - sendBallMessage(BALL_CHANNEL, new BallMessage( + sendBallMessage(new BallMessageInfo( + BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - BallActions.SendMessageToPlayer.name(), + SendMessageToPlayerEvent.ACTION, CoreAPI.getInstance().getGson().toJsonTree( - new SendMessageToPlayer(Collections.singleton(receiver), message) + new SendMessageToPlayerEvent(Collections.singleton(receiver), message) ) )); } @@ -339,13 +425,14 @@ public abstract class BallAPI { } } } - sendBallMessage(BALL_CHANNEL, new BallMessage( + sendBallMessage(new BallMessageInfo( + BALL_CHANNEL, getLocalServerId(), null, BallServerType.PROXY, - BallActions.SendMessageToPlayer.name(), + SendMessageToPlayerEvent.ACTION, CoreAPI.getInstance().getGson().toJsonTree( - new SendMessageToPlayer(new HashSet<>(receivers), message) + new SendMessageToPlayerEvent(new HashSet<>(receivers), message) ) )); } @@ -357,15 +444,15 @@ public abstract class BallAPI { *

* 则会先尝试将玩家连接至目标服务器再进行传送 * - * @param sendPlayer 玩家的uuid - * @param location 坐标 - * @param doneMessage 传送完成后显示的消息 + * @param sendPlayerUUID 玩家的uuid + * @param location 坐标 + * @param doneMessage 传送完成后显示的消息 */ - public void sendPlayerToLocation(@NotNull UUID sendPlayer, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { + public void sendPlayerToLocation(@NotNull UUID sendPlayerUUID, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { sendBallMessage( BALL_CHANNEL, - BallActions.SendPlayerToLocation.name(), - new SendPlayerToLocation(Collections.singleton(sendPlayer), location, doneMessage) + SendPlayerToLocationEvent.ACTION, + new SendPlayerToLocationEvent(Collections.singleton(sendPlayerUUID), location, doneMessage) ); } @@ -376,15 +463,15 @@ public abstract class BallAPI { *

* 则会先尝试将玩家连接至目标服务器再进行传送 * - * @param sendPlayer 玩家的uuid - * @param location 坐标 - * @param doneMessage 传送完成后显示的消息 + * @param sendPlayerUUID 玩家的uuid + * @param location 坐标 + * @param doneMessage 传送完成后显示的消息 */ - public void sendPlayerToLocation(@NotNull Collection sendPlayer, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { + public void sendPlayerToLocation(@NotNull Collection sendPlayerUUID, @NotNull BallLocation location, @Nullable DisplayMessage doneMessage) { sendBallMessage( BALL_CHANNEL, - BallActions.SendPlayerToLocation.name(), - new SendPlayerToLocation(new HashSet<>(sendPlayer), location, doneMessage) + SendPlayerToLocationEvent.ACTION, + new SendPlayerToLocationEvent(new HashSet<>(sendPlayerUUID), location, doneMessage) ); } @@ -401,8 +488,8 @@ public abstract class BallAPI { public void sendPlayerToPlayer(@NotNull UUID sendPlayer, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) { sendBallMessage( BALL_CHANNEL, - BallActions.SendPlayerToPlayer.name(), - new SendPlayerToPlayer(Collections.singleton(sendPlayer), toPlayer, doneMessage, doneTargetMessage) + SendPlayerToPlayerEvent.ACTION, + new SendPlayerToPlayerEvent(Collections.singleton(sendPlayer), toPlayer, doneMessage, doneTargetMessage) ); } @@ -411,16 +498,16 @@ public abstract class BallAPI { *

* 支持跨服传送 * - * @param sendPlayer 被传送的玩家 + * @param sendPlayerUUID 被传送的玩家 * @param toPlayer 传送的目标玩家 * @param doneMessage 传送完成后显示的消息,自动将 %player_name% 替换成传送目标玩家的名称 * @param doneTargetMessage 传送完成后目标玩家显示的消息,自动将 %player_name% 替换成被传送者的名称 */ - public void sendPlayerToPlayer(@NotNull Collection sendPlayer, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) { + public void sendPlayerToPlayer(@NotNull Collection sendPlayerUUID, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) { sendBallMessage( BALL_CHANNEL, - BallActions.SendPlayerToPlayer.name(), - new SendPlayerToPlayer(new HashSet<>(sendPlayer), toPlayer, doneMessage, doneTargetMessage) + SendPlayerToPlayerEvent.ACTION, + new SendPlayerToPlayerEvent(new HashSet<>(sendPlayerUUID), toPlayer, doneMessage, doneTargetMessage) ); } @@ -431,7 +518,7 @@ public abstract class BallAPI { * @param action 执行动作 */ public void sendBallMessage(@NotNull String channel, @NotNull String action) { - sendBallMessage(channel, new BallMessage(action)); + sendBallMessage(new BallMessageInfo(channel, action)); } /** @@ -442,48 +529,53 @@ public abstract class BallAPI { * @param content 附加参数 */ public void sendBallMessage(@NotNull String channel, @NotNull String action, @NotNull Object content) { - sendBallMessage(channel, new BallMessage(action, content)); + sendBallMessage(new BallMessageInfo(channel, action, content)); } /** * 发送自定义消息 * - * @param channel 消息频道 - * @param message 消息内容 + * @param messageInfo 消息内容 */ - public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message) { - sendBallMessage(channel, message, false); + public void sendBallMessage(@NotNull BallMessageInfo messageInfo) { + sendBallMessage(messageInfo, false); } /** * 自定义服务消息信息并发送 * - * @param channel 消息频道 - * @param message 消息内容 - * @param block 是否阻塞(设置为 true 则必须等待消息写入网络的操作完成后,该方法才会退出) + * @param messageInfo 消息内容 + * @param block 是否阻塞(设置为 true 则必须等待消息写入网络的操作完成后,该方法才会退出) */ - public void sendBallMessage(@NotNull String channel, @NotNull BallMessage message, boolean block) { - if (block) { - pubConnection.sync().publish(channel, message); - } else { - pubConnection.async().publish(channel, message); + 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); + } + } + for (BallListener listener : BallAPI.getInstance().getListeners()) { + try { + listener.onMessageSend(messageInfo); + } catch (Exception | Error e) { + e.printStackTrace(); + } } } - public void subscribe(@NotNull String... channel) { - subConnection.sync().subscribe(channel); + public void addListener(@NotNull BallListener listener) { + ArrayList newListeners = new ArrayList<>(listeners); + newListeners.add(listener); + newListeners.sort(Comparator.comparing(BallListener::getPriority)); + listeners = newListeners; } - public void subscribePatterns(@NotNull String patterns) { - subConnection.sync().psubscribe(patterns); - } - - public void unsubscribe(@NotNull String... channel) { - subConnection.sync().unsubscribe(channel); - } - - public void unsubscribePatterns(@NotNull String patterns) { - subConnection.sync().punsubscribe(patterns); + public void removeListener(@NotNull BallListener listener) { + ArrayList newListeners = new ArrayList<>(listeners); + newListeners.remove(listener); + listeners = newListeners; } /** @@ -623,7 +715,10 @@ public abstract class BallAPI { return playerInfo; } - protected abstract void onMessage(String channel, BallMessage message); + @NotNull + public List getListeners() { + return listeners; + } @NotNull public abstract Logger getLogger(); @@ -637,36 +732,4 @@ public abstract class BallAPI { public RedisClient getRedisClient() { return redisClient; } - - private class InnerListener implements RedisPubSubListener { - @Override - public void message(String channel, BallMessage message) { - onMessage(channel, message); - } - - @Override - public void message(String pattern, String channel, BallMessage message) { - - } - - @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/config/BallConfig.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/config/BallConfig.java new file mode 100644 index 0000000..c6e08bc --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/config/BallConfig.java @@ -0,0 +1,17 @@ +package cn.hamster3.mc.plugin.ball.common.config; + +import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.jetbrains.annotations.NotNull; + +@Data +@AllArgsConstructor +public class BallConfig { + @NotNull + private BallServerInfo localInfo; + @NotNull + private String host; + private int port; + private int eventLoopThread; +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessage.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java similarity index 83% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessage.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java index eee92f0..7d9b7ee 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessage.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java @@ -20,22 +20,22 @@ import java.util.UUID; /** * 服务消息 */ -@SuppressWarnings("unused") @Data -public class BallMessage { +@SuppressWarnings("unused") +public class BallMessageInfo { /** * 编解码器 */ - public static final RedisCodec REDIS_CODEC = new RedisCodec() { + public static final RedisCodec CODEC = new RedisCodec() { @Override public String decodeKey(ByteBuffer bytes) { return StringCodec.UTF8.decodeKey(bytes); } @Override - public BallMessage decodeValue(ByteBuffer bytes) { + public BallMessageInfo decodeValue(ByteBuffer bytes) { String string = StringCodec.UTF8.decodeValue(bytes); - return CoreAPI.getInstance().getGson().fromJson(string, BallMessage.class); + return CoreAPI.getInstance().getGson().fromJson(string, BallMessageInfo.class); } @Override @@ -44,7 +44,7 @@ public class BallMessage { } @Override - public ByteBuffer encodeValue(BallMessage value) { + public ByteBuffer encodeValue(BallMessageInfo value) { return StringCodec.UTF8.encodeValue(CoreAPI.getInstance().getGson().toJson(value)); } }; @@ -71,6 +71,11 @@ public class BallMessage { */ @Nullable private BallServerType receiverType; + /** + * 消息的频道 + */ + @NotNull + private String channel; /** * 消息动作 *

@@ -85,19 +90,22 @@ public class BallMessage { */ private JsonElement content; - public BallMessage(@NotNull String action) { + public BallMessageInfo(@NotNull String channel, @NotNull String action) { senderID = BallAPI.getInstance().getLocalServerId(); + this.channel = channel; this.action = action; } - public BallMessage(@NotNull String action, @NotNull Object content) { + public BallMessageInfo(@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 BallMessage(@NotNull String senderID, @Nullable String receiverID, - @Nullable BallServerType receiverType, @NotNull String action, @Nullable JsonElement content) { + public BallMessageInfo(@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; this.receiverType = receiverType; @@ -113,6 +121,7 @@ public class BallMessage { @NotNull public JsonObject toJson() { JsonObject object = new JsonObject(); + object.addProperty("channel", channel); object.addProperty("senderID", senderID); if (receiverID != null) { object.addProperty("toServer", 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 deleted file mode 100644 index 8c0c58d..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/BallActions.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.event; - -public enum BallActions { - // Operate - BroadcastPlayerMessage, - DispatchConsoleCommand, - DispatchPlayerCommand, - KickPlayer, - SendMessageToPlayer, - SendPlayerToLocation, - SendPlayerToPlayer, - - // Player - PlayerInfoUpdate, - PlayerPreLogin, - PlayerLogin, - PlayerPostLogin, - PlayerPreConnectServer, - PlayerConnectServer, - PlayerPostConnectServer, - PlayerLogout, - - // Server - ServerOffline, - ServerOnline -} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessage.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java similarity index 72% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessage.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java index 1ef1f64..6342330 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessage.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/BroadcastPlayerMessageEvent.java @@ -7,7 +7,10 @@ import org.jetbrains.annotations.NotNull; @Data @AllArgsConstructor -public class BroadcastPlayerMessage { +public class BroadcastPlayerMessageEvent { + public static final String ACTION = "BroadcastPlayerMessage"; + @NotNull private final DisplayMessage message; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommand.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java similarity index 72% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommand.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java index a1900a8..a27e40e 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommand.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchConsoleCommandEvent.java @@ -8,11 +8,13 @@ import org.jetbrains.annotations.Nullable; @Data @AllArgsConstructor -public class DispatchConsoleCommand { +public class DispatchConsoleCommandEvent { + public static final String ACTION = "DispatchConsoleCommand"; + @Nullable - private final BallServerType serverType; + private final BallServerType type; @Nullable private final String serverID; @NotNull private final String command; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommand.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java similarity index 73% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommand.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java index 7c90528..e13018b 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommand.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/DispatchPlayerCommandEvent.java @@ -10,11 +10,13 @@ import java.util.UUID; @Data @AllArgsConstructor -public class DispatchPlayerCommand { +public class DispatchPlayerCommandEvent { + public static final String ACTION = "DispatchPlayerCommand"; + @Nullable - private final BallServerType serverType; + private final BallServerType type; @Nullable private final UUID uuid; @NotNull private final String command; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayer.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java similarity index 80% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayer.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java index 510be3c..64bee96 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayer.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/KickPlayerEvent.java @@ -9,9 +9,12 @@ import java.util.UUID; @Data @AllArgsConstructor -public class KickPlayer { +public class KickPlayerEvent { + public static final String ACTION = "KickPlayer"; + @NotNull private final UUID uuid; @NotNull private final Component reason; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayer.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java similarity index 78% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayer.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java index e29e535..23c48f3 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayer.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendMessageToPlayerEvent.java @@ -10,9 +10,11 @@ import java.util.UUID; @Data @AllArgsConstructor -public class SendMessageToPlayer { +public class SendMessageToPlayerEvent { + public static final String ACTION = "SendMessageToPlayer"; + @NotNull private final Set receivers; @NotNull private final DisplayMessage message; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocation.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java similarity index 77% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocation.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java index 8d2458c..d4519eb 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocation.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToLocationEvent.java @@ -12,11 +12,14 @@ import java.util.UUID; @Data @AllArgsConstructor -public class SendPlayerToLocation { +public class SendPlayerToLocationEvent { + public static final String ACTION = "SendPlayerToLocation"; + @NotNull - private final Set sendPlayer; + private final Set sendPlayerUUID; @NotNull private final BallLocation location; @Nullable private final DisplayMessage doneMessage; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayer.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java similarity index 72% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayer.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java index b5fef17..3af5576 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayer.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/operate/SendPlayerToPlayerEvent.java @@ -11,13 +11,16 @@ import java.util.UUID; @Data @AllArgsConstructor -public class SendPlayerToPlayer { +public class SendPlayerToPlayerEvent { + public static final String ACTION = "SendPlayerToPlayer"; + @NotNull - private final Set sendPlayer; + private final Set sendPlayerUUID; @NotNull - private final UUID toPlayer; + private final UUID toPlayerUUID; @Nullable private final DisplayMessage doneMessage; @Nullable private final DisplayMessage doneTargetMessage; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServer.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServer.java deleted file mode 100644 index 807c42a..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServer.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Data; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * 玩家进入子服 - *

- * 仅在使用 velocity 代理端时才会触发这个事件 - * - * @see BallPlayerPreConnectServer 玩家准备进入子服 - * @see BallPlayerConnectServer 玩家进入子服 - * @see BallPlayerPostConnectServer 玩家已经进入子服 - */ -@Data -@AllArgsConstructor -public class BallPlayerConnectServer { - @NotNull - private final BallPlayerInfo playerInfo; - @Nullable - private final String from; - @NotNull - private final String to; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerConnectServerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java similarity index 76% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerConnectServerEvent.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java index 92e2d71..4dde9f2 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerConnectServerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerConnectServerEvent.java @@ -1,9 +1,8 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; +package cn.hamster3.mc.plugin.ball.common.event.player; import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; +import lombok.Data; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,13 +15,15 @@ import org.jetbrains.annotations.Nullable; * @see BallPlayerConnectServerEvent 玩家进入子服 * @see BallPlayerPostConnectServerEvent 玩家已经进入子服 */ -@Getter +@Data @AllArgsConstructor -public class BallPlayerConnectServerEvent extends Event { +public class BallPlayerConnectServerEvent { + public static final String ACTION = "PlayerConnectServer"; + @NotNull private final BallPlayerInfo playerInfo; @Nullable private final String from; @NotNull private final String to; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdate.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java similarity index 75% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdate.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java index 42a76bb..5df3559 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdate.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java @@ -10,7 +10,9 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class BallPlayerInfoUpdate { +public class BallPlayerInfoUpdateEvent { + public static final String ACTION = "PlayerInfoUpdateEvent"; + @NotNull private final BallPlayerInfo playerInfo; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogin.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java similarity index 78% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogin.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java index e69a58b..8605061 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogin.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLoginEvent.java @@ -10,7 +10,10 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class BallPlayerLogin { +public class BallPlayerLoginEvent { + public static final String ACTION = "PlayerLogin"; + @NotNull private final BallPlayerInfo playerInfo; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogout.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java similarity index 78% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogout.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java index ba521e6..fdca0b3 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogout.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerLogoutEvent.java @@ -10,7 +10,9 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class BallPlayerLogout { +public class BallPlayerLogoutEvent { + public static final String ACTION = "PlayerLogout"; + @NotNull private BallPlayerInfo playerInfo; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServer.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServer.java deleted file mode 100644 index 370c127..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServer.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Data; -import org.jetbrains.annotations.NotNull; - -/** - * 玩家已经进入子服 - * - * @see BallPlayerPreConnectServer 玩家准备进入子服 - * @see BallPlayerConnectServer 玩家进入子服 - * @see BallPlayerPostConnectServer 玩家已经进入子服 - */ -@Data -@AllArgsConstructor -public class BallPlayerPostConnectServer { - @NotNull - private final BallPlayerInfo playerInfo; - @NotNull - private final String from; - @NotNull - private final String to; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPostConnectServerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java similarity index 61% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPostConnectServerEvent.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java index 2854cb9..d63ae4e 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPostConnectServerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostConnectServerEvent.java @@ -1,9 +1,8 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; +package cn.hamster3.mc.plugin.ball.common.event.player; import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; +import lombok.Data; import org.jetbrains.annotations.NotNull; /** @@ -13,13 +12,11 @@ import org.jetbrains.annotations.NotNull; * @see BallPlayerConnectServerEvent 玩家进入子服 * @see BallPlayerPostConnectServerEvent 玩家已经进入子服 */ -@Getter +@Data @AllArgsConstructor -public class BallPlayerPostConnectServerEvent extends Event { +public class BallPlayerPostConnectServerEvent { + public static final String ACTION = "PlayerPostConnectServer"; + @NotNull private final BallPlayerInfo playerInfo; - @NotNull - private final String from; - @NotNull - private final String to; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLogin.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java similarity index 77% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLogin.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java index e017f9d..299fa50 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLogin.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPostLoginEvent.java @@ -10,7 +10,9 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class BallPlayerPostLogin { +public class BallPlayerPostLoginEvent { + public static final String ACTION = "PlayerPostLogin"; + @NotNull private final BallPlayerInfo playerInfo; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServer.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServer.java deleted file mode 100644 index f5ee4e0..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServer.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.event.player; - -import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; -import lombok.AllArgsConstructor; -import lombok.Data; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * 玩家准备进入子服 - * - * @see BallPlayerPreConnectServer 玩家准备进入子服 - * @see BallPlayerConnectServer 玩家进入子服 - * @see BallPlayerPostConnectServer 玩家已经进入子服 - */ -@Data -@AllArgsConstructor -public class BallPlayerPreConnectServer { - @NotNull - private final BallPlayerInfo playerInfo; - @Nullable - private final String from; - @NotNull - private final String to; -} \ No newline at end of file diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPreConnectServerEvent.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java similarity index 74% rename from ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPreConnectServerEvent.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java index 79bbd73..9a21b5f 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/ball/bungee/event/player/BallPlayerPreConnectServerEvent.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreConnectServerEvent.java @@ -1,9 +1,8 @@ -package cn.hamster3.mc.plugin.ball.bungee.event.player; +package cn.hamster3.mc.plugin.ball.common.event.player; import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; import lombok.AllArgsConstructor; -import lombok.Getter; -import net.md_5.bungee.api.plugin.Event; +import lombok.Data; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -14,13 +13,16 @@ import org.jetbrains.annotations.Nullable; * @see BallPlayerConnectServerEvent 玩家进入子服 * @see BallPlayerPostConnectServerEvent 玩家已经进入子服 */ -@Getter +@Data @AllArgsConstructor -public class BallPlayerPreConnectServerEvent extends Event { +public class BallPlayerPreConnectServerEvent { + public static final String ACTION = "PlayerPreConnectServer"; + @NotNull private final BallPlayerInfo playerInfo; @Nullable private final String from; @NotNull private final String to; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLogin.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java similarity index 73% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLogin.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java index 4bc0458..23ce371 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLogin.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerPreLoginEvent.java @@ -9,7 +9,9 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class BallPlayerPreLogin { +public class BallPlayerPreLoginEvent { + public static final String ACTION = "PlayerPreLogin"; + @NotNull private final String playerName; -} \ No newline at end of file +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOffline.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java similarity index 61% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOffline.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java index a75957d..2109925 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOffline.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOfflineEvent.java @@ -1,6 +1,5 @@ package cn.hamster3.mc.plugin.ball.common.event.server; -import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; import lombok.AllArgsConstructor; import lombok.Data; import org.jetbrains.annotations.NotNull; @@ -10,7 +9,9 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class ServerOffline { +public class ServerOfflineEvent { + public static final String ACTION = "ServerOffline"; + @NotNull - private final BallServerInfo serverInfo; -} \ No newline at end of file + private final String serverID; +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnline.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java similarity index 77% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnline.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java index 896eb16..1fc203e 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnline.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/server/ServerOnlineEvent.java @@ -10,7 +10,10 @@ import org.jetbrains.annotations.NotNull; */ @Data @AllArgsConstructor -public class ServerOnline { +public class ServerOnlineEvent { + public static final String ACTION = "ServerOnline"; + @NotNull private final BallServerInfo serverInfo; -} \ No newline at end of file + +} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugLogListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java similarity index 60% rename from ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugLogListener.java rename to ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java index 843b35c..de77072 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugLogListener.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java @@ -1,33 +1,34 @@ 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.data.BallMessageInfo; import io.lettuce.core.pubsub.RedisPubSubListener; -public class BallDebugLogListener implements RedisPubSubListener { - public static final BallDebugLogListener INSTANCE = new BallDebugLogListener(); +public class BallDebugListener implements RedisPubSubListener { + public static final BallDebugListener INSTANCE = new BallDebugListener(); - private BallDebugLogListener() { + private BallDebugListener() { } @Override - public void message(String channel, BallMessage message) { - BallAPI.getInstance().getLogger().info("从 " + channel + " 收到了一条消息: " + message); + public void message(String channel, BallMessageInfo event) { + BallAPI.getInstance().getLogger().info("从 " + channel + " 收到了一条消息: " + event); } @Override - public void message(String pattern, String channel, BallMessage message) { - BallAPI.getInstance().getLogger().info("从 " + channel + "(" + pattern + ") 收到了一条消息: " + message); + public void message(String pattern, String channel, BallMessageInfo 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); + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); } @Override 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 new file mode 100644 index 0000000..a360f1e --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..6b0451e --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java @@ -0,0 +1,167 @@ +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/ListenerPriority.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/ListenerPriority.java new file mode 100644 index 0000000..c589478 --- /dev/null +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/ListenerPriority.java @@ -0,0 +1,45 @@ +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; + } +}