跳到主要内容

菜单自定义

所有玩家菜单的版面、文字、图标都在 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: "&#5aa8ff✦ &#7ad7ff云副本 &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-model1.21.4 以上的物品模型(资源包 / CraftEngine 的图标),例如 "myserver:icon/sword"
custom-model-data旧版资源包的模型编号
name名称
lore说明(清单)
amount数量
glowtrue = 附魔光泽
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: 底下,也可以改。