为什么onCommand从未在插件中使用

时间:2019-02-15 07:57:31

标签: java override toggle minecraft bukkit

我正在为Minecraft创建一个简单的插件,在该插件中切换命令并为目标播放器提供唯一的UUID。但是public boolean onCommand方法指出它从未使用过。

主类(Freeze.java)

 @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){

    Player player = (Player) sender;
        if(!Freeze.toggleList.contains(player.getUniqueId())){
            player.sendMessage(ChatColor.GREEN + "sinut on jäädytetty tutkinnan ajaksi");
            Freeze.toggleList.add(player.getUniqueId());
        return true;
        } else if (Freeze.toggleList.contains(player.getUniqueId())){
            player.sendMessage(ChatColor.RED +"Et ole enään jäädytetty");
            Freeze.toggleList.remove(player.getUniqueId());
        return true;
        }
        return true;
    }
}

我对命令的作用有一个特定的类

(Toggle.java)

public class Toggle implements Listener {
@EventHandler
public void onPlayerMove(PlayerMoveEvent evt) {
    Player player = evt.getPlayer();
    if (Freeze.toggleList.contains(player.getUniqueId())){
        Location back = new Location(evt.getFrom().getWorld(), evt.getFrom().getX(), evt.getFrom().getY(), evt.getFrom().getZ());
        evt.getPlayer().teleport(back);
    }
}

}

在我的plugin.yml中,我也有相应的命令:

    commands:
  freeze:
    usage: /<command>
    description: Freezez player.

@Override也不起作用,因为“方法不会覆盖超类的方法”。

2 个答案:

答案 0 :(得分:2)

您忘记注册命令了。必须这样做,以便bukkit在执行命令时知道要调用哪个对象的onCommand方法。为此,请使用command.setExecutor(CommandExecutor)

javaplugin.getCommand("freeze").setExecutor(yourCommandExecutor);

答案 1 :(得分:2)

您的IDE告诉您从未使用过您的方法,因为它不会覆盖semver spec中的onCommand方法(这就是为什么您会收到错误消息:“方法未从其超类覆盖方法” )。

这可能有几个原因。请检查

  • 您的主类正在扩展JavaPlugin中的JavaPlugin
  • 您导入了正确的org.bukkit.plugin.java类。您需要导入Command而不是org.bukkit.command.Command