@Command 注解
注解式命令系统,支持主子命令结构和别名。
@Command
java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Command {
String name(); // 主命令名
String[] aliases() default {}; // 别名
String description() default "";
String usage() default "";
}@CommandBody
java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CommandBody {
String name() default ""; // 子命令名(空 = 主命令本身)
String desc() default "";
}方法签名固定为:void execute(CommandSender sender, String[] args)
命令格式
<主命令> [子命令] [参数...]name = ""→ 输入主命令时触发name = "xxx"→ 输入主命令 xxx时触发
完整示例
java
import cn.org.bukkit.bngeuit.command.Command;
import cn.org.bukkit.bngeuit.command.CommandBody;
import cn.org.bukkit.bngeuit.command.CommandSender;
import cn.org.bukkit.bngeuit.command.GroupCommandSender;
@Command(name = "test", aliases = {"t"}, description = "测试命令")
public class TestCommand {
@CommandBody // 主命令:test
public void execute(CommandSender sender, String[] args) {
sender.sendMessage("参数: " + String.join(" ", args));
}
@CommandBody(name = "info", desc = "查看信息") // 子命令:test info
public void info(CommandSender sender, String[] args) {
sender.sendMessage("TestPlugin v1.0");
}
}使用效果:
test → execute(),无子命令
test hello world → execute(),args = ["hello", "world"]
test info → info()
t info → 别名 "t" = "test"CommandSender
| 实现 | 场景 | 特有方法 |
|---|---|---|
GroupCommandSender | 群聊 | getGroupOpenid() |
ConsoleSender | 控制台 | — |
java
@CommandBody
public void execute(CommandSender sender, String[] args) {
if (sender instanceof GroupCommandSender gcs) {
String groupId = gcs.getGroupOpenid();
}
sender.sendMessage("回复");
}自动注册
插件 JAR 中的 @Command 类会被自动扫描并注册,无需手动操作。
