跳到主要内容

菜单

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 <玩家>
从 1.x 升级

2.0 第一次启动时,如果 menus/wardrobe.yml 还是 1.x 的格式,旧的 menus/ 会整个移到 menus-1.x-backup-日期/,并生成新的默认菜单,控制台会提示。 旧菜单里的 buttons.<名称>.command 写法 2.0 仍然支持。

玩家能做什么​

操作效果
仓库:左键已拥有的称号佩戴 / 卸下
仓库:左键未拥有、但在商店出售的称号直接打开购买确认(locked-click-buys)
仓库 / 商店 / 展示:右键任意称号试戴预览:关闭菜单,在屏幕中央播放称号动画几秒,然后自动回到菜单
仓库:Shift + 右键自己的自定义称号删除(先确认)
商店:左键购买 / 续费(先确认)
分类按钮:左键 / 右键下一个 / 上一个分类
筛选按钮全部 → 已拥有 → 未拥有

试戴预览在 config.yml 设置:

config.yml
menu:
preview:
enabled: true
seconds: 3
variant: big # big 大图 / small 小图
title: '' # 预览时屏幕上方的大字,{name} = 称号名
actionbar: '&7预览 &f{name} &8· &7{seconds} 秒后返回'

通用结构​

每个菜单文件都由这几部分组成:

menus/wardrobe.yml
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-model1.21.4+ 物品模型,如 myserver:gui/shop,配合资源包做完全自定义的按钮
tooltip-style1.21.2+ 提示框样式
head头颅:{player} 打开菜单的玩家 / {target} 被查看的玩家 / 玩家名 / base64 材质(从头颅网站复制)
glow附魔光效
sound点击这个按钮的音效(覆盖 sounds.click)
permission没有这个权限的玩家看不到这个按钮
actions点击后执行的动作(见下)
type指定内置功能;不写时用按钮的键名判断
enabledfalse = 不显示

内置功能​

按钮的键名就是功能(也可以用 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: 决定:

menus/wardrobe.yml
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> 归类:

categories.yml
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 则隐藏全部未拥有的称号。