From afbe103909f904fa44179dea9dcc2da9d56ce317 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Sun, 4 Dec 2022 02:19:00 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/listener/BallBukkitListener.java | 1 - .../plugin/core/bungee/HamsterBallPlugin.java | 8 +++++ .../listener/BallBungeeCordListener.java | 28 +++--------------- .../core/bungee/util/BallBungeeCordUtils.java | 28 ++++++++++++++++++ .../mc/plugin/ball/common/api/BallAPI.java | 29 ++----------------- .../common/connector/BallChannelHandler.java | 11 +++++++ .../player/BallPlayerInfoUpdateEvent.java | 18 ++++++++++++ .../ball/common/listener/BallListener.java | 4 ++- hamster-ball-server/build.gradle | 4 ++- 9 files changed, 78 insertions(+), 53 deletions(-) create mode 100644 hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java diff --git a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java index a2163d8..08b97f4 100644 --- a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java +++ b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java @@ -106,6 +106,5 @@ public class BallBukkitListener extends BallListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) public void onAsyncPlayerChat(AsyncPlayerChatEvent event) { - } } diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java index 7e0cb4b..6cbe1af 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java @@ -1,6 +1,7 @@ package cn.hamster3.mc.plugin.core.bungee; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; +import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent; @@ -52,6 +53,13 @@ public class HamsterBallPlugin extends Plugin { new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()) ); logger.info("HamsterBall 已启动."); + BallAPI.getInstance().getAllPlayerInfo().values().stream() + .filter(BallPlayerInfo::isOnline) + .filter(o -> BallAPI.getInstance().isLocalServer(o.getProxyServer())) + .forEach(playerInfo -> { + playerInfo.setOnline(false); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); + }); } @Override diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java index e04243d..1c8cc4f 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java @@ -27,9 +27,6 @@ import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; import org.jetbrains.annotations.NotNull; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; import java.util.Map; import java.util.UUID; @@ -157,7 +154,7 @@ public final class BallBungeeCordListener extends BallListener implements Listen BallPlayerPostLoginEvent.ACTION, new BallPlayerPostLoginEvent(playerInfo) ); - uploadPlayerInfo(playerInfo); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); } @EventHandler(priority = EventPriority.HIGH) @@ -169,7 +166,7 @@ public final class BallBungeeCordListener extends BallListener implements Listen BallPlayerConnectServerEvent.ACTION, new BallPlayerConnectServerEvent(playerInfo, playerInfo.getGameServer(), event.getTarget().getName()) ); - uploadPlayerInfo(playerInfo); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); } @EventHandler(priority = EventPriority.HIGH) @@ -181,7 +178,7 @@ public final class BallBungeeCordListener extends BallListener implements Listen BallPlayerPostConnectServerEvent.ACTION, new BallPlayerPostConnectServerEvent(playerInfo) ); - uploadPlayerInfo(playerInfo); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); } @EventHandler @@ -201,23 +198,6 @@ public final class BallBungeeCordListener extends BallListener implements Listen BallPlayerLogoutEvent.ACTION, new BallPlayerLogoutEvent(playerInfo) ); - uploadPlayerInfo(playerInfo); - } - - private void uploadPlayerInfo(BallPlayerInfo playerInfo) { - ProxyServer.getInstance().getScheduler().runAsync(HamsterBallPlugin.getInstance(), () -> { - try (Connection connection = CoreAPI.getInstance().getConnection()) { - PreparedStatement statement = connection.prepareStatement("REPLACE INTO `hamster_ball_player_info` VALUES(?, ?, ?, ?, ?);"); - statement.setString(1, playerInfo.getUuid().toString()); - statement.setString(2, playerInfo.getName()); - statement.setString(3, playerInfo.getGameServer()); - statement.setString(4, playerInfo.getProxyServer()); - statement.setBoolean(5, playerInfo.isOnline()); - statement.executeUpdate(); - statement.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - }); + BallBungeeCordUtils.uploadPlayerInfo(playerInfo); } } diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java index 6e5abe2..e949343 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java @@ -3,12 +3,18 @@ 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.entity.BallServerInfo; +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.common.constant.CoreConstantObjects; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.Server; import java.net.InetSocketAddress; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; public final class BallBungeeCordUtils { private BallBungeeCordUtils() { @@ -33,4 +39,26 @@ public final class BallBungeeCordUtils { false ); } + + public static void uploadPlayerInfo(BallPlayerInfo playerInfo) { + CoreConstantObjects.WORKER_EXECUTOR.execute(() -> { + try (Connection connection = CoreAPI.getInstance().getConnection()) { + PreparedStatement statement = connection.prepareStatement("REPLACE INTO `hamster_ball_player_info` VALUES(?, ?, ?, ?, ?);"); + statement.setString(1, playerInfo.getUuid().toString()); + statement.setString(2, playerInfo.getName()); + statement.setString(3, playerInfo.getGameServer()); + statement.setString(4, playerInfo.getProxyServer()); + statement.setBoolean(5, playerInfo.isOnline()); + statement.executeUpdate(); + statement.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + BallAPI.getInstance().sendBallMessage( + BallAPI.BALL_CHANNEL, + BallPlayerInfoUpdateEvent.ACTION, + new BallPlayerInfoUpdateEvent(playerInfo) + ); + }); + } } diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java index 03379e4..1f9c05b 100644 --- a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java @@ -8,7 +8,8 @@ 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.operate.*; -import cn.hamster3.mc.plugin.ball.common.event.player.*; +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.BallListener; @@ -89,31 +90,7 @@ public abstract class BallAPI { } @Override - public void onBallPlayerLogout(@NotNull BallPlayerLogoutEvent event) { - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - } - - @Override - public void onBallPlayerLogin(@NotNull BallPlayerLoginEvent event) { - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - } - - @Override - public void onBallPlayerPostConnectServer(@NotNull BallPlayerPostConnectServerEvent event) { - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - } - - @Override - public void onBallPlayerPostLogin(@NotNull BallPlayerPostLoginEvent event) { - BallPlayerInfo info = event.getPlayerInfo(); - playerInfo.put(info.getUuid(), info); - } - - @Override - public void onBallPlayerPreConnectServer(@NotNull BallPlayerPreConnectServerEvent event) { + public void onBallPlayerInfoUpdate(@NotNull BallPlayerInfoUpdateEvent event) { BallPlayerInfo info = event.getPlayerInfo(); playerInfo.put(info.getUuid(), info); } diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java index 1d55b5a..50f90cf 100644 --- a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/connector/BallChannelHandler.java @@ -116,6 +116,17 @@ public class BallChannelHandler extends SimpleChannelInboundHandler { } break; } + case BallPlayerInfoUpdateEvent.ACTION: { + BallPlayerInfoUpdateEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerInfoUpdateEvent.class); + for (BallListener listener : BallAPI.getInstance().getListeners()) { + try { + listener.onBallPlayerInfoUpdate(event); + } catch (Exception | Error e) { + e.printStackTrace(); + } + } + break; + } case BallPlayerChatEvent.ACTION: { BallPlayerChatEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), BallPlayerChatEvent.class); for (BallListener listener : BallAPI.getInstance().getListeners()) { diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java new file mode 100644 index 0000000..5df3559 --- /dev/null +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/event/player/BallPlayerInfoUpdateEvent.java @@ -0,0 +1,18 @@ +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; + +/** + * 玩家已进入子服 + */ +@Data +@AllArgsConstructor +public class BallPlayerInfoUpdateEvent { + public static final String ACTION = "PlayerInfoUpdateEvent"; + + @NotNull + private final BallPlayerInfo playerInfo; +} diff --git a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java index e3486cc..fcc5bf1 100644 --- a/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java +++ b/hamster-ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallListener.java @@ -6,7 +6,6 @@ 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; -@SuppressWarnings("unused") public abstract class BallListener { /** * 该监听器的执行优先级 @@ -53,6 +52,9 @@ public abstract class BallListener { public void onBallPlayerLogout(@NotNull BallPlayerLogoutEvent event) { } + public void onBallPlayerInfoUpdate(@NotNull BallPlayerInfoUpdateEvent event) { + } + public void onBallPlayerChat(@NotNull BallPlayerChatEvent event) { } diff --git a/hamster-ball-server/build.gradle b/hamster-ball-server/build.gradle index 4689357..fb78562 100644 --- a/hamster-ball-server/build.gradle +++ b/hamster-ball-server/build.gradle @@ -14,11 +14,13 @@ dependencies { shade 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0' // https://mvnrepository.com/artifact/io.netty/netty-all + //noinspection GradlePackageUpdate implementationShade 'io.netty:netty-all:4.1.82.Final' // https://mvnrepository.com/artifact/org.yaml/snakeyaml implementationShade 'org.yaml:snakeyaml:1.33' // https://mvnrepository.com/artifact/com.google.code.gson/gson - implementationShade 'com.google.code.gson:gson:2.8.9' + //noinspection GradlePackageUpdate + implementationShade 'com.google.code.gson:gson:2.8.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'