Java Bukkit命令会重复吗?

Java Bukkit命令会重复吗?,java,minecraft,bukkit,Java,Minecraft,Bukkit,我已经编写了一个Bukkit插件,没有错误,但在游戏中它有一个问题 无论何时使用该命令,它都不会执行它应该执行的操作。相反,它会向我发送一条粗体消息,告诉我键入的内容,/离开 这是我的密码: public class SeeYouSoon extends JavaPlugin{ // Start @Override public void onEnable(){ } @Override public void onDisable() { } //Commands public bo

我已经编写了一个Bukkit插件,没有错误,但在游戏中它有一个问题

无论何时使用该命令,它都不会执行它应该执行的操作。相反,它会向我发送一条粗体消息,告诉我键入的内容,
/离开

这是我的密码:

public class SeeYouSoon extends JavaPlugin{

// Start
@Override
public void onEnable(){
}

@Override 
public void onDisable() {
}

//Commands



public boolean onCommand(CommandSender sender, Command cmd, String[] args){
    if(cmd.getName().equalsIgnoreCase("leaving")){
        Player player = (Player) sender;
        Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
        Bukkit.getScheduler().runTaskLater(this, new Runnable() {
            public void run() {
                //Run your function or change stuff here.
               player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave.");
            }
        }, 20 * 30);// There are 20 ticks in one second so we can just multiply seconds by 20.
    }
    return false;

}
}
这个plugin.yml就是我所期望的问题所在。以下是plugin.yml:

name: SeeYouSoon
main: me.mark.SeeYouSoon
version: 1.0
commands:
   leaving:
      description: Announce your leave

首先,
JavaPlugin
中的
onCommand()
方法格式是:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
关于为什么会发生这种情况,你的下一个原因是,在你按照命令行事之后,你没有这样做。例如,您应该使用:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    if(cmd.getName().equalsIgnoreCase("leaving")){
        //your code
        return true;
    }
}
因此,您的最终代码应该如下所示:

public boolean onCommand(CommandSender sender, Command cmd, String[] args){
    if(cmd.getName().equalsIgnoreCase("leaving")){
        Player player = (Player) sender;
        Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
        Bukkit.getScheduler().runTaskLater(this, new Runnable() {
            public void run() {
               player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave.");
            }
        }, 20 * 30);
        return true;
    }
    return false;   
}

首先,
JavaPlugin
中的
onCommand()
方法格式是:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
关于为什么会发生这种情况,你的下一个原因是,在你按照命令行事之后,你没有这样做。例如,您应该使用:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    if(cmd.getName().equalsIgnoreCase("leaving")){
        //your code
        return true;
    }
}
因此,您的最终代码应该如下所示:

public boolean onCommand(CommandSender sender, Command cmd, String[] args){
    if(cmd.getName().equalsIgnoreCase("leaving")){
        Player player = (Player) sender;
        Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
        Bukkit.getScheduler().runTaskLater(this, new Runnable() {
            public void run() {
               player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave.");
            }
        }, 20 * 30);
        return true;
    }
    return false;   
}

您不能安全地向玩家施放:

Player player = (Player)sender;
虽然这是正确的java,但这可能会导致错误。在施法之前,确保发送者实际上是玩家

if (!sender instanceof Player)
{
    sender.sendMessage("Some error message");
    return true;
}
// Now you can cast to a player and continue with your code.

您不能安全地向玩家施放:

Player player = (Player)sender;
虽然这是正确的java,但这可能会导致错误。在施法之前,确保发送者实际上是玩家

if (!sender instanceof Player)
{
    sender.sendMessage("Some error message");
    return true;
}
// Now you can cast to a player and continue with your code.

请提供更好的问题描述和实际负责人code@jojodmo现在,该命令没有做任何事情请包括更好的问题描述和实际负责人code@jojodmo现在这个命令什么都不做