上一期中, 简单的介绍了如何创建一个插件并打包导出运行, 本期将介绍Command(命令)的用法, 那我们直接开始吧~

上一期传送门:#1 Bukkit插件开发 – 第一个插件 – LovelyCat的小站 (lovelycatv.cn)

下面正式开始:

1.创建Command

首先在主类里写 onCommand() 方法。如下:

@Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        return true;
    }

2.注册命令

打开 plugin.yml, 在下方添加:

commands:
   cmd:
      description: 这是一个命令.
      usage: /
      permission: myplugin.use
      permission-message: 你没有权限

这些有什么用呢?

在 commands 下的 *cmd* 可以修改成你想要的命令

  • description:当你输入/help获取帮助时, 你注册的这个命令已经这个描述就会显示出来.
  • usage:当你的 onCommand() 方法返回 false 时, 这条信息将会发送给玩家.
  • permission:权限名称 *详情请见第四期教程
  • permission-message:当玩家无权使用时, 将这条信息发送给玩家.

3.编写命令

回到 onCommand()。
首先我们要从sender这获取到他使用的是什么命令。
Command类下的getName()可以直接获取到这条命令的名称。

@Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        String cmd = null;
        cmd = command.getName();
        return true;
    }

刚才我在plugin.yml中设置的命令名是cmd 所以getName()的判断应该是”cmd”。

        String cmd = null;
        cmd = command.getName();
        if (cmd.equalsIgnoreCase("cmd")) {
            sender.sendMessage("Hello World");
        }

现在你的代码看起来像是这样:

@Override
    public void onEnable() {
        getLogger().info("Activity");
    }

    @Override
    public void onDisable() {
        getLogger().info("Disable");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        String cmd = null;
        cmd = command.getName();
        if (cmd.equalsIgnoreCase("cmd")) {
            sender.sendMessage("Hello World");
        }
        return true;
    }

4.运行插件

在控制台输入cmd(或你自己定义的命令)即可查看结果

null

5.拓展内容

现在你已经知道如何注册一个命令了.
也许你觉得把onCommand()写在主类不太好.
那么下列方法可能会帮到你.

首先创建一个类, 名字随便.
创建好了之后, 不要忘了给这个类implements CommandExecutor.
然后再将你的onCommand()方法复制进去即可.
最后需要在onEnable()内写, getPluginCommand(“”)的参数即为你在plugin.yml中注册的命令名称.

使用 Bukkit.getPluginCommand(“cmd”).setExecutor(new cmd()); 来注册你的命令

public class cmd implements CommandExecutor {
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        String cmd = null;
        cmd = command.getName();
        if (cmd.equalsIgnoreCase("cmd")) {
            sender.sendMessage("Hello World");
        }
        return true;
    }
}
@Override
    public void onEnable() {
        getLogger().info("Activity");
        Bukkit.getPluginCommand("cmd").setExecutor(new cmd());
    }

OK,现在已经将命令部分整合到另一个类文件中了。最后再来说说怎么判断命令发送者到底是玩家还是控制台。

你可以使用 instanceof 来检测sender是否是一个玩家,像这样:

        String cmd = null;
        cmd = command.getName();
        if (cmd.equalsIgnoreCase("cmd")) {
            if (sender instanceof Player) {
                sender.sendMessage("Hello World");
            }else {
                sender.sendMessage("你必须是一个玩家!!!");
            }
            
        }

让我们试试吧.

null
null

那么本期教程到此结束,下一期介绍监听器的使用,感谢观看!


0 条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注