Skip to content
iPlugin

任务

查询自动任务与手动 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