Class AnnotatedCommandHandler

java.lang.Object
top.magstar.framework.commands.AnnotatedCommandHandler

public abstract class AnnotatedCommandHandler extends Object
基于注解的命令处理器抽象类。

该类提供了一个基于注解的命令注册和管理系统,允许开发者通过在方法上添加注解来定义 Bukkit 命令、子命令和 Tab 补全逻辑。它会自动扫描子类中的注解方法,构建命令树结构, 并将其注册到 Bukkit 命令系统中。

支持的注解

使用示例


 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");
     }
 }
 

命令注册流程

  1. 扫描所有方法上的注解,收集主命令、子命令和 Tab 补全器
  2. 为每个主命令创建根命令节点 (CommandNode)
  3. 按层级构建子命令树,确保父命令先于子命令处理
  4. 将命令树注册到 Bukkit 命令系统

命令树结构

该类支持多层级的命令结构,例如:

 /test                    (根命令)
   ├─ /test sub1          (一级子命令)
   │   └─ /test sub1 sub2 (二级子命令)
   └─ /test other         (另一个一级子命令)
 

线程安全性

该类不是线程安全的。命令注册应该在插件启动阶段的主线程中完成。

Since:
1.0.0
Version:
1.0.0
Author:
Berry_so
See Also:
  • Constructor Details

    • AnnotatedCommandHandler

      public AnnotatedCommandHandler(org.bukkit.plugin.java.JavaPlugin plugin, MagstarPlugin magstarPlugin)
      构造一个新的命令处理器实例。
      Parameters:
      plugin - Bukkit 插件实例,不能为 null
      magstarPlugin - MagStar 插件实例,不能为 null
      Throws:
      NullPointerException - 如果任一参数为 null
  • Method Details

    • registerCommands

      public void registerCommands()
      注册所有带注解的命令。

      该方法会执行以下操作:

      1. 扫描当前类中所有声明的方法
      2. 收集所有带有 MagstarCommandRegisterMagstarSubCommandMagstarTabCompleter 注解的方法
      3. 创建命令节点并构建命令树结构
      4. 将命令树注册到 Bukkit 命令系统

      注意:该方法应该在插件启用时调用一次。重复调用可能导致命令重复注册。

      命令处理优先级

      子命令按照路径深度排序,确保父命令总是先于子命令被处理。这保证了 在添加子命令时,其父命令节点已经存在。

      See Also:
      • buildSubCommandTree(Map)
      • registerBukkitCommand(CommandNode, Map)