-
Notifications
You must be signed in to change notification settings - Fork 0
Script Engine
Noogear edited this page Mar 11, 2026
·
5 revisions
WarriorView 使用 GloomLib Script 作为脚本引擎,YAML 配置文件可直接驱动事件处理逻辑。
节点语法、操作符、模板字符串、属性链解析的完整文档 → GloomLib Wiki
id: "my-script" # 脚本标识符(可选,默认 AnonymousScript)
event: "com.example.MyEvent" # 必填,事件/载荷类的全限定名
priority: 0 # 可选,事件优先级(整数,默认 0)
ignore-cancelled: false # 可选,指定 true 时已取消事件不触发(默认 true)
variables:
# ...
flow:
# ...| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
id |
String | 否 | AnonymousScript |
脚本唯一标识,用于日志和错误追踪 |
event |
String | 是 | — | 载荷类全限定名 |
priority |
Integer | 否 | 0 |
事件监听优先级 |
ignore-cancelled |
boolean | 否 | true |
true 时已被其他插件取消的事件不会触发脚本 |
variables |
Map | 否 | {} |
变量声明映射 |
flow |
List | 否 | [] |
流程节点列表 |
将载荷类的属性映射为脚本内的变量名。
variables:
# 简单属性:映射 event.getDamage()
damage: "damage"
# 链式属性:映射 event.getEntity().getName()
entityName: "entity.name"
# 集合索引:映射 event.getPlayer().getInventory().get(0)
firstItem: "player.inventory[0]"
# Map 索引:映射 event.getMetadata().get("key")
metaValue: "metadata[key]"
quotedKey: "metadata['damage_all']"
# payload 别名:直接引用事件对象本身
event: "$self"| 语法 | 示例 | 解析方式 |
|---|---|---|
| 简单属性 | damage |
调用 getDamage() 或 damage()
|
| 链式属性 | entity.name |
依次调用 getEntity() → getName()
|
| List 索引 | inventory[0] |
调用 getInventory() → List.get(0)
|
| Map 索引 | metadata[key] |
调用 getMetadata() → Map.get("key")
|
| payload 别名 | $self |
直接复用事件对象 |
-
getXxx()— 标准 Java Bean getter -
isXxx()— boolean getter -
xxx()— Record 风格 accessor
flow 是一个有序列表,引擎按顺序执行每个节点。共支持 7 种节点类型:
| 类型 | YAML 触发键 | 说明 | 详细参考 |
|---|---|---|---|
| CHECK | check |
条件判断 | → GloomLib |
| ACTION |
action 或动态推断 |
调用已注册动作 | → GloomLib |
| RETURN | return |
返回值并终止 | → GloomLib |
| SWITCH | switch |
多分支选择 | → GloomLib |
| MATH | math |
数学表达式求值 | → GloomLib |
| ANY | any |
OR 复合条件 | → GloomLib |
| ALL | all |
AND 复合条件 | → GloomLib |
节点类型通过触发键自动推断,无需显式声明 type 字段。各节点的字段说明、value 类型、操作符请查阅上方链接。
- check: damage
op: ">"
value: 100
on_fail:
- return完整字段说明、操作符列表 → Check-Node · 操作符参考
# 标准格式
- action: "showIndicator"
args: ["{target}", "{source}", "{value}", "CRITICAL"]
# 短语法(推荐)
- showIndicator: ["{target}", "{source}", "{value}", "{cause.name}"]完整说明 → Action-Node
| 动作 | 参数 | 说明 |
|---|---|---|
showIndicator |
[target, source, value, tag] |
触发指示器显示 |
-
target— 受击实体(LivingEntity) -
source— 攻击来源实体(Entity) -
value— 数值(double) -
tag— 指示器标签,对应 indicator/*.yml 中的 tag 名称
第三方插件可通过 API 注册自定义动作,详见 WarriorView API。
id: "damage-indicator"
event: "org.bukkit.event.entity.EntityDamageByEntityEvent"
priority: 3
variables:
target: "entity"
source: "damager"
value: "finalDamage"
cause: "cause"
critical: "critical"
flow:
- check: target
op: "instanceof"
value: "org/bukkit/entity/LivingEntity"
- check: value
op: ">"
value: "0"
- check: critical
op: "!="
value: true
on_fail:
- showIndicator: ["{target}", "{source}", "{value}", "CRITICAL"]
- return
- showIndicator: ["{target}", "{source}", "{value}", "{cause.name}"]id: "pvp-guard"
event: "org.bukkit.event.entity.EntityDamageByEntityEvent"
variables:
damage: "damage"
entity: "entity"
weapon: "damager.itemInMainHand.type.name"
flow:
- all:
- check: damage
op: ">"
value: 5
- check: weapon
op: "in"
value: ["DIAMOND_SWORD", "IRON_SWORD", "NETHERITE_SWORD"]
- check: entity
op: "!null"
on_fail:
- return
- any:
- check: damage
op: "between"
value: [100, 999]
- check: weapon
op: "starts_with"
value: "NETHERITE"
- showIndicator: ["{entity}", "{entity}", "{damage}", "SPECIAL"]