Skip to content

Check Node

Noogear edited this page Mar 9, 2026 · 3 revisions

条件判断 (check)

check 节点用于检查变量是否满足条件。条件成立时继续执行后续节点;不成立时执行 on_fail(如果有),然后终止脚本。

基本格式

- check: <variable>
  op: "<operator>"
  value: <value>
  on_fail:
    - # 条件不满足时执行的节点列表
字段 类型 必填 说明
check String 检查的变量名
op String 操作符(支持 ! 前缀取反)
value any 视操作符 比较目标值
on_fail List 条件不满足时执行的节点列表

value 字段支持的类型

# 数值
value: 100
value: 3.14

# 字符串
value: "sword"

# 布尔
value: true

# 列表(用于 in / between)
value: ["sword", "bow", "axe"]           # in:候选值列表
value: [10.0, 50.0]                       # between:[下界, 上界] 闭区间

# 变量引用
value: "{maxHp}"

# 数学表达式(数值操作符时自动解析)
value: "{maxHp} * 0.5"

# 类名(用于 instanceof)
value: "com.example.PlayerEntity"

instanceof 类型窄化

instanceof 检查成功后,变量类型自动窄化为目标类,后续节点可直接访问子类属性:

variables:
  entity: "entity"

flow:
  - check: entity
    op: "instanceof"
    value: "org.bukkit.entity.Player"

  # 窄化后可直接访问 Player 独有属性
  - action: "log"
    args: ["玩家名: {entity.playerName}"]

示例

空值检查

- check: target
  op: "!null"
  on_fail:
    - return

数值范围

- check: damage
  op: "between"
  value: [10, 100]

变量引用作为比较值

- check: hp
  op: "<="
  value: "{maxHp} * 0.3"

成员检查

- check: weaponType
  op: "in"
  value: ["DIAMOND_SWORD", "IRON_SWORD", "NETHERITE_SWORD"]

带失败回退的完整条件

- check: damage
  op: ">"
  value: 100
  on_fail:
    - action: "sendMessage"
      args: ["伤害不足"]
    - return

操作符完整列表 → 操作符参考

Clone this wiki locally