1252251361
本期原文:http://www.lovelycatex.cn/cv239
上一期:#1.第一个插件 上期原文:https://www.lovelycatex.cn/cv316

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

这里我将会继续用上一期的工程文件做演示。


Step1.onCommand()

注意:创建命令前请先避免重复命令!

首先在主类里写 onCommand() 方法.

PS:如果你是IDEA,可以输入onCommand然后回车自动补齐。

  1. @Override
  2.     public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  3.         return true;
  4.     }
复制代码

Step2.注册命令
打开 plugin.yml, 在下方添加:
  1. commands:
  2.    cmd:
  3.       description: 这是一个命令.
  4.       usage: /<command></command>
  5.       permission: myplugin.use
  6.       permission-message: 你没有权限
复制代码



这些有什么用呢?

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

description:当你输入/help获取帮助时, 你注册的这个命令已经这个描述就会显示出来.

usage:当你的 onCommand() 方法返回 false 时, 这条信息将会发送给玩家.

permission:权限名称 *详情请见第四期教程

permission-message:当玩家无权使用时, 将这条信息发送给玩家.


Step3.开始编写onCommand()

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

  1. @Override
  2.     public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  3.         String cmd = null;
  4.         cmd = command.getName();
  5.         return true;
  6.     }
复制代码

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

  1. String cmd = null;
  2.         cmd = command.getName();
  3.         if (cmd.equalsIgnoreCase("cmd")) {
  4.             sender.sendMessage("Hello World");
  5.         }
复制代码

Step4.测试!

如果代码无误将出现如下内容:


完整代码:

  1. @Override
  2.     public void onEnable() {
  3.         getLogger().info("Activity");
  4.     }
  5.     @Override
  6.     public void onDisable() {
  7.         getLogger().info("Disable");
  8.     }
  9.     @Override
  10.     public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  11.         String cmd = null;
  12.         cmd = command.getName();
  13.         if (cmd.equalsIgnoreCase("cmd")) {
  14.             sender.sendMessage("Hello World");
  15.         }
  16.         return true;
  17.     }
复制代码

本期就这么结束了?不,还有两个小拓展。awa

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


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

  1. Bukkit.getPluginCommand("cmd").setExecutor(new cmd());
复制代码

这是全部代码:

  1. @Override
  2.     public void onEnable() {
  3.         getLogger().info("Activity");
  4.         Bukkit.getPluginCommand("cmd").setExecutor(new cmd());
  5.     }
复制代码
  1. public class cmd implements CommandExecutor {
  2.     public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  3.         String cmd = null;
  4.         cmd = command.getName();
  5.         if (cmd.equalsIgnoreCase("cmd")) {
  6.             sender.sendMessage("Hello World");
  7.         }
  8.         return true;
  9.     }
  10. }
复制代码

打包运行后会有同样的结果:


现在还有一个问题, 如果我只想让玩家执行命令而不是控制台呢?
你可以使用 instanceof 来检测sender是否是一个玩家.
例如这样:

  1. String cmd = null;
  2.         cmd = command.getName();
  3.         if (cmd.equalsIgnoreCase("cmd")) {
  4.             if (sender instanceof Player) {
  5.                 sender.sendMessage("Hello World");
  6.             }else {
  7.                 sender.sendMessage("你必须是一个玩家!!!");
  8.             }
  9.             
  10.         }
复制代码



本期教程就到此结束啦,若有讲的不对或不懂的地方,欢迎指出/提问,我会尽量解决每个人的问题,谢谢!




夏雨吖
本帖最后由 M8_mve 于 2020-2-6 07:41 编辑

好简单的教程- -不过还是支持一下啦

天瑞2333
nbnbnbnbnbnbnbnbnbn

1252251361
M8_mve 发表于 2020-2-6 07:39
好简单的教程- -不过还是支持一下啦

以简洁为主啦,没那么详细

jrx233
成功了,感谢楼主分享

1252251361
heruizhe 发表于 2020-2-24 09:47
成功了,感谢楼主分享

不客气啦,剩下的教程都在我博客里,以后有时间还会继续搬

第一页 上一页 下一页 最后一页