如何使用Java或Kotlin获取BungeeCord的服务器Ping值
你当前的代码属于BungeeCord/Velocity系列代理端插件的事件监听代码,获取Ping分两种常见场景,对应实现如下:
场景1:获取当前登录玩家到代理服务器的Ping
直接从登录事件的玩家对象中获取即可:
Kotlin 实现
class Events: Listener { @EventHandler fun joinEvent(event: PostLoginEvent) { val plugin = Main.getInstance() val server = plugin.proxy.getServerInfo("pserver") // 获取玩家Ping val playerPing = event.player.ping // 可直接打印或使用该值 println("玩家${event.player.name}的Ping为:$playerPing") } }
Java 实现
public class Events implements Listener { @EventHandler void postLogin (PostLoginEvent event){ Main plugin = Main.getInstance(); ServerInfo server = plugin.getProxy().getServerInfo("pserver"); // 获取玩家Ping int playerPing = event.getPlayer().getPing(); // 可直接打印或使用该值 System.out.println("玩家" + event.getPlayer().getName() + "的Ping为:" + playerPing); } }
场景2:获取代理服务器到下游子服务器pserver的Ping
需要调用ServerInfo的异步Ping接口获取,避免阻塞主线程:
Kotlin 实现
class Events: Listener { @EventHandler fun joinEvent(event: PostLoginEvent) { val plugin = Main.getInstance() val server = plugin.proxy.getServerInfo("pserver") // 异步Ping下游服务器 server.ping({ result -> // Ping成功,拿到服务器响应的Ping值 val serverPing = result.ping println("子服务器pserver的Ping为:$serverPing") }, { error -> // Ping失败处理 println("Ping子服务器失败:${error.message}") }) } }
Java 实现
public class Events implements Listener { @EventHandler void postLogin (PostLoginEvent event){ Main plugin = Main.getInstance(); ServerInfo server = plugin.getProxy().getServerInfo("pserver"); // 异步Ping下游服务器 server.ping(result -> { // Ping成功,拿到服务器响应的Ping值 long serverPing = result.getPing(); System.out.println("子服务器pserver的Ping为:" + serverPing); }, error -> { // Ping失败处理 System.out.println("Ping子服务器失败:" + error.getMessage()); }); } }
提示:Ping下游服务器的API会因为你使用的代理端(BungeeCord/Velocity)版本不同存在细微差异,可根据实际版本调整回调参数即可。
内容的提问来源于stack exchange,提问作者Clafter
相关产品推荐
相关产品推荐

