输入至少两个字符

Layout

文档版本: v2.0.7

Layout 把按钮 ID 映射到容器的物理槽位。每一行代表一行库存;空格表示空槽位,普通单字符是按钮 ID,反引号包裹的多字符内容作为一个逻辑槽位。

字段一览#

写法 占用逻辑槽位 作用
Layout 整个布局 必须是字符串列表,每行对应一行库存
空格 1 保持为空,不渲染按钮
普通字符,如 A# 1 引用 Buttons.AButtons.#
反引号,如 `shop` 1 引用多字符按钮 ID Buttons.shop

布局只负责“按钮放在哪里”,不负责“按钮显示什么”或“点击做什么”。后两项分别写在 Buttons.<id>.displayButtons.<id>.actions

Type: CHEST
Layout:
  - '#########'
  - '####`shop`####'
  - '#########'

上例的中间行仍然是 9 个逻辑槽位:4 个空位、1 个 shop 按钮、4 个空位。Buttons.shop 必须存在;同一按钮 ID 可以占用多个槽位,并在这些槽位显示相同状态。

规则#

  • 普通箱子为 9 列,允许 1 至 6 行;漏斗为 5 槽;发射器和投掷器为 3 x 3;熔炉类和铁砧为 3 槽。
  • 行数或槽位数量不符合 Type 时,菜单解析失败,不会打开残缺菜单。
  • 按钮 ID 建议使用字母、数字、_-/;多字符 ID 必须使用反引号。
  • 不要把 Dialog 的 Bottom 矩阵写进容器类菜单的 Layout;容器类菜单的按钮矩阵由库存槽位决定。

按钮定义参见Buttons,容器类型限制参见Type

使用案例:箱子和漏斗#

# CHEST 必须有 9 个逻辑槽位,每行 9 列
Type: CHEST
Layout:
  - '# # # # #'
  - '    `shop`    '
  - 'A B C D E'
# HOPPER 必须只有 5 个逻辑槽位
Type: HOPPER
Layout:
  - 'ABCDE'

解析器按逻辑槽位计数,而不是简单按按钮名称长度计数。因此 `shop` 和一个普通字符都只占一个槽位;行数或列数错误会阻止菜单打开。

运行时动态槽位#

除了在 Layout 中用静态字符定位,按钮也可以在 Buttons.<id> 下声明 slot 表达式,由 KaMenu 在每次打开、刷新或翻页时按玩家状态解析槽位,从而不依赖布局固定位置。

slot 写法 行为
slot: 5 单静态槽位
slot: '%player_empty_slots%' 单表达式,支持 PAPI / KaMenu 变量,按玩家状态解析
slot: [8, 9, 10] 扁平列表,同一按钮同时渲染在多个槽位(多副本)
slot: [[8], [9], [10]] 列表的列表,逐帧循环,每次刷新移动到下一帧(运动槽位)
Buttons:
  moving:
    slot: '%player_empty_slots%'
    display:
      material: PAPER
  cycle:
    slot: [[8], [9], [10]]
    display:
      material: DIAMOND
  • 声明了 slot 的按钮不需要在 Layout 中分配字符;它不会被报告为“未使用的按钮”。
  • 点击位置优先查运行时动态槽位映射,再回退到静态 Layout 字符。
  • 动态槽位与静态布局槽位冲突时,该动态按钮被跳过;帧切换时旧槽位物品会被自动清理。
  • 动画帧([[8], [9], [10]])随菜单 Update 刷新节拍循环;未配置 Update 时静止在首帧。