跳到主要内容

副本设置 config.yml

dungeons/<副本ID>/config.yml 是这个副本的基本设置。用 /cd admin create 建出来的范本每一项都有注释; 没写的项目全部使用默认值,所以只要写你想改的就好。改完执行 /cd admin reload。

设置写错(例如 weather: sunny)只会在控制台警告并改用默认值,不会让整个副本失效。

时间格式

所有「秒数」类的设置都可以写纯数字(秒)或带单位:90、90s、5m、1h、1d、1m30s。

显示​

大厅菜单、计分板、王条上显示的内容。

设置项类型默认说明
name文字副本 ID显示名称,支持 & 色码
description文字清单空菜单里的介绍,一行一项
difficulty文字&a普通菜单里显示的难度文字(只是显示用;真正的难度倍率见 modes)
icon物品IRON_SWORD菜单图标,见下表
sort整数0菜单排序,小的在前
hidden是 / 否falsetrue = 只有管理员看得到(做到一半先藏起来)

icon 底下可以写:

键说明
material物品种类,例如 PRISMARINE_SHARD
name图标名称(不写 = 用副本的 name)
lore额外说明行
item-model1.21.4+ 的物品模型,例如 myserver:dungeon_icon
custom-model-data资源包的 CustomModelData
glowtrue = 附魔光泽
config.yml
name: "&b&l霜烬古殿"
description:
- "&7冰封千年的古殿深处,"
- "&7霜烬守卫仍在等待挑战者。"
difficulty: "&b普通"
icon:
material: PRISMARINE_SHARD
glow: true
sort: 1
hidden: false

地图​

设置项类型默认说明
map文字或清单空空 = 用这个文件夹的 map.schem;填别的副本 ID = 共用那个副本的地图(连点位一起);填清单 = 每场随机一张
spawn点位名称spawn进场时传送到的点位,也是一开始的存档点。编辑模式用床设的点位就叫 spawn
map: "" # 用自己的地图
# map: example # 共用 example 副本的地图
# map: [冰窟A, 冰窟B, 冰窟C] # 每场随机一张
spawn: spawn

地图与点位怎么做见 编辑模式 与 点位。开始前会检查地图是否存在、是否放得进副本格子、有没有 spawn 点位,缺任何一项都开不了。

人数与组队​

设置项类型默认说明
players.min整数1最少几人才能开始
players.max整数4最多几人(不会小于 min)
party.allowed是 / 否truefalse = 只能单人挑战(players.max 自动变成 1)
party.required是 / 否falsetrue = 一定要组队,至少 2 人
max-instances整数-1这个副本同时最多开几场,-1 = 不限(全服上限在主 config.yml)
prewarm整数0事先贴好几份地图,开副本时直接用,几乎秒开。map 填清单(随机地图)时不预贴
players:
min: 2
max: 4
party:
allowed: true
required: true
max-instances: 5
prewarm: 1

时间​

设置项类型默认说明
countdown秒数主 config.yml 的 dungeon.start-countdown(5)before.yml 跑完之后倒数几秒才正式开始;0 = 不倒数
time-limit时间30m整场时限,从倒数结束开始算;0 = 不限。时间到 = 失败(原因「时间到」)
end-delay秒数主 config.yml 的 dungeon.end-delay(20)通关后留在副本里几秒(结算、开宝箱)才送回去,最少 3
fail-end-delay秒数主 config.yml 的 dungeon.fail-end-delay(8)失败后几秒送回去,最少 3

剩下 1 分钟(时限超过 2 分钟时)与剩下 10 秒(时限超过 20 秒时)会自动提醒,可以用 notify.time-warning 关掉。 全队掉线导致副本暂停时,时限也会暂停。

各阶段的先后顺序见 开始前 / 开始后。

countdown: 3
time-limit: 15m
end-delay: 30
fail-end-delay: 8

生命与复活​

设置项类型默认说明
lives.modeshared / individualsharedshared 全队共用一份生命;individual 每人各自
lives.amount整数3生命次数,-1 = 无限
lives.respawn-delay秒数5倒下后几秒复活,等待期间是旁观模式
lives.respawn-atcheckpoint / deathcheckpoint复活在存档点(checkpoint 动作设的点,一开始是 spawn)还是倒下的地方
lives.ally-revive.enabled是 / 否写了这一段就是 true队友救援:活着的人蹲在倒下的人旁边一段时间就能救起来。整段 ally-revive 没写 = 关闭
lives.ally-revive.range小数3要蹲在几格以内
lives.ally-revive.seconds秒数4要蹲几秒
lives.item-revive.item门票 ID 或物品空复活道具:倒下时聊天栏出现按钮(/cd revive),消耗这个道具立刻复活。空 = 不开放
lives.item-revive.amount整数1每次消耗几个
lives.item-revive.when-out是 / 否true生命用完(出局)也能用复活道具
lives.wipe-retries整数0团灭时可以重来几次:全员回到存档点、生命重置;用完才算失败

生命用完的人会变成旁观,留在副本里看队友打;所有人都出局时副本失败(原因「全员阵亡」),除非还有 wipe-retries。

lives:
mode: shared
amount: 3
respawn-delay: 5
respawn-at: checkpoint
ally-revive:
enabled: true
range: 3
seconds: 4
item-revive:
item: phoenix_feather
amount: 1
when-out: true
wipe-retries: 1

副本环境​

只有副本里的人看得到(时间、天气是对玩家个人设置的,不会影响主世界)。

设置项类型默认说明
environment.time整数6000时间:0 早上、6000 中午、13000 晚上、18000 午夜;-1 = 跟服务器一样
environment.weatherclear / rain / thunderclear天气;thunder 会不时在玩家附近落下闪电特效(不伤人)
environment.gamemode游戏模式ADVENTURE进场时的游戏模式。要让玩家挖方块(break 触发)请改成 SURVIVAL
environment.effects清单空进场给的药水效果,格式 效果:等级[:秒数],没写秒数 = 整场有效
environment.clear-effects-on-leave是 / 否true离开副本时收回副本给的药水效果;false = 让玩家带着离开
environment.keep-inventory是 / 否true死亡不掉落
environment.border整数64地图外围再多几格就是世界边界;-1 = 不设边界。走出地图范围太远会被拉回存档点
environment:
time: 18000
weather: rain
gamemode: ADVENTURE
effects:
- "NIGHT_VISION:1"
- "SPEED:2:60" # 速度 II,60 秒
keep-inventory: true
border: 32

入场条件​

队长开始时检查,每位队员都要符合;不符合会把每一条原因列给队长看。

设置项类型默认说明
requirements.permission文字空每个人都要有这个权限
requirements.conditions清单空任意 PlaceholderAPI 条件,见下方
requirements.cooldown时间0冷却,从上一次开始挑战算起,例如 1h
requirements.daily-limit整数0每日次数,0 = 不限
requirements.weekly-limit整数0每周次数,0 = 不限
requirements.stamina整数0消耗体力(主 config.yml 的 stamina.enabled 要打开)
entrance.location坐标空副本入口,格式 世界,x,y,z。队长要站在这附近才能开始;空 = 不限
entrance.radius小数6入口范围几格

每日 / 每周的重置时间在主 config.yml 设置。次数什么时候算一次,由下面 ticket.count-entry-on 决定。

conditions:任意 PlaceholderAPI 条件​

conditions 可以判断任何 PlaceholderAPI 变量,所以 MMOCore 等级、职业、Vault 余额、自己插件的数值都能当门槛。 每一项可以只写条件,也可以加上自定义的不符合消息({player} = 不符合的那位队员):

requirements:
permission: "dungeon.frost"
conditions:
- "%player_level% >= 10"
- condition: "%mmocore_level% >= 20"
message: "&c{player} 需要 MMOCore 20 级才能挑战"
- condition: "'%mmocore_class%' == '剑士' || '%mmocore_class%' == '骑士'"
message: "&c{player} 的职业不能挑战这个副本"
- condition: "%vault_eco_balance% >= 1000 && %player_health% > 10"
message: "&c{player} 需要 1000 金币以上"
cooldown: 1h
daily-limit: 3
weekly-limit: 0
stamina: 20
entrance:
location: "world,100,64,200"
radius: 6
  • 比较:>= <= > < == !=;组合:&& || ! 与括号;也可以 + - * / 运算。
  • 两边都是数字就比数值,否则比文字(不分大小写)。文字可以加单引号,也可以不加。
  • 只写条件、没写 message 时,显示内建的「某某不符合条件 …」。
  • if: 是 condition: 的别名。
提示

门票(下一节)也是入场条件的一种。这里的条件只检查、不扣任何东西;要扣东西用门票或金钱。

门票​

设置项类型默认说明
ticket.payereach / leadereacheach 每人各付一份;leader 队长一人付全队(数量 × 人数)
ticket.items对照表空门票ID: 数量,门票在 tickets.yml 定义(防伪造,普通物品改名冒充不了)
ticket.money小数0金钱(需要 Vault)
ticket.refund-on-fail是 / 否false挑战失败时退还门票与金钱
ticket.count-entry-onstart / clearstart每日 / 每周次数什么时候算一次:start 进场就算;clear 通关才算

门票在开始时先「押着」,地图贴好、全员进场后才真正扣掉;中途开不成(例如有人掉线)会全数退还。

ticket:
payer: each
items:
frost_key: 1
money: 0
refund-on-fail: false
count-entry-on: start

计分板与王条​

不写就用主 config.yml 的;写了就覆盖这个副本。变量与排版见 计分板与王条。

设置项类型默认说明
scoreboard.enabled是 / 否主 config.yml是否显示右侧计分板
scoreboard.title文字主 config.yml标题
scoreboard.lines文字清单主 config.yml每一行,可以用 {objective} {time_left} {lives} {members} {leave} {v:变量} {group:组:killed} 与 PlaceholderAPI
bossbar.enabled是 / 否主 config.yml是否显示王条
bossbar.color颜色主 config.ymlPINK BLUE RED GREEN YELLOW PURPLE WHITE

王条平时显示目前目标与怪物组进度;有标记为 boss 的怪活着时,改为显示它的名字与血量(见 怪物组)。

scoreboard:
enabled: true
title: "&b&l霜烬古殿"
lines:
- "&8&m "
- "&7目标"
- "&f {objective}"
- ""
- "&7剩余时间 &a{time_left}"
- "&7剩余生命 &c❤ {lives}"
- "&7寒冰碎片 &b{v:碎片}"
- ""
- "{members}"
- ""
- "{leave}"
bossbar:
enabled: true
color: BLUE

音效​

格式 音效 [音量] [音调];填 none 或空白 = 不播。只要写想改的那几项,没写的用默认值。

音效可以写原版名称(ENTITY_WITHER_SPAWN 或 entity.wither.spawn), 也可以写资源包里自己加的 ogg——填 sounds.json 里的名称,例如 myserver:boss.roar。

键什么时候播默认
countdown倒数每一秒BLOCK_NOTE_BLOCK_HAT 1 1.6
start正式开始ENTITY_ENDER_DRAGON_GROWL 0.6 1.2
clear通关UI_TOAST_CHALLENGE_COMPLETE 1 1
fail失败ENTITY_WITHER_DEATH 0.5 1.2
death有人倒下none
revive有人复活ENTITY_PLAYER_LEVELUP 0.6 1.6
checkpoint存档点更新BLOCK_BEACON_ACTIVATE 0.7 1.4
group-start怪物组开始none
group-end怪物组打完UI_TOAST_CHALLENGE_COMPLETE 0.7 1.4
time-warning剩 1 分钟 / 10 秒提醒BLOCK_NOTE_BLOCK_BELL 1 0.8
sounds:
start: "myserver:dungeon.frost_intro 1 1"
group-end: none
death: "ENTITY_PLAYER_HURT_FREEZE 1 0.8"

脚本里随时播放音效用 sound 动作,见 动作:消息与音效。

内建提示 notify​

插件自带的标题与消息都可以个别关掉,改在脚本里写自己的。

键默认内容
countdown-titletrue倒数时的大字
start-titletrue正式开始时的「挑战开始」
clear-titlefalse通关大字(默认关:通关消息自己在 end.yml 的 clear 写)
clear-summaryfalse通关时在聊天栏列出结算(时间、评价、每人伤害 / 击杀 / 死亡、获得的奖励)
fail-titletrue失败大字(显示失败原因)
fail-summaryfalse失败时在聊天栏列出结算
result-menutrue通关 2 秒后打开结算菜单
death-messagetrue「某某倒下了」
time-warningtrue剩 1 分钟、10 秒的提醒
leave-hinttrue计分板 {leave} 那一行的离开提示;false = 那一行变成空白
notify:
start-title: false # 开始的大字自己在 start.yml 写
clear-title: false
fail-title: true
result-menu: true

其他​

设置项类型默认说明
max-mobs整数150一场最多同时存在几只被追踪的怪(保护服务器),超过的不会生成
chest-modevanilla / personal / explorevanilla地图上没有写在 loot.yml 的箱子怎么处理,见下表
interact-hint是 / 否true开着的 interact 触发点会冒出光点,让玩家找得到
chest-mode效果
vanilla一般箱子,大家共用,拿走就没了
personal每个人打开都是自己的一份(内容 = 地图上箱子原本放的东西)
explore右键直接把箱子里的东西捡进背包,每场每个箱子只能捡一次(DungeonPlus 的箱子探索)

用 loot.yml 设置的随机宝箱见 宝箱组。

人数缩放 scaling​

依人数调整怪物强度:每多一位玩家(第 2 人起)加一次。在怪物生成的那一刻计算。

设置项类型默认说明
scaling.level-per-player小数0MythicMobs 等级 +
scaling.health-per-player小数0血量 ×(1 + 值 × 多出的人数),例如 0.3、4 人 = ×1.9
scaling.damage-per-player小数0攻击 ×(1 + 值 × 多出的人数)
scaling:
level-per-player: 1
health-per-player: 0.3
damage-per-player: 0.1

难度模式 modes​

同一个副本、同一张地图,做出「普通 / 困难」等不同的数值与奖励。开始时在菜单里选,或 /cd join <副本> <模式>。 第一个模式是默认模式;没写 modes 就只有一个「普通」。排行榜依模式分开。

键类型说明
name文字模式名称
description文字菜单里的说明
health小数怪物血量倍率(默认 1)
damage小数怪物攻击倍率(默认 1)
level小数MythicMobs 等级加成(默认 0)
lives整数覆盖 lives.amount
time-limit时间覆盖 time-limit
conditions清单额外的条件,每位队员都要符合。写法同 入场条件:可以用 PlaceholderAPI、&& ||、+ - * / 与括号,例如 %player_level% >= 50 && %vault_eco_balance% >= 1000
tickets对照表覆盖 ticket.items
money小数覆盖 ticket.money
rewards奖励清单通关额外奖励,和 end.yml 的奖励一起发;格式见 通关组与奖励

倍率会和 scaling 叠加:血量 = 原本 ×(1 + health-per-player × 多出的人数)× 模式的 health。

modes:
normal:
name: "&a普通"
description: "适合第一次挑战"
hard:
name: "&c困难"
description: "怪物血量 ×2、攻击 ×1.5、只有 1 条命"
health: 2.0
damage: 1.5
level: 5
lives: 1
time-limit: 20m
conditions:
- "%player_level% >= 50"
tickets:
frost_key: 2
rewards:
- name: "&c困难奖励:下界合金碎片"
items:
- { material: NETHERITE_SCRAP, amount: 1 }

评价 ranks​

通关时依花费的时间给评价:通关秒数 ≤ 门槛就拿到那个评价(取最好的);都没达到是 C。 字母可以自己定(SS、S、A……都行),评价可以用来发 评价奖励 与 {rank} 变量。

默认(有 time-limit 时)默认(time-limit: 0 时)
S = 时限的 1/3、A = 1/2、B = 3/4S = 10m、A = 15m、B = 25m
ranks:
S: 4m
A: 7m
B: 10m

变量 variables​

副本变量的初始值。脚本里用 var 动作修改、{v:名称} 读取,每一场都从这里的值重新开始。

variables:
碎片: 0
钥匙: 0
阶段: 开场

掉线与规则覆写​

主 config.yml 的 disconnect 与 rules 是全服默认;副本里只写要改的项目。

设置项默认说明
disconnect.grace180掉线后保留位置几秒,期间重新登录直接回到副本;0 = 掉线就离开副本
disconnect.all-offline-timeout300全队都掉线时,副本暂停(怪物停止行动、计时暂停,每个人的 grace 也暂停)最多几秒,最少 10;超过 = 失败
disconnect.counts-as-deathfalse掉线算死亡一次(防止下线躲死亡或 Boss 机制)
disconnect.max-reconnects3每场最多重连几次,-1 = 不限
rules.*见 副本规则破坏 / 放置方块、PvP、珍珠、鞘翅、限定物品……
rules.commands全服默认副本里能用哪些指令:mode(whitelist / blacklist / leave-only / all)、list、message。写了就整份取代全服的设置,见 副本内的指令
disconnect:
grace: 60
counts-as-death: true
rules:
block-break: true # 这个副本要挖矿
commands:
mode: blacklist # 这个副本只挡传送类指令
list: [spawn, "home*", "tpa*"]

也可以在编辑模式的编辑菜单点「副本规则」直接切换,见 副本规则菜单。

完整示例​

下面是内建示例副本「霜烬古殿」的 config.yml,加上常用的选用项目:

config.yml
# ───── 显示 ─────
name: "&b&l霜烬古殿"
description:
- "&7冰封千年的古殿深处,"
- "&7霜烬守卫仍在等待挑战者。"
difficulty: "&b普通"
icon:
material: PRISMARINE_SHARD
glow: true
sort: 1
hidden: false

# ───── 地图 ─────
map: "" # 用本文件夹的 map.schem
spawn: spawn # 进场传送到编辑模式用床设的 spawn 点

# ───── 人数与组队 ─────
players:
min: 1
max: 4
party:
allowed: true
required: false
max-instances: -1
prewarm: 1 # 预先贴好 1 份地图,开场几乎秒开

# ───── 时间 ─────
countdown: 3 # before.yml 跑完后倒数 3 秒
time-limit: 15m # 从倒数结束开始算
end-delay: 20
fail-end-delay: 8

# ───── 生命与复活 ─────
lives:
mode: shared # 全队共用 3 条命
amount: 3
respawn-delay: 5
respawn-at: checkpoint
ally-revive: # 蹲在倒下的队友旁边 4 秒救起来
enabled: true
range: 3
seconds: 4
wipe-retries: 1 # 团灭可以重来一次

# ───── 副本环境 ─────
environment:
time: 18000 # 午夜
weather: rain
gamemode: ADVENTURE
effects:
- "NIGHT_VISION:1"
keep-inventory: true
border: 64

# ───── 入场条件 ─────
requirements:
conditions:
- condition: "%mmocore_level% >= 20"
message: "&c{player} 需要 MMOCore 20 级才能挑战"
cooldown: 0
daily-limit: 3

# ───── 门票 ─────
ticket:
payer: each
items:
frost_key: 1 # tickets.yml 里的门票
refund-on-fail: false
count-entry-on: start

# ───── 计分板 / 王条 ─────
scoreboard:
enabled: true
title: "&b&l霜烬古殿"
lines:
- "&8&m "
- "&7目标"
- "&f {objective}"
- ""
- "&7剩余时间 &a{time_left}"
- "&7剩余生命 &c❤ {lives}"
- "&7寒冰碎片 &b{v:碎片}"
- ""
- "{members}"
- ""
- "{leave}"
bossbar:
enabled: true
color: BLUE

# ───── 音效(只写要改的)─────
sounds:
start: "ENTITY_ELDER_GUARDIAN_CURSE 0.5 1.2"

# ───── 内建提示 ─────
notify:
clear-title: false # 通关消息在 end.yml 自己写

# ───── 其他 ─────
chest-mode: vanilla
interact-hint: true
max-mobs: 150
variables:
碎片: 0
scaling:
health-per-player: 0.3
ranks:
S: 4m
A: 7m
B: 10m

# ───── 难度模式 ─────
modes:
normal:
name: "&a普通"
description: "适合第一次挑战"
hard:
name: "&c困难"
description: "怪物血量 ×2、攻击 ×1.5、只有 1 条命"
health: 2.0
damage: 1.5
lives: 1
tickets:
frost_key: 2
rewards:
- name: "&c困难奖励:下界合金碎片"
items:
- { material: NETHERITE_SCRAP, amount: 1 }

# ───── 覆写主 config.yml ─────
disconnect: {}
rules: {}