Class AnnotatedCommandHandler
java.lang.Object
top.magstar.framework.commands.AnnotatedCommandHandler
基于注解的命令处理器抽象类。
该类提供了一个基于注解的命令注册和管理系统,允许开发者通过在方法上添加注解来定义 Bukkit 命令、子命令和 Tab 补全逻辑。它会自动扫描子类中的注解方法,构建命令树结构, 并将其注册到 Bukkit 命令系统中。
支持的注解
MagstarCommandRegister- 标记主命令方法MagstarSubCommand- 标记子命令方法MagstarTabCompleter- 标记 Tab 补全方法
使用示例
public class MyCommandHandler extends AnnotatedCommandHandler {
public MyCommandHandler(JavaPlugin plugin, MagstarPlugin magstarPlugin) {
super(plugin, magstarPlugin);
}
@MagstarCommandRegister(name = "test", permission = "test.use")
public void testCommand(CommandSender sender, String[] args) {
sender.sendMessage("主命令被执行");
}
@MagstarSubCommand(parent = "test", name = "sub1")
public void testSub1(CommandSender sender, String[] args) {
sender.sendMessage("子命令 sub1 被执行");
}
@MagstarSubCommand(parent = "test.sub1", name = "sub2")
public void testSub2(CommandSender sender, String[] args) {
sender.sendMessage("嵌套子命令 sub2 被执行");
}
@MagstarTabCompleter(command = "test")
public List<String> testTabComplete(CommandSender sender, String[] args) {
return Arrays.asList("sub1", "option1", "option2");
}
}
命令注册流程
- 扫描所有方法上的注解,收集主命令、子命令和 Tab 补全器
- 为每个主命令创建根命令节点 (
CommandNode) - 按层级构建子命令树,确保父命令先于子命令处理
- 将命令树注册到 Bukkit 命令系统
命令树结构
该类支持多层级的命令结构,例如:
/test (根命令) ├─ /test sub1 (一级子命令) │ └─ /test sub1 sub2 (二级子命令) └─ /test other (另一个一级子命令)
线程安全性
该类不是线程安全的。命令注册应该在插件启动阶段的主线程中完成。
- Since:
- 1.0.0
- Version:
- 1.0.0
- Author:
- Berry_so
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionAnnotatedCommandHandler(org.bukkit.plugin.java.JavaPlugin plugin, MagstarPlugin magstarPlugin) 构造一个新的命令处理器实例。 -
Method Summary
-
Constructor Details
-
AnnotatedCommandHandler
public AnnotatedCommandHandler(org.bukkit.plugin.java.JavaPlugin plugin, MagstarPlugin magstarPlugin) 构造一个新的命令处理器实例。- Parameters:
plugin- Bukkit 插件实例,不能为 nullmagstarPlugin- MagStar 插件实例,不能为 null- Throws:
NullPointerException- 如果任一参数为 null
-
-
Method Details
-
registerCommands
public void registerCommands()注册所有带注解的命令。该方法会执行以下操作:
- 扫描当前类中所有声明的方法
- 收集所有带有
MagstarCommandRegister、MagstarSubCommand和MagstarTabCompleter注解的方法 - 创建命令节点并构建命令树结构
- 将命令树注册到 Bukkit 命令系统
注意:该方法应该在插件启用时调用一次。重复调用可能导致命令重复注册。
命令处理优先级
子命令按照路径深度排序,确保父命令总是先于子命令被处理。这保证了 在添加子命令时,其父命令节点已经存在。
- See Also:
-