跳转到内容

命令的注册

在资源包的根目录中,有一个command的文件夹用于存储命令,里面的每个 json 文件对应一个命令。

json
{
  "name": ["alwaysday", "daylock"],
  "description": "锁定或解锁日夜循环",
  "syntax": ["/alwaysday [lock: Boolean]"],
  "node": {
    "[lock: Boolean]": {
      "type": "BOOLEAN",
      "brief": "是否锁定日夜更替",
      "description": "是否锁定日夜更替",
      "descriptionTrue": "锁定昼夜更替",
      "descriptionFalse": "不锁定昼夜更替"
    }
  }
}
名字类型含义备注必需
name字符串列表命令的名字可以填写多个命令名
description字符串命令的介绍-
syntax字符串列表语法字符串每个字符串表示一种语法,以/开头
node节点对象节点定义键为语法片段,值为节点定义,将所有节点定义写在这里

syntax 语法字符串

syntax 数组中,每个字符串表示命令的一种语法。语法字符串以 / 开头,后面跟着参数占位符:

  • <参数名: 参数类型> — 必选参数,用尖括号包裹
  • [参数名: 参数类型] — 可选参数,用方括号包裹

多个语法字符串可以提供不同的语法变体。例如 gamemode 命令:

json
"syntax": [
  "/gamemode <gameMode: GameMode> [player: target]",
  "/gamemode <gameMode: int> [player: target]"
]

node 节点对象

node 对象中的键就是语法字符串中的参数占位符(包括括号),值就是该节点的定义。

当同一个参数位置有多种类型可供选择时,可以用 | 分隔:

json
"<gameMode: GameMode>|<gameMode: int>": {
  "type": "NORMAL_ID",
  "description": "玩家的新游戏模式",
  "ignoreError": true,
  "key": "gameMode"
}

这意味着 <gameMode: GameMode><gameMode: int> 共享同一个节点定义。

当同一语法位置可选的类型较复杂时,可以将多种选择组合成一个节点 ID:

"<tileName: Block>|<tileName: Block> <blockStates: block states>": { ... }