perf: 优化稳定性
This commit is contained in:
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user