菜单
2.0 重做了全部菜单。所有菜单都在 plugins/CloudTitle/menus/,修改后 /clt reload 生效。
菜单里的物品无法被拿取、Shift 移动、拖拽或丢出。
| 文件 | 菜单 | 打开方式 |
|---|---|---|
main.yml | 主菜单 | /clt(config.yml 的 menu.main-on-command: false 时 /clt 改为打开仓库) |
wardrobe.yml | 称号仓库 | /clt open、主菜单 |
shop.yml | 称号商店 | /clt shop、主菜单 |
rewards.yml | 收集奖励 | /clt rewards、主菜单 |
confirm.yml | 确认界面 | 购买称号、定制称号、删除自定义称号时自动打开 |
showcase.yml | 称 号展示(只读) | /clt showcase <玩家>、点击聊天里的称号 |
view.yml | 管理界面 | /clt view <玩家> |
2.0 第一次启动时,如果 menus/wardrobe.yml 还是 1.x 的格式,旧的 menus/ 会整个移到 menus-1.x-backup-日期/,并生成新的默认菜单,控制台会提示。
旧菜单里的 buttons.<名称>.command 写法 2.0 仍然支持。
玩家能做什么
| 操作 | 效果 |
|---|---|
| 仓库:左键已拥有的称号 | 佩戴 / 卸下 |
| 仓库:左键未拥有、但在商店出售的称号 | 直接打开购买确认(locked-click-buys) |
| 仓库 / 商店 / 展示:右键任意称号 | 试戴预览:关闭菜单,在屏幕中央播放称号动画几秒,然后自动回到菜单 |
| 仓库:Shift + 右键自己的自定义称号 | 删除(先确认) |
| 商店:左键 | 购买 / 续费(先确认) |
| 分类按钮:左键 / 右键 | 下一个 / 上一个分类 |
| 筛选按钮 | 全部 → 已拥有 → 未拥有 |
试戴预览在 config.yml 设置:
menu:
preview:
enabled: true
seconds: 3
variant: big # big 大图 / small 小图
title: '' # 预览时屏幕上方的大字,{name} = 称号名
actionbar: '&7预览 &f{name} &8· &7{seconds} 秒后返回'
通用结构
每个菜单文件都由这几部分组成:
version: 2
title: '&8称号仓库 &7· {category} &8({page}/{pages})'
rows: 6
content-slots: ['10-16', '19-25', '28-34', '37-43'] # 放称号的格位,支持区间
preview: small # 物品名里的称号图:small / big
sounds:
open: 'BLOCK_CHEST_OPEN:0.4:1.4' # 音效:音量:音调
click: 'UI_BUTTON_CLICK:0.5:1.3'
success: 'ENTITY_EXPERIENCE_ORB_PICKUP:0.6:1.2'
fail: 'ENTITY_VILLAGER_NO:0.6:1'
decorations: # 装饰:可以写多组,后写的盖住先写的
border:
material: BLACK_STAINED_GLASS_PANE
slots: ['0-8', 9, 17, 18, 26, 27, 35, 36, '44-53']
accent:
material: LIGHT_BLUE_STAINED_GLASS_PANE
slots: [0, 8]
buttons: # 按钮会盖住装饰,按钮所在格位不会放称号
shop:
slot: 51
material: EMERALD
name: '&a称号商店'
lore: ['&7购买更多称号']
称号按 order 排序后依次填入 content-slots,放不下自动分页;没有上一页 / 下一页时,按钮不显示(露出下面的装饰)。
称号配置里写了 menu-slot / menu-page 的会固定在该位置(只在「全部」分类且不筛选时)。
按钮字段
| 字段 | 说明 |
|---|---|
slot / slots | 格位,slots: [45, 53] 或 ['10-16', 20],一个按钮可以占多个格位 |
material / amount | 材质 / 数量 |
name / lore | 名称 / 说明,支持 & 颜色、&#RRGGBB、MiniMessage 与 PlaceholderAPI 变量 |
custom-model-data | 自定义模型数据(0 = 不用) |
item-model | 1.21.4+ 物品模型,如 myserver:gui/shop,配合资源包做完全自定义的按钮 |
tooltip-style | 1.21.2+ 提示框样式 |
head | 头颅:{player} 打开菜单的玩家 / {target} 被查看的玩家 / 玩家名 / base64 材质(从头颅网站复制) |
glow | 附魔光效 |
sound | 点击这个按钮的音效(覆盖 sounds.click) |
permission | 没有这个权限的玩家看不到这个按钮 |
actions | 点击后执行的动作(见下) |
type | 指定内置功能;不写时用按钮的键名判断 |
enabled | false = 不显示 |
内置功能
按钮的键名就是功能(也可以用 type: 指定):
| 键名 / type | 功能 |
|---|---|
main / back | 回到主菜单(主菜单里的 back = 关闭;确认界面里的 back = 返回上一页) |
wardrobe / shop / rewards | 打开对应菜单 |
previous / next | 翻页 |
category / filter | 切换分类 / 筛选 |
unequip | 卸下称号(管理界面里卸下被管理的玩家) |
custom-title | 开始定制称号(未开启或没有权限时自动隐藏) |
claim-all | 一键领取全部已达成的奖励 |
confirm / cancel | 确认界面的确认 / 取消 |
close | 关闭菜单 |
profile 或其他名字 | 只显示,不做事(可配合 actions) |
动作 actions
buttons:
spawn:
slot: 40
material: COMPASS
name: '&a回到主城'
actions:
- 'close'
- 'command: spawn' # 玩家执行
- 'console: give {player} bread 1' # 后台执行
- 'message: &a欢迎回来'
- 'sound: ENTITY_PLAYER_LEVELUP'
- 'open: rewards' # main / wardrobe / shop / rewards / showcase
变量
菜单标题、按钮名称与说明里都可以用:
| 变量 | 内容 |
|---|---|
{player} / {target} | 打开菜单的玩家 / 被查看的玩家(展示、管理界面) |
{page} / {pages} | 当前页 / 总页数 |
{equipped} / {equipped_name} | 当前称号(图片 / 文字本身)/ 称号名 |
{owned} / {total} / {percent} / {progress} | 已拥有数 / 称号总数 / 收集百分比 / 进度条 |
{rewards} | 可领取的奖励数 |
{category} / {next_category} / {prev_category} | 当前 / 下一个 / 上一个分类 |
{categories} | (lore 中)全部分类列表,当前分类高亮 |
{filter} / {next_filter} | 当前 / 下一个筛选 |
{balance} / {points} | 金币 / 点券余额 |
{customs} / {custom_price} | 已定制的称号数 / 定制价格 |
%任意PlaceholderAPI变量% | 安装 PlaceholderAPI 时可用 |
进度条样式在 config.yml 的 menu.progress-bar 修改(长度、已完成 / 未完成的字符)。
称号物品
仓库、商店、展示、管理、确认界面里的称号物品由 item: 决定:
item:
name: '{preview} &f{name}' # 图片称号
name-text: '{preview}' # 文字称号({preview} 就是文字本身,避免名字出现两次)
locked-material: '' # 未拥有时换成这个材质,例如 GRAY_DYE;留空 = 原图标
tooltip-style: ''
lore-equipped: [...]
lore-owned: [...]
lore-locked: [...]
expire-permanent: '&7永久拥有'
expire-timed: '&7剩余 &e{time}'
glow-equipped: true
| 变量 | 内容 |
|---|---|
{preview} | 称号图(小图或大图首帧)/ 文字称号的文字 |
{name} / {id} | 称号名 / ID |
{lore} | 称号的说明(多行) |
{stats} / {effects} / {particle} | 属性 / 药水效果 / 粒子特效(多行,没有时整行隐藏) |
{category} | 分类名(没有分类时整行隐藏) |
{expire} | 剩余时间(未拥有时整行隐藏) |
{owners} | 全服拥有人数 |
{obtained} / {source} | 获得日期 / 来源(管理界面常用) |
{obtain} | 获取方式(称号的 obtain:,或「称号商店购买」) |
{preview_hint} / {delete} | 试戴提示 / 自定义称号的删除提示 |
值为空的整行会自动隐藏,连续的空行会合并,所以模板可以放心多写几个变量。
商店另有 lore-buy、lore-extend、lore-owned、lore-no-permission、lore-confirm,以及 {cost}(价格,多行)、{duration}(购买时长),价格行的格式在 cost-money / cost-points / cost-item / cost-free。
商店的购买确认方式:confirm: menu(确认界面,默认)/ double-click(confirm-seconds 秒内再点一次)/ none(直接购买)。
分类与筛选
分类写在 plugins/CloudTitle/categories.yml,称号用 category: <分类ID> 归类:
all-name: '&f全部称号'
categories:
vip:
name: '&6会员称号'
icon: GOLD_INGOT
order: 2
event:
name: '&d活动称号'
icon: FIREWORK_ROCKET
order: 3
分类按钮只会在至少有一个称号的分类之间切换,第一个永远是「全部」。称号写了 category 但 categories.yml 里没有,也会出现(用 ID 当名字)。
每位玩家的分类与筛选选择会被记住,翻页、购买、预览回来后保持不变。
称号写 hide-locked: true 就是隐藏称号:获得之前不会出现在仓库里。仓库的 show-locked: false 则隐藏全部未拥有的称号。