Skip to content

制作您的第一个命令

在注册您的命令之前,您需要为其选择一个名称。在本示例中,我们将其定义为常量数组。使用数组可以方便地添加别名

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 的启发。这套系统能够让你轻松地管理命令语法,并为玩家提供自动的 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<Context>) -> 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<Context>) -> 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))
        })
    }
}

基于 MIT 许可证发布。