菜单自定义
所有玩家菜单的版面、文字、图标都在 plugins/CloudDungeon/gui/ 里,一个菜单一个文件:
| 文件 | 菜单 | 怎么打开 |
|---|---|---|
main.yml | 副本大厅 | /cd |
dungeon.yml | 副本详情 | 大厅左键副本、/cd info <副本> |
party.yml | 我的队伍 | /cd party |
invite.yml | 邀请玩家 | 队伍菜单「邀请玩家」 |
recruit.yml | 招募板 | /cd recruit |
ready.yml | 准备确认 | 队长按开始后自动打开 |
ingame.yml | 副本内菜单 | 在副本里输入 /cd |
result.yml | 结 算 | 通关后自动打开(notify.result-menu) |
top.yml | 排行榜 | 副本详情「排行榜」、/cd top <副本> |
records.yml | 我的记录 | /cd records |
改完 /cd admin reload 生效。文件被删掉会在重载时重新生成默认版本,想还原某个菜单,直接删掉那个文件再重载即可。
云界面画面
服务器装了 云界面 CloudUI 时,下面这些菜单改用云界面画面显示(全屏画面、鼠标点选):
| 画面 | 取代的菜单 | 内容 |
|---|---|---|
clouddungeon 副本大厅 | main.yml、dungeon.yml | 副本清单(状态、最佳成绩、通关次数),右侧显示人数、时间限制、生命、入场、次数与冷却;开始挑战 / 快速配对 / 切换难度 / 排行榜 |
clouddungeon_party 我的队伍 | party.yml、invite.yml、recruit.yml、ready.yml | 成员、邀请玩家、入队申请、招募中四个分页;队长可以踢出、转让、解散(点两次确认);准备确认也在这里按 |
clouddungeon_records 我的记录 | records.yml、top.yml | 每个副本的通关次数与最佳成绩,点副本看排行榜前 10 名 |
- 画面文件在
plugins/CloudUI/screens/clouddungeon/,图片在plugins/CloudUI/images/clouddungeon/,可以用 CloudUI 的画面编辑器修改。 - 画面上的文字在
lang.yml的cloudui:段落。 - 服主没改过的默认画面,升级时会自动换成新版;改过的保留不动。
- 副本内菜单(
ingame.yml)与结算(result.yml)仍是箱子菜单。 - 不想用云界面:
config.yml设cloudui.enabled: false。玩家拒绝资源包时会自动改用箱子菜单。
文件结构
title: "aa8ff✦ ad7ff云副本 &8· &#b48cff副本大厅"
layout: # 每行 9 个字符,最多 6 行
- "#########"
- "-@@@@@@@-"
- "-@@@@@@@-"
- "-@@@@@@@-"
- "#########"
- "<#T#R#S#>"
icons:
'#': { material: BLACK_STAINED_GLASS_PANE, name: " " }
'@': { type: list } # 由插件填内容的格子
'<': { material: ARROW, name: "&7◀ 上一页", action: prev }
'X': { material: BARRIER, name: "&c关闭", action: close }
formats: # 清单内容的样板
dungeon:
name: "{name}"
lore:
- "&8难度 {difficulty}"
layout:每个字符对应icons里的一个图标,空格 = 空格子。行数就是菜单的行数。icons:- 没有
type的是固定图标,可以加action变成按钮。 - 有
type的是由插件决定内容或 行为的格子(例如副本清单、开始挑战按钮)。有些 type 用这里的外观(例如start),有些的内容来自formats(例如list)。
- 没有
formats:清单里每一项的样板(副本、队员、排行……)。
图标外观
| 字段 | 说明 |
|---|---|
material | 物品 ID |
item-model | 1.21.4 以上的物品模型(资源包 / CraftEngine 的图标),例如 "myserver:icon/sword" |
custom-model-data | 旧版资源包的模型编号 |
name | 名称 |
lore | 说明(清单) |
amount | 数量 |
glow | true = 附魔光泽 |
skull | 玩家头颅的主人(material: PLAYER_HEAD 才有效),例如 "{player}" |
文字可以用 & 色码、&#RRGGBB 十六进制颜色,也支持 MiniMessage 标签;装了 PlaceholderAPI 时 %变量% 也能用。
多行变量:某一行 lore 刚好只有一个变量(例如 - "{description}"),而这个变量有好几行,会自动展开成好几行;变量是空的,这一行会被拿掉。
按钮动作 action
| action | 作用 |
|---|---|
close | 关闭菜单 |
back | 回到副本大厅 |
prev / next | 清单上一页 / 下一页 |
open:<菜单> | 打开另一个菜单:main party invite recruit records ingame;在副本详情或排行榜里还可以 dungeon、top |
command:<指令> | 关闭菜单,玩家自己执行指令(不加 /),可用 {player} |
console:<指令> | 控制台执行指令,可用 {player} |
icons:
'W':
material: COMPASS
name: "&a回主城"
action: "command:spawn"
'V':
material: EMERALD
name: "&e领取每日礼包"
action: "console:crate give {player} daily 1"
自定义背景
标题可以放 CraftEngine / ItemsAdder 的字体图片,配合透明的 item-model 图标,做出完全自定义的菜单背景。
各菜单的 type 与变量
main.yml 副本大厅
| type | 内容 |
|---|---|
list | 副本清单,样板 formats.dungeon。左键 = 打开副本详情,右键 / Shift 点击 = 直接开始挑战 |
party | 我的队伍按钮:{leader} {party_size} {party_max} |
recruit | 招募板按钮:{recruiting}(正在招募的队伍数) |
records | 我的记录按钮 |
page | 页数:{page} {pages} |
副本图标的物品外观(material、模型、光泽)来自每个副本 config.yml 的 icon:,formats.dungeon 只决定名称和说明。按副本 sort: 排序,hidden: true 的副本只有管理员看得到。
副本变量(formats.dungeon、副本详情、准备确认、排行榜、我的记录都能用):
| 变量 | 内容 |
|---|---|
{id} {name} {difficulty} | 副本 ID、名称、难度 |
{description} | 副本介绍(多行) |
{min} {max} | 人数范围 |
{mode} | 目前选的难度模式名称(没有模式时为空) |
{time_limit} {lives} | 时间限制、生命(含「全队共用 / 每人」) |
{groups} | 怪物组数量 |
{party_mode} | 只能单人 / 一定要组队 / 可单人可组队 |
{ticket} | 入场费用(一行) |
{running} | 进行中场数 |
{daily} {weekly} | 今日 / 本周剩余次数,例如 2/3 |
{cooldown} | 冷却剩余(没有冷却显示「可挑战」) |
{best} {clears} | 个人最佳时间、通关次数 |
{status} | 状态:可以挑战 / 尚未解锁 / 冷却中 / 次数已用完 / 维护中 |
{stamina_cost} {stamina} | 体力消耗、目前体力 |
{player} {uuid} | 自己 |
dungeon.yml 副本详情
| type | 内容 |
|---|---|
icon | 大图标(外观来自副本 icon:,名称说明用这里的) |
requirements | 挑战条件:{requirements} 逐条列出 ✔ / ✘ |
ticket | 入场费用:{ticket_lines}(持有数量、谁付、失败是否退还) |
rewards | 通关奖励:{reward_lines}(一般 / 难度模式 / 首通 / 各评价) |
top | 排行前三:{top_lines};点击打开完整排行 |
groups | 怪物组清单,样板 formats.group:{group} {id} {total} {mobs};有 Boss 的组自动换成凋灵骷髅头 |
start | 开始挑战按钮:{start_hint}(队长 / 队员看到的提示不同) |
recruit | 公开招募开关:{recruit_state} |
party | 打开队伍菜单 |
mode | 难度切换:{modes}(所有模式,标出目前选的)、{mode};左键下一个、右键上一个。副本没有难度模式时显示 formats.mode-none |
queue | 快速配对:{queue_state}、{queue_count};点击加入 / 退出排队 |
party.yml 我的队伍
| type | 内容 |
|---|---|
members | 队员,样板 formats.member:{name} {role} {state} {ready} {health} {level} {actions}。队长对队员右键 = 请出,Shift+右键 = 转让队长 |
requests | 加入申请,样板 formats.request({name};左键同意、右键拒绝),没 有申请的格子显示 formats.request-empty |
invite | 打开邀请菜单 |
chat | 队伍聊天开关:{chat_state} |
recruit | 公开招募开关:{recruit_state} {recruit_dungeon} |
leave | 离开 / 解散:{leave_text};点两下确认,队长 Shift 点两下 = 解散 |
create | 建立队伍 |
标题与所有图标可用 {party_size} {party_max} {leader}。
invite.yml 邀请玩家
| type | 内容 |
|---|---|
list | 可邀请的在线玩家(没有队伍、不在副本里),样板 formats.player:{name} {level} {world} |
back | 回到队伍菜单 |
page | {page} {pages} |
recruit.yml 招募板
| type | 内容 |
|---|---|
list | 正在招募的队伍,样板 formats.party:{leader} {dungeon} {size} {max} {note} {members};点击申请加入 |
empty | 没有队伍在招募时才显示 |
page | {page} {pages} |
标题可用 {count}。
ready.yml 准备确认
| type | 内容 |
|---|---|
icon | 副本图标,可用副本变量与 {ticket_lines}、{seconds}(剩余秒数) |
members | 队员,样板 formats.member:{name} {ready};已准备的会发光 |
ready | 准备按钮:{ready_state} |
decline | 这次不去(取消出发) |
这个菜单每秒自动更新。
ingame.yml 副本内菜单
| type | 内容 |
|---|---|
info | 副本信息,可用所有计分板变量 |
members | 队员,样板 formats.member:{name} {state} {health} {lives} {damage} {taken} {kills} {deaths} |
leave | 离开副本(点两下确认) |
这个菜单每秒自动更新。
result.yml 结算
| type | 内容 |
|---|---|
rank | 评价;物品自动依评价更换:S 下界之星、A 钻石、B 金锭、C 铁锭、失败 屏障 |
time | 通关时间 |
rewards | 这次获得的奖励:{rewards} |
members | 队员,样板 formats.member:{name} {mvp}(伤害最高的人){damage} {taken} {kills} {deaths} |
leave | 立即返回(不等结算倒数) |
可用 {time} {result} {reason} 与所有计分板变量。
top.yml 排行榜
| type | 内容 |
|---|---|
list | 最快通关排行,样板 formats.entry:{place} {time} {rank} {size} {members} {date}。前三名自动换成金块 / 铁块 / 铜块,物品数量 = 名次 |
back | 回到副本详情 |
排行按目前选的难度模式分开,每分钟更新一次。
records.yml 我的记录
| type | 内容 |
|---|---|
list | 每个副本一项,样板 formats.entry,可用全部副本变量;点击打开副本详情 |
page | {page} {pages} |
文字
菜单里由插件产生的文字(✔ / ✘、「已准备」、「队长」、状态文字……)在 lang.yml 的 gui: 底下,也可以改。