生成器面板
通过数据源与 output 模板生成图标列表。
每条元素数据对应一个 output 图标。icons 放固定导航与装饰,未被占用的格子用于列表;超出当前容量时自动分页。
自定义列表
menu:
title: '&8指南目录'
rows: 2
panels:
- layout:
- ' '
- '<#######>'
generator:
source: custom
elements:
- title: '服务器规则'
- title: '常用命令'
- title: '玩法说明'
- title: '世界介绍'
- title: '物品说明'
- title: '活动日历'
- title: '商店指南'
- title: '领地说明'
- title: '组队说明'
- title: '联系管理'
output:
material: BOOK
name: '&f{{&element_title}}'
action: "mmsg '&a你选择了 {{&element_title}}'"
icons:
'#':
material: GRAY_STAINED_GLASS_PANE
name: ' '
'<':
material: GRAY_STAINED_GLASS_PANE
name: '&7上一页'
sub:
- if: 'not page isFirst'
material: ARROW
name: '&f上一页'
action: |-
page previous
icon by '<' refresh
icon by '>' refresh
'>':
material: GRAY_STAINED_GLASS_PANE
name: '&7下一页'
sub:
- if: 'not page isLast'
material: ARROW
name: '&f下一页'
action: |-
page next
icon by '<' refresh
icon by '>' refresh下载 catalog-demo.yml。第一行每页显示九项,十条数据分成两页;可翻页时导航变为箭头。
面板字段
以下字段写在 panels 中包含 generator 的那一项:
| 字段 | 类型 | 必填 | 默认行为 | 说明 |
|---|---|---|---|---|
layout | 文字列表 | 否 | 无字符布局 | 固定图标占据的格子不用于生成列表 |
scale | 两项整数列表 | 否 | 优先按 layout 计算;否则宽 9、高度自动确定 | 面板宽度、高度 |
locate | 两项整数列表 | 否 | 在父容器中自动放置 | 面板起点坐标 |
icons(icon、item、items) | 图标映射 | 否 | 无固定图标 | 固定导航与装饰 |
generator | 生成器设置对象 | 是 | — | 数据来源与输出模板 |
生成器字段
以下字段写在面板的 generator 中:
| 字段 | 类型 | 必填 | 默认行为 | 说明 |
|---|---|---|---|---|
source | 文字 | 否 | custom | 数据来源名称 |
elements | 元素对象列表 | 否 | 不添加自定义元素 | custom 的列表内容;其他来源可追加自定义元素 |
output(template) | 图标定义对象 | 是 | — | 每条元素使用的图标模板 |
filter | 条件语句文本 | 否 | 不筛选 | 保留判断结果为 true 的元素 |
sortBy | 文字 | 否 | 保留原顺序 | 按指定元素字段的文字值排序,不是数值排序 |
data | 文字键值映射 | 否 | 不传入额外参数 | 仅对支持对应参数的数据来源有效,见下文 |
自定义元素的值使用文字、数字或布尔值。元素字段在 output 中加 element_ 前缀读取,例如 title 对应 {{&element_title}}。
内置来源
| source | 内容 | 常用元素字段 |
|---|---|---|
custom | 自定义 elements | 自行定义 |
player | 在线玩家 | element_name、element_uuid |
menus | 已加载菜单 | element_id |
world | 世界 | element_name、element_environment |
sound | 声音 | element_name、element_ordinal |
entity_world / entity_nearby | 世界实体 / 附近实体 | element_name、element_type |
在线玩家
替换 generator 段即可显示玩家头像与名称:
generator:
source: player
sortBy: name
output:
head: '{{&element_name}}'
name: '&f{{&element_name}}'在线玩家列表在打开菜单时取得;重新打开可更新名单。
筛选
下面按 keyword 筛选标题,未设置 keyword 时显示全部:
# 写在 generator 中
filter: 'any [ ctx without keyword check &element_title has &keyword ]'在列表的按钮动作中设置关键词、应用筛选,再刷新固定导航:
action: |-
ctx set keyword to '说明'
regenerate
icon by '<' refresh
icon by '>' refresh清除筛选同样刷新两个导航图标:
action: |-
ctx del keyword
regenerate
icon by '<' refresh
icon by '>' refresh列表与图标刷新
| 操作 | 结果 |
|---|---|
| page next / page previous | 切换列表页,不重新判断固定导航的子状态 |
| icon by ID refresh | 重新判断并更新指定图标,不改变列表页 |
| regenerate | 应用筛选、排序,回到第一页 |
| icons refresh | 重建生成器列表,回到第一页;固定导航需单独刷新 |
切页和筛选动作中的 icon by 刷新负责同步上一页、下一页按钮。可输入关键词的完整配置见搜索列表。
扩展内容
额外的固定字段直接放入 elements:
generator:
source: custom
elements:
- title: '服务器规则'
description: '查看公共规则与游戏约定'
output:
material: BOOK
name: '&f{{&element_title}}'
lore:
- '&7{{&element_description}}'动态显示内容写在 output 的名称或 Lore 内联语句中。
来源参数与扩展限制
data 是调用数据来源时传入的参数,不会自动成为 output 可读取的 element_ 字段。使用扩展来源时,按该来源说明填写参数名称和值。内置来源没有通过 data 开放通用参数,entity_nearby 的范围也不能通过 data 修改。
extension 不支持动态属性计算,不能用它定义随变量变化的元素字段。固定属性写在 elements 的每条元素中;动态显示写在 output.name、output.lore 的内联语句中。上例的 description 是固定属性。
最后更新于