[Spigot插件开发]创建命令

在插件中创建一个指令主要分为三个步骤:

设计命令注册命令添加进plugin.yml

首先,参考《Spigot插件开发环境搭建及空白插件的创建》来创建一个新的插件,在此基础上本篇内容将介绍如何在自己的插件中使用指令。

设计命令

首先,先要构思一个指令名,在本篇教程中,使用/cjcmd 来作为演示,只要不和其他插件冲突,任意字符串的组合都可以用作命令。建议有条理地为每个命令创建一个新类。 您的类必须实现接口CommandExecutor。 类文件内容类似于:

package com.xuchaoji.spigot;import org.bukkit.command.Command;import org.bukkit.command.CommandExecutor;import org.bukkit.command.CommandSender;public class CjCmd implements CommandExecutor{ // This method is called, when somebody uses our command @Override public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { // TODO Auto-generated method stub return false; } }

下面解释一下onCommand方法的参数:

CommandSender表示发送命令的实体。 可以是Player(玩家),ConsoleCommandSender(控制台)或BlockCommandSender(命令方块)Command表示被调用的命令是什么。Label表示发件人输入的命令的第一个字(不包括参数)Args是命令语句的其余部分(不包括标签),由空格分隔并放入数组中。

这里以res圈地插件的命令来具体展示各个参数,如创建领地的指令

/res create newRes

这个指令由玩家发出,所以CommandSender就是Player, 其中res对应Command,create 和 newRes 为其他参数保存在String[]数组中,String[0]为create,String[1]为newRes。

当玩家发送/cjcmd时,可以获得10块面包和2颗钻石。首先,要发放物品的话,命令的使用者必须是玩家(控制台和命令方块没有背包可以存放物品),因此需要先判断一下sender是否为Player。然后需要创建ItemStack来存放物品,ItemStack需要两个参数,材料名称和数量。关于Spigot的相关API介绍可以查阅:Spigot-API官方文档,本教程不会挨个介绍Spigot的每一个API,需要你自行查阅文档。玩家背包、玩家名称、玩家所在的世界及坐标、玩家手中物品及身上装备、当前世界天气及时间等等,游戏中所有你能看到听到的,基本都有其对应的API,如果你想实现某个功能,请在官方文档中搜索对应的关键词(英文)。下面我写的CjCmdl类的代码,你也可以根据自己的脑洞自行添加其他内容:

package com.xuchaoji.spigot;import org.bukkit.Material;import org.bukkit.command.Command;import org.bukkit.command.CommandExecutor;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.inventory.ItemStack;import net.md_5.bungee.api.ChatColor;public class CjCmd implements CommandExecutor{ // This method is called, when somebody uses our command @Override public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { //判断sender是否为玩家,非玩家没有背包,无法给物品 if (sender instanceof Player){ Player player = (Player)sender; player.sendMessage(ChatColor.AQUA+”[CmdDemo]”+ChatColor.AQUA+sender.getName()+ChatColor.AQUA+”执行了cjcmd指令,下面发放物品。”); //创建ItemStack,bread和diamond,ItemStack需要两个参数,第一个是材料名称,第二个是数量。 ItemStack bread = new ItemStack(Material.BREAD,10); ItemStack diamond = new ItemStack(Material.DIAMOND,2); player.getInventory().addItem(bread, diamond); }else { //当非玩家执行命令时,给个错误提示。 sender.sendMessage(ChatColor.DARK_RED+”[CmdDemo]只有玩家才能执行此命令!”); } //当指令执行顺利时,返回true,否则玩家每次输入指令都会在客户端看到自己发送的指令。 return true; } }注册命令

命令的executor已经写好,现在需要将命令在插件启用时候进行注册,设置命令对应的executor,在main class 的onEnable()方法中添加如下代码来注册指令(注意根据自己的类名来修改代码):

this.getCommand(“cjcmd”).setExecutor(new CjCmd());

以下是完整的main class:

package com.xuchaoji.spigot.commanddemo;import org.bukkit.plugin.java.JavaPlugin;import net.md_5.bungee.api.ChatColor;public class CmdDemo extends JavaPlugin { //加载插件执行 @Override public void onEnable() { getServer().getConsoleSender().sendMessage(ChatColor.AQUA+”[CmdDemo]已加载”); this.getCommand(“cjcmd”).setExecutor(new CjCmd()); getServer().getConsoleSender().sendMessage(ChatColor.AQUA+”[CmdDemo]cjcmd命令注册成功!”); } //停用插件执行 @Override public void onDisable() { getServer().getConsoleSender().sendMessage(ChatColor.RED+”[CmdDemo]已停用”); }}添加命令进plugin.yml

已经完成了设计命令和注册命令,现在需要在plugin.yml中将插件和用法添加进去,这样在服务器中使用/help命令才能查看到你插件的指令。

name: CmdDemomain: com.xuchaoji.spigot.commanddemo.CmdDemoversion: 1.0api-version: 1.13commands: cjcmd: description: CmdDemo command, give player 10bread and 2diamond usage: /cjcmd

编辑plugin.yml的时候不要用tab来代替空格,冒号后面记得加空格,否则插件加载会出错

运行结果:

游戏内使用效果:

代码见github:CmdDemo


比丘资源网 » [Spigot插件开发]创建命令

发表回复

提供最优质的资源集合

立即查看 了解详情