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

问题描述 投票:0回答:2

我正在为Minecraft创建一个简单的插件,它在其中切换命令并使目标玩家获得唯一的UUID。然而,public boolean onCommand方法声明它从未使用过。

mainclass(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无法正常工作,因为“方法不会覆盖超类的方法”。

java override toggle minecraft bukkit
2个回答
2
投票

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

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

2
投票

你的IDE告诉你你的方法从未使用过,因为它没有覆盖onCommand中的JavaPlugin方法(这就是你得到错误“方法不会覆盖其超类方法”的原因)。

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

  • 你的主要课程是在JavaPlugin扩展org.bukkit.plugin.java课程
  • 您导入了正确的Command类。你需要导入org.bukkit.command.Command而不是org.bukkit.material.Command
© www.soinside.com 2019 - 2024. All rights reserved.