点击动作
查询动作结构、点击类型、默认动作叠加与连续执行规则。
action(别名 actions、handler、click)写在 panels 中某个图标下;子图标和生成器的 output 也可以配置点击动作。动画 frames 只配置显示,不在帧内定义点击动作。一次动作可以是 Kether 文本、布尔值、动作列表或结构化对象,不必只写一条命令。
# 图标内
material: PAPER
name: '&f点击测试'
action: "mmsg '&a点击成功'"连续动作
action: |-
mmsg '&a点击成功'
menu close这是同一段 Kether 脚本,普通语句的返回值不会自动中断后面的语句;脚本最终结果才是这次动作的结果。同一段脚本中设置的脚本临时变量可以继续使用。
动作结果优先使用真正的布尔值 true / false。普通脚本结果为文字 false 或 no 时也判为失败;这不是“数字 0 一定失败”的规则。输入捕获开始时返回 false,因此应将输入后的操作写进回调,而不是放在它后面的列表项。
结构化动作
| 结构入口 | 用途 | 完整查询 |
|---|---|---|
kether | 将一段脚本包在对象中 | 下方说明 |
if、if_not、all、any、none | 按条件执行 then / else | 条件动作 |
case 与 when | 按值选择首个匹配分支 | 按值选择 |
catch | 接收一次聊天或告示牌输入 | 玩家输入 |
catchers | 顺序接收多步输入 | 多步输入 |
同一个对象只选择一种结构;分支里可以继续嵌套另一种结构或动作列表。不要在同一层混合 if、kether、catch 等入口。
结构化 kether
action:
kether: |-
ctx set selected to help
menu open help| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
kether | 脚本文本 | 是 | 不构成此结构 | 单行文字或多行块文本,作为一段脚本执行 |
kether 下的 YAML 语句列表目前不能正常读取。多行脚本使用上面的 |-;多项动作使用外层动作列表,不写成 kether 列表。
点击类型
直接填写动作时,所有送达该图标的点击类型共用此动作。需要区分点击时,在 action 下按类型配置:
action:
left: "mmsg '&a你按了左键'"
right: "mmsg '&b你按了右键'"
shift_left: "mmsg '&eShift + 左键'"直接按类型名写在 action 下,不再套一层 typed。配置键不区分大小写。以下表格同时列出完整名称与可用的 Bukkit 名称;未列出缩写的类型使用完整名称。
| 配置键 | 触发方式 |
|---|---|
LEFT_CLICK(left)、RIGHT_CLICK(right) | 左键、右键 |
SHIFT_LEFT_CLICK(shift_left)、SHIFT_RIGHT_CLICK(shift_right) | Shift + 左键、右键 |
LEFT_CLICK_OUTSIDE(window_border_left)、RIGHT_CLICK_OUTSIDE(window_border_right) | 窗口外左键、右键;不会送达正常的图标格子 |
NUMBER_KEY(number_key) | 数字键公共处理;也会接收副手交换 |
NUMBER_KEY_1~NUMBER_KEY_9 | 指定数字键 |
OFFHAND_SWAP(swap_offhand) | 副手交换键 |
MIDDLE_CLICK(middle) | 中键,受游戏模式限制 |
DROP(drop)、CONTROL_DROP(control_drop) | 丢弃键、Ctrl + 丢弃键 |
DOUBLE_CLICK(double_click) | 双击 |
LEFT_MOUSE_DRAG_STARTING、LEFT_MOUSE_DRAG_ADD_SLOT、LEFT_MOUSE_DRAG_ENDING | 左键拖动的开始、经过槽位、结束 |
RIGHT_MOUSE_DRAG_STARTING、RIGHT_MOUSE_DRAG_ADD_SLOT、RIGHT_MOUSE_DRAG_ENDING | 右键拖动的对应阶段 |
MIDDLE_MOUSE_DRAG_STARTING、MIDDLE_MOUSE_DRAG_ADD_SLOT、MIDDLE_MOUSE_DRAG_ENDING | 中键拖动的对应阶段,受游戏模式限制 |
拖动、窗口外点击等类型是否实际触发,还取决于容器与面板是否把该事件送到图标;不能仅靠配置一个名称让任意面板支持拖放。不要使用 UNKNOWN 作为通用匹配。
多个类型共用动作时,用英文逗号连接,逗号两侧不加空格:
action:
'left,right': "mmsg '&a已点击'"窗口外点击及 *_DRAG_STARTING、*_DRAG_ENDING 没有对应的正常图标格子,不作为普通按钮的回调。虚拟窗口中的 *_DRAG_ADD_SLOT 可用于经过图标的拖拽阶段;普通窗口的真实物品拖拽不按经过的图标逐个调用这些动作。存取区域的内容变化写在 crafting.listener 中。
默认动作 def
action:
def: "mmsg '&7已点击按钮'"
left: "mmsg '&a你按了左键'"| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
def(default) | 动作或动作列表 | 否 | 不执行公共动作 | 每次点击额外执行,不是“仅未匹配时执行” |
| 点击类型名称 | 动作或动作列表 | 否 | 该类型无专属动作 | 匹配的类型动作先启动,再启动数字键公共动作和 def |
def 会与匹配的点击动作叠加执行。 上例左键发送两条消息,右键只发送公共消息。具体类型返回 false 只影响它自己的动作列表,不会阻止 def;两者也不会等待对方的延迟脚本完成。
数字键会启动具体的 NUMBER_KEY_1~NUMBER_KEY_9、公共 NUMBER_KEY 和 def;副手交换会启动 OFFHAND_SWAP、NUMBER_KEY 和 def。同一效果不要重复放进这些分支。
执行命令
action: 'command "spawn" as player'command 默认使用玩家身份;可用 as console 或 as op。命令内容不带开头 /。身份别名、文字替换、console / playerPerform 的差异见消息、命令与工具语句。
Last updated on