Skip to content
iPlugin

会话变量

查询 ctx、context、meta 的全部操作、可见范围与刷新规则。

变量在哪一层

变量可见范围适合用途
普通 Kether 脚本临时变量当前这段脚本及其执行上下文一段计算的中间值;不是跨点击状态
ctx 普通键当前玩家的当前菜单会话分类、计数、按钮状态
输入 catch 的结果输入回调;成功重开时传入新会话搜索词、多步输入的答案
meta玩家在线期间的 Bukkit 临时元数据跨菜单的临时标记,不保证重启保留
player@... / global@...持久数据,并载入会话个人设置、全局数据,见持久数据

{{&key}} 从文字的当前求值上下文读取变量;{{ctx get key}} 明确读取当前活动菜单会话。这两种方式在普通图标文字中常有相同结果,在菜单已关闭的输入回调中则不等价。

ctx / context

语法:ctx 操作 [键] [to 值]。context 是根语句别名;数值修改中的连接词也可以用 by。操作名按表中大小写填写。

语句别名或参数返回或可见效果
ctx get key需要键返回会话中的值;不存在时为空
ctx has key需要键返回是否存在且文字非空白;0、false 都属于有值
ctx without keyno返回是否没有有效值,正好与 has 相反
ctx set key to valueto 可用 by设置会话及当前脚本中的值;值不能为 null
ctx del keyrem、delete删除当前脚本与会话里的键;持久键删除有区别,见持久数据页
ctx inc key by 1increase、+=;by 可用 to按数值增加,原键不存在时从 0 起算
ctx dec key by 1decrease、-=;by 可用 to按数值减少,原键不存在时从 0 起算
ctx update不填写键合并载入当前玩家与全局的持久数据,不刷新图标

解析时键名可省略,但任意操作省略键名都会转为 update,不是读取或删除全部变量;meta 也采用这一规则。

这些操作依赖当前活动会话;关闭菜单后不要用 ctx 保存输入回调的状态。get 不会回退读取普通脚本变量。set / inc / dec 的值是可求值的 Kether 参数,使用能立即返回的值。

数值增减会转换数值;负的小数结果目前可能被截成整数。如果需要精确的小数计算,先用适合的计算语句取得结果,再 ctx set 写入。

ctx update 只合并已有数据,不会删除会话里已经缓存、而存储中已被删除的旧键,也不会刷新正在运行脚本的一切临时变量。重新打开菜单可建立新的数据视图。

点击计数

在菜单顶层初始化:

events:
  pre_open: 'ctx set clicks to 0 true'

在现有面板的 icons 下加入按钮,并在该面板布局中安排 A:

A:
  material: PAPER
  name: '&f点击次数: {{&clicks}}'
  action: 'ctx inc clicks by 1 icon update'

每次打开从 0 开始,点击增加 1,然后更新当前图标文字。只改变量不会自动重绘图标。

选择刷新方式

状态变化使用方式
仅名称、Lore、数量等文字或物品显示变化icon update / icons update
子图标条件变化icon refresh,或 icons relocate 后 icons update
生成器筛选、排序变化regenerate,再单独刷新固定导航和状态按钮
要重建现有生成器显示缓存icons refresh;生成器回第一页,不等于重新请求数据源

全部刷新、暂停和恢复操作见语句参考。操作闭环见权限按钮和搜索列表。

切换菜单

menu open help 创建新会话,不带普通临时状态;menu switch help(menu open_ctx help)把当前会话变量传给目标菜单。目标菜单的初始化事件仍然执行,可能覆盖传入值。持久数据在新会话中会重新载入。

meta

语法:meta 操作 [键] [to 值],to 也可用 by。需要玩家,不需要仍然打开菜单;不会自动加入 {{&key}} 的会话变量中,读取时使用 {{meta get key}}。

语句别名返回或可见效果
meta get key—返回该键的第一个 Bukkit 元数据值,可能来自其他插件
meta has key—返回是否存在元数据
meta no key / meta without key—目前同样返回“是否存在”,不能当作不存在判断
meta set key to valueby 替代 to写入本插件的元数据;没有有效值时不写入
meta del keyrem、delete删除本插件的该键元数据
meta inc key by 1increase、+=增加数值,缺失值从 0 起算
meta dec key by 1decrease、-=减少数值,缺失值从 0 起算
meta update不填写键目前与 ctx update 一样刷新会话的持久数据,不是元数据刷新

未知 meta 操作会返回提示文字,而不是执行写入;普通 ctx 的未知操作则会失败。

对不存在条件进行判断时,不依赖 meta no / meta without 的名称。临时标记不等于持久存储;保存后重启仍需保留的内容使用 persist。

Last updated on