跳到主要内容

能力与延后动作

Plan 和 Option 都可以配置 outcomes。Plan 奖励按最终状态判断一次,Option 奖励还要求此项份数大于零。选择或切换预设期间不授予能力,也不执行动作。

Outcome 字段​

字段类型必填默认值作用
key非空字符串是—奖励的稳定标识,同一所属定义内不可重复
conditionSaturn EntityCondition否通过最终快照上的触发条件
abilitiesSaturn ability ID 数组否[]要授予的永久能力
actions延后动作数组否[]提交后等待执行的动作

以下片段放入 Plan 或 Option。引用的 example:strong_body 需另行定义:

{
"outcomes": [
{
"key": "strong_body",
"condition": {
"type": "spb:compare",
"left": "resource_example_strength",
"operator": ">=",
"right": 4
},
"abilities": ["example:strong_body"],
"actions": [
{
"key": "starter_food",
"delay": 1,
"repeat": 1,
"action": {
"type": "saturn:give_item",
"stack": {"id": "minecraft:bread", "count": 2}
}
}
]
}
]
}

能力文件使用 Saturn 的能力格式,例如 data/example/saturn/ability/strong_body.json。能力由本模组按方案维护授予来源;编辑草稿不会临时获得这些能力。

延后动作字段​

字段类型必填默认值作用
key非空字符串是—同一 Outcome 内唯一的动作标识
delayNumberProvider否1向上取整,至少 1 个在线服务端 tick
repeatNumberProvider否1向下取整后的执行次数,必须非负
actionSaturn EntityAction是—提交时冻结的动作定义

当前每次提交最多产生 1024 个展开后的任务,延迟最多 72000 tick。超过限制会阻止提交。正常 20 TPS 下,20 tick 约为 1 秒;离线期间不推进等待时间。

选项买多份不会自动复制奖励。需要按训练份数发放时,在该选项动作中显式写 "repeat": "selected_example_train"。每次执行都会运行完整 action,例如 2 个面包的动作重复 4 次会发放 8 个面包。

condition、delay、repeat 和本次公式变量在确认时求值或冻结。后续更改数据包不会把已提交动作替换成新定义;执行期间普通 caster_* 变量仍对应当时的玩家,resource_* 则是冻结的开局结果。

中断与恢复​

重复提交不会重复发奖。动作执行前保存 RUNNING 检查点,执行后保存结果;失败或恢复时残留的运行中任务会进入需要管理员检查的状态,不自动重放。

普通 Saturn 动作没有通用的成功回执,因此不保证任意世界改动在崩溃后精确执行一次。需要此保证的自定义奖励应使用任务标识实现幂等处理。管理员操作见任务恢复。

从 Saturn 动作打开方案​

在接受 EntityAction 的字段中嵌入:

{
"type": "spb:open_plan",
"plan": "example:first_start"
}

type 必填;plan 为可选方案 ID。省略时继续当前会话,或在没有会话时选择适用的自动方案。只对服务端玩家生效,也检查当前会话与完成记录。这是嵌入式动作,不需要创建 spb/entity_action 文件。