跳到主要内容

自定义指令

注册指令的几个步骤:

  1. plugin.yml中声明
  2. 在插件类使用getCommand获取
  3. commandExecutor节课的实现类
  4. 将得到的Command对象与Executor实现类绑定

指令的描述可以在源码:PluginDescriptionFile中进行查看

定义指令:

commands:
suicide:
description: 自杀
# /<command> 会被自动替换为 /suicide
usage: /<command>
aliases: [s1,s2,s3]
permission: yunfei.suicide
# 权限不足时候的提示信息
permission-message: 哦,你好像没有使用该指令的权限~
god:
description: 上帝模式
usage: /<command> <on/off>
aliases: [g1,g2,g3]
permission: yunfei.god
permission-message: 哦,你好像还不能成为上帝~

permissions:
yunfei.suicide:
description: 自杀权限
# true:全部玩家都可以使用 false:op使用
default: true
yunfei.god:
description: 成为上帝
default: op

实现自杀功能:

/**
* @author houyunfei
*/
public class SuicideCommand implements CommandExecutor {


@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if ("suicide".equalsIgnoreCase(label)) {
if (sender instanceof Player) {
Player player = (Player) sender;
// 向全体玩家广播消息
player.getServer().broadcastMessage(ChatColor.YELLOW + "再见了,世界!" + "\n" + ChatColor.BLUE + player.getDisplayName() + ChatColor.YELLOW + "去世了!");
player.setHealth(0);
// return true 是为了防止服务器 给sender返回指令的usage信息
return true;
} else {
sender.sendMessage(ChatColor.YELLOW + "只有玩家才能使用这个指令!");
return true;
}
}
//返回false,调用plugin.yml设置的commands.suicide.usage 给发送者
return false;
}
}

实现上帝无敌功能:

public class GodCommand implements CommandExecutor {

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

if ("god".equalsIgnoreCase(label)) {
if (sender instanceof Player) {
Player player = (Player) sender;
// 如果玩家已经是无敌状态,则取消无敌状态 ,否则设置为无敌状态
player.setInvulnerable(!player.isInvulnerable());
String temp = player.isInvulnerable() ? ChatColor.GREEN + "是" : ChatColor.RED + "不是";
player.sendMessage(ChatColor.WHITE + "现在你就" + temp + ChatColor.WHITE + "上帝模式了");
} else {
sender.sendMessage(ChatColor.YELLOW + "只有玩家才能使用这个命令");
return true;
}
}
return false;
}
}

主类注册指令:

@Override
public void onEnable() {
// Plugin startup logic
// this.getServer().getPluginManager().registerEvents(new MyEventHandler(), this);
Bukkit.getPluginManager().registerEvents(new MyEventHandler(), this);

// 注册指令
this.getCommand("suicide").setExecutor(new SuicideCommand());
this.getCommand("god").setExecutor(new GodCommand());
}

测试:

image-20240909191159060

上帝模式:

image-20240909191254229