我必须知道对于反应测试的玩家的确切ping。 我使用处理程序:
public int pingPlayer(Player p) {
try {
String bukkitversion = Bukkit.getServer().getClass().getPackage().getName().substring(23);
Class<?> craftPlayer = Class.forName("org.bukkit.craftbukkit." + bukkitversion + ".entity.CraftPlayer");
Object handle = craftPlayer.getMethod("getHandle").invoke(p);
Integer ping = (Integer) handle.getClass().getDeclaredField("ping").get(handle);
return ping.intValue();
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | NoSuchFieldException e) {
return -1;
}
}
但现在我不知道ping是否是单向的[Server - &gt;播放器]或两种方式[服务器 - &gt;播放器 - &gt;服务器
有人知道,这究竟是如何运作的?
答案 0 :(得分:0)
如果您正在寻找反应测试,请尝试将当前时间存储在System.getCurrentTimeMillis();
中。然后,在随机的一段时间后发生一些事情(很可能在Runnable
中以防止冻结服务器),并且当他们执行操作时,使用相同的方法来获得不同的方法。减去这两个数字,除以1000得到时间差(以秒为单位)。
示例:
// stuff before reaction test
Long timeStart = System.getCurrentTimeMillis(); // first time
// runnable, action, etc. (what you are testing the reaction time for)
Long timeEnd = System.getCurrentTimeMillis(); // second time
Long timeDifference = timeEnd - timeStart; // difference in time
Integer timeInSeconds = timeDifference / 1000; // difference in time (in seconds)
player.sendMessage("Your time was " + timeInSeconds.toString() + " seconds!"); // send message to player