箱子匹配规则
一个服务器往往同时有商店、小游戏选择、锻造、仓库和任务菜单。ChaUI 通过标题、行数与优先级选择唯一替换页面,不要求这些插件主动接入。
完整的最小箱子页面
下面配置可以直接保存为 pages/game_menu.yml。它匹配标题以“小游戏”开头的 3 行或 6 行箱子。elements 暂时为空,确认匹配后再用编辑器添加组件。
yaml
id: game_menu
version: 1
title: 小游戏菜单替换
size:
width: window.width
height: window.height
coordinateMode: absolute
display:
mode: container
container:
target: chest
title:
mode: prefix
value: 小游戏
rows:
- 3
- 6
priority: 50
elements: []标题模式
标题使用玩家客户端实际看到的文字,并在匹配前去掉 § 颜色样式。
| 模式 | 行为 | 示例值 | 可匹配标题 |
|---|---|---|---|
exact | 完全相同 | 小游戏菜单 | 只匹配“小游戏菜单” |
prefix | 以指定文字开头 | 小游戏 | “小游戏菜单”“小游戏:空岛” |
contains | 包含指定文字 | 锻造 | “高级锻造台”“锻造确认” |
any | 接受任意标题 | 不填写 value | 所有符合行数的箱子 |
标题匹配区分大小写和空格。插件若在标题中加入页码,可以使用 prefix 或 contains;标题完全固定时优先使用 exact,这样最不容易误匹配。
行数 rows
rows 只填写 1 至 6,可以写一个或多个且不能重复:
yaml
rows:
- 3
- 6空列表表示不限制行数。建议已知菜单尺寸时明确填写,因为它既能减少误匹配,也会在同优先级和同标题模式下比“不限制行数”的页面更具体。
优先级与唯一选择
候选页面按以下顺序比较:
priority数字更高者优先。- 优先级相同时,标题具体程度为
exact>prefix>contains>any。 - 仍相同时,填写了行数限制的页面优先于不限制行数的页面。
如果比较完仍有两个页面并列,ChaUI 不会按文件名随意选择,而是记录冲突并显示原版界面。这样能避免一次配置顺序变化就替换成错误页面。
常用设计方式
每个插件菜单一张页面
标题固定的菜单使用 exact,并填写真实行数。这是最稳定的方式。
同系列菜单共用一张页面
分页商店可以使用 prefix,例如标题都以“服务器商店”开头。页面按钮再通过固定槽位或脚本动态绑定处理不同页内容。
通用兜底皮肤
可以准备一个低优先级的 any 页面,美化尚未单独适配的箱子。务必设置较低优先级,并先在测试服确认它不会遮盖管理或安全相关菜单。
修改后何时生效
在编辑器保存单页后,新配置会进入当前页面缓存。执行 ChaUI reload 时,正在打开的第三方容器不会被强制关闭:旧替换页面先完成关闭生命周期,再在同一个原版容器上重新匹配;没有新匹配时直接恢复原版界面。
猹件开发组