跳转至

命令

abi.h 里的分节说明

核心槽位,从 ABI v1 起就有(the core slots, present since ABI v1)

§H 带参数的命令与枚举(§H parameterized commands & enums)

槽位

execute_command

C
bool (*execute_command)(PierStr cmd, void* ctx, PierCmdOutputSink sink);

以服务器控制台的身份(权限:Owner)执行一条命令,并收集它的输出。只能在服务器线程调用。世界还没就绪时返回 false。

  • 调用形式:api->execute_command(cmd, ctx, sink)
  • 参数:
    • cmd : PierStr
    • ctx : void*
    • sink : PierCmdOutputSink
  • 返回值类型:bool
  • 所在分节:核心槽位,从 ABI v1 起就有(the core slots, present since ABI v1)
  • 表内序号:第 7 个槽位(从 0 数起)
  • 各绑定里的调用方:

register_command

C
1
2
3
4
5
6
7
8
bool (*register_command)(
    PierModHandle mod,
    PierStr name,
    PierStr description,
    int32_t permission,
    PierCommandCb cb,
    void* user
);

注册一条自定义命令 /name [args: 原始文本]。

  • permission:0=Any,1=GameDirectors,2=Admin,3=Host,4=Owner(对应 CommandPermissionLevel)。

在 on_enable 里、在服务器线程上调用。命令在服务器整个运行期间都保持注册(基岩版不能注销命令);被禁用的模组,它的回调由加载器屏蔽。

  • 调用形式:api->register_command(mod, name, description, permission, cb, user)
  • 参数:
    • mod : PierModHandle
    • name : PierStr
    • description : PierStr
    • permission : int32_t
    • cb : PierCommandCb
    • user : void*
  • 返回值类型:bool
  • 所在分节:核心槽位,从 ABI v1 起就有(the core slots, present since ABI v1)
  • 表内序号:第 8 个槽位(从 0 数起)
  • 各绑定里的调用方:

register_command_ex

C
1
2
3
4
5
6
7
8
9
bool (*register_command_ex)(
    PierModHandle mod,
    PierStr name,
    PierStr description,
    int32_t permission,
    PierStr overloads_snbt,
    PierCommandCb cb,
    void* user
);

和 register_command 一样,但带有类型化的重载。overloads_snbt 的形状:

Text Only
{overloads:[[{name:"target",kind:"player",optional:0b},…],…]}

kind 可以是 int|bool|float|string|enum|soft_enum|actor|player|block_pos|vec3|raw_text|message|json|item|block_name|effect|actor_type|command|relative_float|file_path,其中 enum 和 soft_enum 还需要 "enum":"Name"。

回调的 args 收到 SNBT 形式的解析结果 {overload:N, args:{<name>:…}},origin_name 则变成来源的 SNBT {name,type,dim,x,y,z}。

  • 调用形式:api->register_command_ex(mod, name, description, permission, overloads_snbt, cb, user)
  • 参数:
    • mod : PierModHandle
    • name : PierStr
    • description : PierStr
    • permission : int32_t
    • overloads_snbt : PierStr
    • cb : PierCommandCb
    • user : void*
  • 返回值类型:bool
  • 所在分节:§H 带参数的命令与枚举(§H parameterized commands & enums)
  • 表内序号:第 54 个槽位(从 0 数起)
  • 各绑定里的调用方:

register_command_enum

C
bool (*register_command_enum)(PierStr name, PierStr values_snbt);

values_snbt 形如 {values:[["name",1L],…]},交给 tryRegisterRuntimeEnum。

  • 调用形式:api->register_command_enum(name, values_snbt)
  • 参数:
    • name : PierStr
    • values_snbt : PierStr
  • 返回值类型:bool
  • 所在分节:§H 带参数的命令与枚举(§H parameterized commands & enums)
  • 表内序号:第 55 个槽位(从 0 数起)
  • 各绑定里的调用方:

register_command_soft_enum

C
bool (*register_command_soft_enum)(PierStr name, PierStr values_snbt);

values_snbt 形如 {values:["a","b"]},交给 tryRegisterSoftEnum。

  • 调用形式:api->register_command_soft_enum(name, values_snbt)
  • 参数:
    • name : PierStr
    • values_snbt : PierStr
  • 返回值类型:bool
  • 所在分节:§H 带参数的命令与枚举(§H parameterized commands & enums)
  • 表内序号:第 56 个槽位(从 0 数起)
  • 各绑定里的调用方:

update_command_soft_enum

C
bool (*update_command_soft_enum)(PierStr name, int32_t op, PierStr values_snbt);

op:0=设置,1=添加,2=移除。

  • 调用形式:api->update_command_soft_enum(name, op, values_snbt)
  • 参数:
    • name : PierStr
    • op : int32_t
    • values_snbt : PierStr
  • 返回值类型:bool
  • 所在分节:§H 带参数的命令与枚举(§H parameterized commands & enums)
  • 表内序号:第 57 个槽位(从 0 数起)
  • 各绑定里的调用方:

类型

PierCommandCb

C
1
2
3
4
5
6
7
8
typedef void (*PierCommandCb)(
    void* user,
    PierStr args,
    PierStr origin_name,
    void* out_ctx,
    PierStrSink out_success,
    PierStrSink out_error
);

自定义命令的回调。

  • args:命令名后面的原始文本,可能为空。
  • origin_name:命令来源的显示名(玩家名或 "Server")。
  • out_success / out_error:每调用一次输出一行,次数不限。

PierCmdOutputSink

C
typedef void (*PierCmdOutputSink)(void* ctx, bool success, PierStr output);

execute_command 的输出回调:完整的命令输出,加上是否成功的标志。