java - Bukkit / Spigot MC (Java) 中是否有一个实现的功能可以让我让玩家 ping 服务器?
问题描述
我目前正在尝试为我的 Streamer 朋友想要运行的服务器编写 Minecraft 插件。我需要的是以下内容:
我需要一个函数或方法来让玩家 ping 服务器。这样玩家/ping
就可以在聊天框中输入内容并从服务器获得类似于以下内容的响应[Server]: Your current Ping is 62ms.
我查看了 Bukkit 文档,例如http://docs.codelanx.com/Bukkit/1.7.10/或http://bukkit.luricos.de/api/1.7.9-R0.2/,但我不能找不到适合我需要的东西。
我的插件.yml:
name: Beginning
version: ${project.version}
main: de.nightcore.beginning.Main
api-version: 1.16
commands:
date:
description: Shows the current time and Date
ping:
description: Gives the Player its current ping to the server
我的主要课程:
package de.nightcore.beginning;
import de.nightcore.beginning.commands.DateCommand;
import de.nightcore.beginning.commands.PingCommand;
import de.nightcore.beginning.listeners.JoinListener;
import de.nightcore.beginning.listeners.QuitListener;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public final class Main extends JavaPlugin {
@Override
public void onEnable()
{
Bukkit.getLogger().fine("Plugin wird geladen!");
listenerRegistration();
commandRegistration();
}
@Override
public void onDisable()
{
Bukkit.getLogger().fine("Plugin wird beendet!");
}
public static String getPrefix()
{
return ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "Server" + ChatColor.DARK_GRAY + "] " + ChatColor.WHITE;
}
private void listenerRegistration()
{
PluginManager pluginManager = Bukkit.getPluginManager();
pluginManager.registerEvents(new JoinListener(), this);
pluginManager.registerEvents(new QuitListener(), this);
}
private void commandRegistration()
{
getCommand("date").setExecutor(new DateCommand());
getCommand("ping").setExecutor(new PingCommand());
}
}
最后是我的 PingCommand 类:
package de.nightcore.beginning.commands;
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.*;
//TODO: Ping Command / Command that provides Connection Info
public class PingCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Player player = sender.getServer().getPlayer("%UUID%"); ;
Server server = sender.getServer();
//Source Code to provide information about the players current ping
return false;
}
}
解决方案
您需要将 Player 转换为 CraftPlayer,然后使用 CraftPlayer#getHandler() 获取 EntityPlayer,您可以在其中将玩家 ping 作为 int 值返回。
((CraftPlayer) player).getHandle().ping;
您还需要添加 spigot 依赖项(API 似乎没有包含它)。
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>LATEST</version>
<scope>provided</scope>
</dependency>
推荐阅读
- html - Powershell - 无法发送邮件 HTML 消息
- objective-c - MSAL 中对 Mac 上 ObjectiveC 的代理支持
- database - GridFS 存储 GZIPOutputStream
- python - 在python中将cx_Oracle.LOB数据转换为字符串
- reactjs - 组件动画结束后重置 React 状态?
- flutter - 这个问题可以使用什么flutter包?
- python - 试图理解 Python 包装器
- logging - 如何使用主机应用程序提供的日志适配器从基于 Akka 的库中进行日志记录?
- c - Arduino IDE 找不到我的库目录 - Windows10
- neo4j - Neo4j 的 Cypher 查询中面临的语法问题