交互与导航
交互将对某个槽位的点击与某种行为关联起来。它在物品的 interactionList 中配置。
添加交互
在布局的某个物品上,向 interactionList 添加一项:
| 字段 | 作用 |
|---|---|
type | 点击方式:LEFT_CLICK、RIGHT_CLICK、SHIFT_LEFT_CLICK、SHIFT_RIGHT_CLICK、MIDDLE_CLICK、DOUBLE_CLICK、NUMBER_KEY_1 到 NUMBER_KEY_9、DROP、DROP_ALL、SWAP_OFFHAND。 |
commands | 从控制台运行的命令。%player% 会被替换为玩家名称,PlaceholderAPI 占位符也会被解析。 |
triggers | 为该玩家触发的 TypeWriter 条目。 |
closeMenu | 动作执行后关闭菜单。 |
executeReturn | 动作执行后重新打开上一个菜单。 |
物品本身也有 triggers 和 modifiers。它们会在左键或右键点击时触发,或在物品的某个特定交互匹配时触发。modifiers 用于更改事实,与动作的修改器完全相同。
在 audio.onClick 中设置的点击音效,会在每次产生了实际效果的点击时播放一次。
内部命令
以 gui: 开头的命令由 GUI 处理:
| 命令 | 效果 |
|---|---|
gui:close | 关闭菜单。 |
gui:back | 重新打开上一个菜单。 |
gui:open <entry_id>、gui:action <entry_id> | 触发另一个条目,通常是另一个 Open GUI。 |
gui:view <view_id> | 在不关闭窗口的情况下切换视图。 |
gui:page <delta> [layout_id] | 切换 paginated 布局的页码。 |
gui:scroll <dx> <dy> [layout_id] | 滚动 scrollable 布局。 |
gui:refresh | 重绘菜单。 |
gui:sound <sound_key> | 播放音效键,例如 minecraft:ui.button.click。 |
你很少需要自己输入 gui:close 和 gui:back:勾选 closeMenu 或 executeReturn 即可。
输入对话框
在物品上设置 input 后,点击该槽位会打开一个文本对话框。对话框会取代该次点击原本的交互。请填写 title、placeholder、onInputCommands 和 onInputTriggers。在 onInputCommands 中,{input} 会被替换为输入的文本,%player% 会被替换为玩家名称。确认对话框后,菜单会被重绘。
字段帮助中提到的是 %value%,但代码实际替换的是 {input}。在玩家输入的内容进入命令、数量或权限之前,请先对其进行校验。
权限
viewPermission会隐藏该槽位。clickPermission会保持槽位可见,但移除其交互、输入和触发器。criteria添加一个 TypeWriter 条件。
使用 clickPermission 可以显示带有说明性 lore 的锁定按钮,使用 viewPermission 则将其隐藏。留空表示不做任何限制。
由其他扩展提供的按钮
带有 buttonType 的物品会成为带标签的按钮。Shops 和 Quest Codex 会放置此类标记;随后由对应的扩展用自己的交互替换原有交互。标签为 buttonPrefix 加上 buttonType(例如 shop_button: 和 SHOP_ITEM)。如果没有扩展认领该标签,物品会保留你配置的交互。
冷却与实时菜单
cooldownTicks 会在点击后的这么多 tick 内阻止同一槽位再次被点击。Open GUI 上的 autoRefreshTicks 会每 N 个 tick 按当前占位符重绘名称和 lore;对于不需要动态变化的菜单,请保持在 20 或以上。
点击没有反应时
请按以下顺序检查:clickPermission、cooldownTicks、criteria、接管了该点击的 input,然后是 buttonType 前缀。需要以玩家作为发送者的命令将无法工作,因为命令是从控制台运行的。