跳到主要内容

交互与导航

交互将对某个槽位的点击与某种行为关联起来。它在物品的 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 前缀。需要以玩家作为发送者的命令将无法工作,因为命令是从控制台运行的。