命令 API
命令 API 允许您为 BlocklyAllay 脚本注册和管理自定义命令。
开始使用
要使用命令 API,您首先需要获取命令 API 管理器:
const commandAPI = allay.getCommandAPI();
命令注册
注册简单命令
commandAPI.registerCommand(name, description, handler)
参数:
- name (string): 命令名称(不带斜杠)
- description (string): 命令描述
- handler (function): 命令执行时调用的处理函数
示例:
allay.getCommandAPI().registerCommand(
"hello",
"向玩家问好",
(context) => {
const sender = context.getSender();
sender.sendMessage("你好!欢迎使用 BlocklyAllay!");
}
);
注册带别名的命令
commandAPI.registerCommand(name, description, aliases, handler)
参数:
- name (string): 命令主名称
- description (string): 命令描述
- aliases (array): 命令别名数组
- handler (function): 命令执行时调用的处理函数
示例:
allay.getCommandAPI().registerCommand(
"info",
"显示服务器信息",
["serverinfo", "about"],
(context) => {
const sender = context.getSender();
sender.sendMessage("BlocklyAllay 服务器 v1.0");
}
);
注销命令
commandAPI.unregisterAll()
描述: - 注销所有由命令 API 注册的命令
示例:
allay.getCommandAPI().unregisterAll();
命令上下文
当命令执行时,处理函数会接收一个 context 对象,该对象具有以下方法:
获取命令发送者
context.getSender()
返回值: - 一个 CommandSender 对象,表示执行命令的实体
获取命令名称
context.getCommandName()
返回值: - (string): 执行的命令名称
获取命令参数
// 获取所有参数
context.getArgs()
// 获取指定索引的参数
context.getArg(index)
参数:
- index (number): 要获取的参数索引(从 0 开始)
返回值: - (array): 使用 getArgs() 时返回所有参数的字符串数组 - (string): 使用 getArg() 时返回指定索引的参数
CommandSender 方法
发送消息
commandSender.sendMessage(message)
参数:
- message (string): 要发送给命令发送者的消息
检查权限
commandSender.hasPermission(permission)
参数:
- permission (string): 要检查的权限
返回值: - (boolean): 发送者是否具有指定权限
检查发送者类型
// 检查发送者是否为玩家
commandSender.isPlayer()
// 检查发送者是否为控制台
commandSender.isConsole()
返回值: - (boolean): 如果发送者匹配类型则为 true,否则为 false
转换为玩家
commandSender.asPlayer()
返回值: - 如果发送者是玩家,则返回 Player 对象;否则返回 null
示例用法
// 注册带参数的命令
allay.getCommandAPI().registerCommand(
"giveitem",
"给玩家物品",
(context) => {
const sender = context.getSender();
const args = context.getArgs();
if (args.length < 2) {
sender.sendMessage("用法: /giveitem <玩家名> <物品类型>");
return;
}
const playerName = args[0];
const itemType = args[1];
const player = allay.getPlayer(playerName);
if (player) {
// 给物品逻辑在这里实现
player.sendMessage(`你收到了 ${itemType}!`);
sender.sendMessage(`已给 ${playerName} 物品 ${itemType}`);
} else {
sender.sendMessage(`玩家 ${playerName} 未找到`);
}
}
);