feat: 新增频道分组功能
This commit is contained in:
@@ -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.hook.PlaceholderHook;
|
||||||
import cn.hamster3.mc.plugin.ball.bukkit.listener.BallBukkitListener;
|
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.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.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.BallActions;
|
||||||
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
|
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -65,6 +67,16 @@ public class HamsterBallPlugin extends JavaPlugin {
|
|||||||
Bukkit.getPluginManager().registerEvents(UpdatePlayerInfoListener.INSTANCE, this);
|
Bukkit.getPluginManager().registerEvents(UpdatePlayerInfoListener.INSTANCE, this);
|
||||||
BallAPI.getInstance().getEventBus().register(UpdatePlayerInfoListener.INSTANCE);
|
BallAPI.getInstance().getEventBus().register(UpdatePlayerInfoListener.INSTANCE);
|
||||||
logger.info("已注册监听器 UpdatePlayerInfoListener");
|
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(() -> {
|
sync(() -> {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
|
@@ -1,22 +1,16 @@
|
|||||||
package cn.hamster3.mc.plugin.ball.bukkit.listener;
|
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.api.BallAPI;
|
||||||
import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
|
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.BallPlayerLoginEvent;
|
||||||
import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerLogoutEvent;
|
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 com.google.common.eventbus.Subscribe;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
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.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@@ -29,31 +23,6 @@ public class UpdatePlayerInfoListener implements Listener {
|
|||||||
private UpdatePlayerInfoListener() {
|
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)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@@ -64,7 +33,7 @@ public class UpdatePlayerInfoListener implements Listener {
|
|||||||
PLAYER_PROXY_SERVER.getOrDefault(player.getUniqueId(), "unknown"),
|
PLAYER_PROXY_SERVER.getOrDefault(player.getUniqueId(), "unknown"),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
uploadPlayerInfo(playerInfo);
|
BallBukkitUtils.uploadPlayerInfo(playerInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -80,6 +49,6 @@ public class UpdatePlayerInfoListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
playerInfo.setOnline(false);
|
playerInfo.setOnline(false);
|
||||||
uploadPlayerInfo(playerInfo);
|
BallBukkitUtils.uploadPlayerInfo(playerInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,20 @@
|
|||||||
package cn.hamster3.mc.plugin.ball.bukkit.util;
|
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.HikariConfig;
|
||||||
import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariDataSource;
|
import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariDataSource;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
public final class BallBukkitUtils {
|
public final class BallBukkitUtils {
|
||||||
private BallBukkitUtils() {
|
private BallBukkitUtils() {
|
||||||
@@ -38,4 +47,28 @@ public final class BallBukkitUtils {
|
|||||||
return null;
|
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)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -52,10 +52,8 @@ public class HamsterBallPlugin extends Plugin {
|
|||||||
logger.info("已注册监听器 BallBungeeListener");
|
logger.info("已注册监听器 BallBungeeListener");
|
||||||
BallAPI.getInstance().getEventBus().register(BallBungeeListenerV2.INSTANCE);
|
BallAPI.getInstance().getEventBus().register(BallBungeeListenerV2.INSTANCE);
|
||||||
logger.info("已注册监听器 BallBungeeListenerV2");
|
logger.info("已注册监听器 BallBungeeListenerV2");
|
||||||
if (!BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) {
|
ProxyServer.getInstance().getPluginManager().registerListener(this, UpdatePlayerInfoListener.INSTANCE);
|
||||||
ProxyServer.getInstance().getPluginManager().registerListener(this, UpdatePlayerInfoListener.INSTANCE);
|
logger.info("已注册监听器 UpdatePlayerInfoListener");
|
||||||
logger.info("已注册监听器 UpdatePlayerInfoListener");
|
|
||||||
}
|
|
||||||
BallAPI.getInstance().sendBallMessage(
|
BallAPI.getInstance().sendBallMessage(
|
||||||
BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(),
|
BallAPI.BALL_CHANNEL, BallActions.ServerOnline.name(),
|
||||||
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()),
|
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo()),
|
||||||
|
@@ -50,12 +50,13 @@ public final class BallBungeeCordUtils {
|
|||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
BallAPI.getInstance().sendBallMessage(
|
if (!BallAPI.getInstance().getBallConfig().isGameServerUpdatePlayerInfo()) {
|
||||||
BallAPI.PLAYER_INFO_UPDATE_CHANNEL,
|
BallAPI.getInstance().sendBallMessage(
|
||||||
BallActions.BallPlayerInfoUpdate.name(),
|
BallAPI.PLAYER_INFO_UPDATE_CHANNEL,
|
||||||
new BallPlayerInfoUpdateEvent(playerInfo),
|
BallActions.BallPlayerInfoUpdate.name(),
|
||||||
false
|
new BallPlayerInfoUpdateEvent(playerInfo)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,6 +18,6 @@ public class BallDebugListener {
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onMessageSent(MessageSentEvent event) {
|
public void onMessageSent(MessageSentEvent event) {
|
||||||
BallAPI.getInstance().getLogger().info("从 " + event.getChannel() + " 发送了了一条消息: " + event.getMessage());
|
BallAPI.getInstance().getLogger().info("向 " + event.getChannel() + " 发送了一条消息: " + event.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user