# 制作您的第一个命令 在注册您的命令之前,您需要为其选择一个名称。在本示例中,我们将其定义为常量数组。使用数组可以方便地添加别名 ```rust const NAMES: [&str; 1] = ["test"]; // OR with aliases const NAMES: [&str; 2] = ["test", "testcommand"]; ``` 您还需要定义命令的描述,当玩家使用 /help 命令时,此描述将会显示出来 ```rust const DESCRIPTION: &str = "我的第一个命令!"; ``` Pumpkin 的 Command API 很大程度上受到了 Mojang 的 [Brigadier](https://github.com/Mojang/brigadier) 的启发。这套系统能够让你轻松地管理命令语法,并为玩家提供自动的 Tab 补全功能。 #### 实现命令树 ```rust use pumpkin::command::tree::CommandTree; pub fn init_command_tree() -> CommandTree { CommandTree::new(NAMES, DESCRIPTION) } ``` #### 注册与权限 要让命令可用,您必须在您的插件上下文中同时注册权限和命令本身。 首先,注册权限。在本示例中,我们将 `PermissionDefault::Allow` ,以便默认情况下所有玩家都能使用此命令。 ```diff #[plugin_method] async fn on_load(&mut self, context: Arc) -> Result<(), String> { context.init_log(); log::info!("你好, Pumpkin!"); + context + .register_permission(Permission::new( + "plugin_docs_plugin:test", + "重要:测试权限", + PermissionDefault::Allow, + )) + .await + .unwrap(); Ok(()) } ``` 接下来,使用上面创建的权限字符串来注册命令: ```diff #[plugin_method] async fn on_load(&mut self, context: Arc) -> Result<(), String> { context.init_log(); log::info!("你好, Pumpkin!"); context .register_permission(Permission::new( "plugin_docs_plugin:test", "重要:测试权限", PermissionDefault::Allow, )) .await .unwrap(); + context + .register_command(command::init_command_tree(), "plugin_docs_plugin:test") + .await; Ok(()) } ``` 重新构建您的插件,将生成的插件文件移动到服务器的 plugins 文件夹中,然后重启服务器。 **恭喜!** 命令现已注册成功,在游戏中及控制台里都应能正常使用并高亮显示。 drawing 目前执行命令很可能会抛出语法错误,因为尚未实现命令执行器(Command Executor),该命令现在没有任何实际功能。 ### 添加一个执行器 让我们创建一个超级简单的命令执行器,它不需要任何参数。 ```rust struct MyCommandExecutor; impl CommandExecutor for MyCommandExecutor { fn execute<'a>( &self, sender: &'a CommandSender, server: &'a Server, args: &ConsumedArgs<'a>, ) -> CommandResult<'a> { Box::pin(async { Ok((1)) }) } } ```