任务
查询自动任务与手动 task 调用、tick 时间、节点列表和 async 的适用范围。
自动周期任务
tasks 位于菜单顶层,别名为 task。菜单打开时会自动提交其中所有命名任务:
tasks:
refresh_display:
delay: 20
period: 20
async: false
run:
- type: KETHER
value: 'icons update'菜单打开 20 tick 后首次执行,之后每 20 tick 更新现有图标显示,不重建生成器数据缓存。关闭或切换菜单时,原会话的任务取消。
任务字段
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
delay | 长整数 | 否 | 0 tick | 自动任务首次执行前的延迟 |
period | 长整数 | 否 | 0,只执行一次 | 自动重复间隔;正数启用重复执行 |
async | 布尔值 | 否 | 普通 Bukkit / Paper 自动任务为 true | 只控制自动任务的调度,见下表 |
run | 节点对象、节点标量或节点列表 | 是 | 无执行内容 | 使用节点的 type、value、throwable 及对应别名 |
run 不是普通动作列表。直接写 'icons update' 会成为 CONST,只返回文字,不更新图标;if、catch 等结构也不是节点对象。要运行脚本,明确配置 type: KETHER 和 value;一段多行脚本可放进同一个 value: |-。
列表按顺序调用每个节点,但不等待前一个节点内的延迟或异步工作完成,也不因前一个节点结果为 false 就停止。需要等待和分支控制时,把逻辑放进同一段 Kether。
手动 task 调用
action: 'task refresh_display'语法为 task 名称 [with 参数]。立即执行 run 一次,不重新提交周期任务,不使用 delay / period,也不取消已经自动启动的任务。没有仅靠命名就“不自动启动”的任务类型。
with 与 node 相同:单值成为一项、集合逐项转文字、未填写为空列表,节点通过 invokeArgs 读取。任务必须在当前菜单中定义,不查找全局节点来替代任务。
正常启动全部节点后返回 true,不代表每个节点的延迟工作已结束;没有活动会话时返回 false,找不到任务时返回带任务名的提示文字。
async 的适用范围
| 调用方式 | async 的实际作用 |
|---|---|
| 普通 Bukkit / Paper 自动启动 | 选择任务入口的调度方式,省略为 true |
| Folia 自动启动 | 固定按玩家所属线程运行,不靠 async 切换后台 |
动作中的 task 名称 | 在玩家所属线程执行 run,忽略任务的 async |
自动任务的 async 不是“整段 Kether 的所有后续操作都在后台”的保证;Kether 中的玩家操作仍按自己的执行规则调度。涉及玩家、物品、菜单的刷新任务可像上例明确写 async: false。
JavaScript 节点会在被调用时求值;其中同步网络读取不会因为手动 task 所指任务写了 async: true 就变成非阻塞请求。async 也不是网络超时、结果缓存或重试选项。
时间与局部刷新
delay / period 使用 tick,20 TPS 时 20 tick 约一秒。图标自己的 update、relocate 和标题/动画间隔也使用 tick;min-interact-interval、shift_f 使用毫秒,不混用。
只更新一个图标时优先使用图标自身的刷新配置,详见图标和动画;点击后的一次变化可直接在点击动作末尾刷新,不必增加周期任务。
Last updated on