我正在纸上做一个插件,我需要在执行命令时获取玩家的输出,例如,如果玩家使用: / tpa 获取如下输出:“在服务器中时,将传送请求发送到”控制台它只显示“用户发出命令:/tpa”
package cherry.plugins;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerChatEvent;
public class CommandLogger implements Listener {
private final CherryCostume plugin;
// Variable para capturar la salida del comando antes de que se envíe al chat
private String currentCommandSender;
private String lastCommandOutput;
public CommandLogger(CherryCostume plugin) {
this.plugin = plugin;
Bukkit.getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
String command = event.getMessage().substring(1); // Remueve la barra inicial
String playerName = event.getPlayer().getName();
// Verificamos si el comando es de tipo /tell o /msg
if (command.startsWith("tell") || command.startsWith("msg")) {
String[] commandParts = command.split(" ", 3);
if (commandParts.length >= 3) {
String targetPlayer = commandParts[1]; // Jugador objetivo
String message = commandParts[2]; // Mensaje del comando
// Guardamos el jugador que envió el comando para comparar más tarde
currentCommandSender = playerName;
// Logueamos el comando ejecutado
plugin.getLogger().info("Comando ejecutado: " + command);
plugin.getLogger().info("Salida: Comando enviado a " + targetPlayer + " con el mensaje: " + message);
}
}
}
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent event) {
String message = event.getMessage();
// Verificamos si el mensaje corresponde a un susurro
if (message.startsWith("§7[§8[.*§r")) {
String sender = event.getPlayer().getName();
// Solo registramos el mensaje de chat si es de un jugador que acaba de ejecutar un comando
if (sender.equals(currentCommandSender)) {
// Capturamos la salida exacta como aparece en el chat
lastCommandOutput = message;
// Logueamos la salida exacta del chat generada por el comando
plugin.getLogger().info("Salida: " + lastCommandOutput);
}
}
}
}````
您处理命令的方式不正确。要使用 spigot API 创建命令,您需要首先在
plugin.yml
中注册您的命令。将这些行添加到其中:
commands:
tpa:
完成此操作后,您需要为该命令创建一个类。这个类必须实现
CommandExecutor
(你可以在类名后写implements CommandExecutor
)。这个实现需要一个方法:
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
}
在此方法中,您必须放置玩家运行命令时要执行的代码。
CommandSender
可以通过执行 Player
来转换为 Player player = (Player) sender;
。
关于您关于控制台和玩家消息的问题,服务器自动打印“玩家发出命令/命令”。如果您想向运行该命令的玩家显示消息,您可以创建如前所示的
Player
,然后使用 player.sendMessage("message")
完成所有这些后,您需要在主插件类的 onEnable() 中注册命令。您可以通过在插件的主类(扩展
getCommand("tpa").setExecutor(new TpaCommand(), this);
的类)中编写 JavaPlugin
来完成此操作
.
希望这能回答您的问题。