From 1d1339c2e965f1215ffebc1d4539df19ec34dd35 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Mon, 20 Nov 2023 14:44:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=A2=91=E9=81=93?= =?UTF-8?q?=E5=88=86=E7=BB=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/ball/bukkit/HamsterBallPlugin.java | 12 ++++++ .../listener/UpdatePlayerInfoListener.java | 37 ++----------------- .../ball/bukkit/util/BallBukkitUtils.java | 33 +++++++++++++++++ .../plugin/core/bungee/HamsterBallPlugin.java | 6 +-- .../core/bungee/util/BallBungeeCordUtils.java | 13 ++++--- .../common/listener/BallDebugListener.java | 2 +- 6 files changed, 58 insertions(+), 45 deletions(-) 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 6905bad..f62aa93 100644 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java +++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java @@ -4,7 +4,9 @@ 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.bukkit.listener.UpdatePlayerInfoListener; +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.entity.BallPlayerInfo; import cn.hamster3.mc.plugin.ball.common.event.BallActions; import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent; import org.bukkit.Bukkit; @@ -65,6 +67,16 @@ public class HamsterBallPlugin extends JavaPlugin { Bukkit.getPluginManager().registerEvents(UpdatePlayerInfoListener.INSTANCE, this); BallAPI.getInstance().getEventBus().register(UpdatePlayerInfoListener.INSTANCE); logger.info("已注册监听器 UpdatePlayerInfoListener"); + + // 移除失效的在线玩家 + BallAPI.getInstance().getAllPlayerInfo().values() + .stream() + .filter(BallPlayerInfo::isOnline) + .filter(o -> BallAPI.getInstance().isLocalServer(o.getGameServer())) + .forEach(playerInfo -> { + playerInfo.setOnline(false); + BallBukkitUtils.uploadPlayerInfo(playerInfo); + }); } sync(() -> { if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java index bfc0133..048f9ef 100644 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java +++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/UpdatePlayerInfoListener.java @@ -1,22 +1,16 @@ package cn.hamster3.mc.plugin.ball.bukkit.listener; +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.entity.BallPlayerInfo; -import cn.hamster3.mc.plugin.ball.common.event.BallActions; -import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerInfoUpdateEvent; import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerLoginEvent; import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerLogoutEvent; -import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import com.google.common.eventbus.Subscribe; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -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; import java.util.concurrent.ConcurrentHashMap; @@ -29,31 +23,6 @@ public class UpdatePlayerInfoListener implements Listener { private UpdatePlayerInfoListener() { } - public static void uploadPlayerInfo(@NotNull BallPlayerInfo playerInfo) { - CoreAPI.getInstance().getExecutorService().execute(() -> { - try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { - try (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(); - } - } catch (SQLException e) { - e.printStackTrace(); - } - BallAPI.getInstance().sendBallMessage( - BallAPI.PLAYER_INFO_UPDATE_CHANNEL, - BallActions.BallPlayerInfoUpdate.name(), - new BallPlayerInfoUpdateEvent(playerInfo), - false - ); - }); - } - @EventHandler(ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); @@ -64,7 +33,7 @@ public class UpdatePlayerInfoListener implements Listener { PLAYER_PROXY_SERVER.getOrDefault(player.getUniqueId(), "unknown"), true ); - uploadPlayerInfo(playerInfo); + BallBukkitUtils.uploadPlayerInfo(playerInfo); } @Subscribe @@ -80,6 +49,6 @@ public class UpdatePlayerInfoListener implements Listener { return; } playerInfo.setOnline(false); - uploadPlayerInfo(playerInfo); + BallBukkitUtils.uploadPlayerInfo(playerInfo); } } diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java index 4dd5d4b..cc7b838 100644 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java +++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/util/BallBukkitUtils.java @@ -1,11 +1,20 @@ package cn.hamster3.mc.plugin.ball.bukkit.util; +import cn.hamster3.mc.plugin.ball.common.api.BallAPI; +import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; +import cn.hamster3.mc.plugin.ball.common.event.BallActions; +import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerInfoUpdateEvent; +import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariConfig; import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariDataSource; import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; public final class BallBukkitUtils { private BallBukkitUtils() { @@ -38,4 +47,28 @@ public final class BallBukkitUtils { return null; } } + + public static void uploadPlayerInfo(@NotNull BallPlayerInfo playerInfo) { + CoreAPI.getInstance().getExecutorService().execute(() -> { + try (Connection connection = BallAPI.getInstance().getDatasource().getConnection()) { + try (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(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + BallAPI.getInstance().sendBallMessage( + BallAPI.PLAYER_INFO_UPDATE_CHANNEL, + BallActions.BallPlayerInfoUpdate.name(), + new BallPlayerInfoUpdateEvent(playerInfo) + ); + }); + } } diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java index 8e0b111..cc5e9d8 100644 --- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java +++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java @@ -52,10 +52,8 @@ public class HamsterBallPlugin extends Plugin { logger.info("已注册监听器 BallBungeeListener"); BallAPI.getInstance().getEventBus().register(BallBungeeListenerV2.INSTANCE); logger.info("已注册监听器 BallBungeeListenerV2"); - if (!BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) { - ProxyServer.getInstance().getPluginManager().registerListener(this, UpdatePlayerInfoListener.INSTANCE); - logger.info("已注册监听器 UpdatePlayerInfoListener"); - } + ProxyServer.getInstance().getPluginManager().registerListener(this, UpdatePlayerInfoListener.INSTANCE); + logger.info("已注册监听器 UpdatePlayerInfoListener"); BallAPI.getInstance().sendBallMessage( BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(), new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()), diff --git a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java index 00af80e..deed911 100644 --- a/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java +++ b/ball-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java @@ -50,12 +50,13 @@ public final class BallBungeeCordUtils { } catch (SQLException e) { e.printStackTrace(); } - BallAPI.getInstance().sendBallMessage( - BallAPI.PLAYER_INFO_UPDATE_CHANNEL, - BallActions.BallPlayerInfoUpdate.name(), - new BallPlayerInfoUpdateEvent(playerInfo), - false - ); + if (!BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) { + BallAPI.getInstance().sendBallMessage( + BallAPI.PLAYER_INFO_UPDATE_CHANNEL, + BallActions.BallPlayerInfoUpdate.name(), + new BallPlayerInfoUpdateEvent(playerInfo) + ); + } }); } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java index 45cd33a..10ae469 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java @@ -18,6 +18,6 @@ public class BallDebugListener { @Subscribe public void onMessageSent(MessageSentEvent event) { - BallAPI.getInstance().getLogger().info("从 " + event.getChannel() + " 发送了了一条消息: " + event.getMessage()); + BallAPI.getInstance().getLogger().info("向 " + event.getChannel() + " 发送了一条消息: " + event.getMessage()); } }