上一期:#1.第一个插件 上期原文:https://www.lovelycatex.cn/cv316
上一期中, 简单的介绍了如何创建一个插件并打包导出运行, 本期将介绍Command(命令)的用法, 那我们直接开始吧~
这里我将会继续用上一期的工程文件做演示。
Step1.onCommand()
注意:创建命令前请先避免重复命令!
首先在主类里写 onCommand() 方法.
PS:如果你是IDEA,可以输入onCommand然后回车自动补齐。
- @Override
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
- return true;
- }
Step2.注册命令
打开 plugin.yml, 在下方添加:
- commands:
- cmd:
- description: 这是一个命令.
- usage: /<command></command>
- permission: myplugin.use
- permission-message: 你没有权限
这些有什么用呢?
在 commands 下的 *cmd* 可以修改成你想要的命令
description:当你输入/help获取帮助时, 你注册的这个命令已经这个描述就会显示出来.
usage:当你的 onCommand() 方法返回 false 时, 这条信息将会发送给玩家.
permission:权限名称 *详情请见第四期教程
permission-message:当玩家无权使用时, 将这条信息发送给玩家.
Step3.开始编写onCommand()
回到 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");
- }
Step4.测试!
如果代码无误将出现如下内容:
完整代码:
- @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;
- }
本期就这么结束了?不,还有两个小拓展。awa
现在你已经知道如何注册一个命令了。
也许你觉得把onCommand()写在主类不太好?
那么下列方法可能会帮到你。
首先创建一个类, 名字随便。
创建好了之后, 不要忘了给这个类implements CommandExecutor.
然后再将你的onCommand()方法复制进去即可。
最后需要在onEnable()内写, getPluginCommand("")的参数即为你在plugin.yml中注册的命令名称。
- Bukkit.getPluginCommand("cmd").setExecutor(new cmd());
这是全部代码:
- @Override
- public void onEnable() {
- getLogger().info("Activity");
- 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;
- }
- }
打包运行后会有同样的结果:
现在还有一个问题, 如果我只想让玩家执行命令而不是控制台呢?
你可以使用 instanceof 来检测sender是否是一个玩家.
例如这样:
- String cmd = null;
- cmd = command.getName();
- if (cmd.equalsIgnoreCase("cmd")) {
- if (sender instanceof Player) {
- sender.sendMessage("Hello World");
- }else {
- sender.sendMessage("你必须是一个玩家!!!");
- }
-
- }
本期教程就到此结束啦,若有讲的不对或不懂的地方,欢迎指出/提问,我会尽量解决每个人的问题,谢谢!
好简单的教程- -不过还是支持一下啦
M8_mve 发表于 2020-2-6 07:39
好简单的教程- -不过还是支持一下啦
以简洁为主啦,没那么详细
heruizhe 发表于 2020-2-24 09:47
成功了,感谢楼主分享
不客气啦,剩下的教程都在我博客里,以后有时间还会继续搬