触发组 trigger.yml
触发组是「某件事发生时执行一段脚本」:踩到陷阱、右键祭坛、打倒某只怪、Boss 血量剩一半、说出暗号……
踩到陷阱:
type: enter
region: 陷阱区
once: true
script:
- "title &c陷阱!||&7冰霜流浪者从地底爬出"
- "mob minecraft:stray 陷阱区 2"
启动祭坛:
type: interact
point: 祭坛
auto-start: false # 前厅卫兵打完才开放(monster.yml 里 trigger enable 启动祭坛)
once: true
script:
- "message &b{self} 启动了冰之祭坛!"
- "delay 1"
- "monstergroup 霜烬守卫"
通用设置
每个触发都可以写这些:
| 设置项 | 类型 | 默认 | 说明 |
|---|---|---|---|
type | 种类 | 必填 | 触发种类,见 种类一览。大小写都可以,DungeonPlus 的名称(AREA、BLOCK_INTERACT……)也认得 |
auto-start | 是 / 否 | true | true = 副本正式开始时就生效;false = 等脚本 trigger enable 名称 才生效 |
once | 是 / 否 | false | 整场只触发一次(别名 first,DungeonPlus 的写法)。关掉再打开也不会重置 |
cooldown | 时间 | 0 | 两次触发之间至少隔几秒 |
condition | 条件清单 | 空 | 额外条件,全部成立才触发(别名 conditions)。可以用 @self 判断触发者,见 条件 |
script | 脚本 | 空 | 触发时执行(别名 actions) |
level | 整数 | 0 | 触发者的经验等级至少要这么多 |
permission | 文字 | 空 | 触发者要有这个权限 |
| 各种类的参数 | 直接写在触发底下,或写在 parameter: 底下(DungeonPlus 写法),两种都可以 |
云副本的触发组默认一开场就生效;DungeonPlus 默认是关的。要「打完某一关才开放」的触发,记得写 auto-start: false,
再在适当的时候 trigger enable 名称。
所有触发组共通的规则
- 只在副本进行中才会触发:
before.yml与倒数期间、通关或失败之后都不会触发。 - 倒下(旁观中)或已出局的玩家不会引发触发(
death、revive、quit、rejoin除外)。 - 触发后执行的脚本里,
{trigger}= 这个触发的名称;各种类另外带的变量写在各节里。
开启与关闭
| 写法 | 意思 |
|---|---|
trigger enable 名称 | 打开(start、on 也可以) |
trigger disable 名称 | 关闭(stop、end、off 也可以) |
trigger 名称 | 同 trigger enable 名称 |
interact enable 名称 | 同上(DungeonPlus 的动作名称) |
$interact{name=名称;operation=start} @dungeon | DungeonPlus 写法 |
打开 enter 这类区域触发的那一刻,已经站在区域里的人也会马上触发一次(视为刚走进去)。
谁是触发者
| 种类 | 触发者(@self、{self}) |
|---|---|
enter leave sneak | 走进 / 离开 / 蹲下的那位玩家 |
interact npc hologram use | 点击 / 使用的玩家 |
kill | 打死怪物的玩家 |
mob-death | 如果是玩家打死的就是他,否则没有 |
death revive | 倒下 / 被复活的玩家 |
chat command drop break place | 说话 / 输入指令 / 丢物品 / 挖 / 放方块的玩家 |
quit rejoin | 掉线 / 重新连接的玩家(掉线的人收不到消息) |
mob-enter mob-health variable wipe group-start group-end | 没有触发者 |
没有触发者时,@self 不会作用在任何人身上,{self} 是空的。
区域与点位
很多种类用 region 或 point 指定范围:
| 写法 | 范围 |
|---|---|
region: 陷阱区 | 编辑模式用金斧框出来的区域;多个用逗号:region: 甲区,乙区(或写成清单) |
point: 祭坛 | 编辑模式设的点位(以那个方块为准;有大小的点位就是它的范围) |
point: 12,65,30 | 坐标(X/Z 相对副本格子原点,见 点位);走进这个坐标 1.5 格内 |
location-a + location-b | DungeonPlus 写法:两个坐标框出的长方体(高度刚好是选到的方块,不会往上多算) |
种类一览
| 种类 | 什么时候触发 | 别名 / DungeonPlus 名称 |
|---|---|---|
enter | 玩家走进区域 / 点位 | area、walk、enter-region、region |
leave | 玩家离开区域 | leave-region |
interact | 右键 / 左键 点方块 | block_interact、click、right-click-block |
npc | 右键 NPC | npc |
kill | 玩家打死怪物 | kill |
mob-death | 怪物死亡(不管谁打死的) | entity_death、mob-die |
mob-enter | 怪物走进区域 | entity_area |
mob-health | 怪物血量低于某个百分比 | health、boss-health |
death | 玩家倒下 | player_death |
revive | 玩家被复活 | |
chat | 聊天说出某句话 | |
command | 输入指令 | command |
drop | 丢出物品 | player_drop |
break | 挖掉方块 | break |
place | 放置方块 | place |
use | 右键使用物品 | use-item、item-use、right-click |
hologram | 点击全息文字 | hologram-click |
sneak | 蹲下 | |
quit | 玩家掉线 | |
rejoin | 玩家重新连接回来 | |
variable | 条件成立的那一刻 | condition、data |
wipe | 全队倒下 | all-dead、all_death |
group-start | 怪物组开始 | monstergroup-start |
group-end | 怪物组打完 | monstergroup-end |
种类名称里的 - 与 _ 可以互换(mob-death = MOB_DEATH)。
enter
玩家走进区域或点位的那一刻触发。站在里面不会一直重复触发,要离开再进来才会再触发一次。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
region | area | 区域名称,多个用逗号 | |
point | location、location-a | 点位名称或坐标(region 与 point 二选一) | |
location-b | 与 location-a 一起框出长方体(DungeonPlus) | ||
players | player-size | 区域里人数到了才触发:数字,或 all = 所有还活着的人 |
- 触发者:走进来的那位玩家。
- 写了
players时:人数从「不够」变成「够了」的那一刻触发一次(人数掉下去再补回来会再触发);变量{count}= 区域里的人数。 - 每 0.25 秒检查一次。同一次检查里有好几个人一起走进来时,每个人各触发一次(各自当触发者,仍受
once、cooldown限制)。leave、sneak也一样。
踩到陷阱:
type: enter
region: 陷阱区
once: true
script:
- "title &c陷阱! @self"
- "mob minecraft:stray 陷阱区 2"
全员到齐:
type: enter
region: 王座厅
players: all
once: true
script:
- "obstacle close 王座厅入口"
- "monstergroup Boss"
DungeonPlus:取代 AREA(area、player-size)与 WALK(location-a、location-b、level、permission)。
leave
玩家离开区域的那一刻触发。
| 参数 | 别名 | 说明 |
|---|---|---|
region | area | 区域名称 |
point | location、location-a | 点位(与 region 二选一) |
- 触发者:离开的那位玩家。倒下变成旁观不算离开。
离开安全区:
type: leave
region: 安全区
script:
- "message &c你离开了圣光的庇护 @self"
- "effect WEAKNESS 10 1 @self"
DungeonPlus 没有这个种类。
interact
右键(或左键)点击某个方块时触发。触发后取消原本的动作(不会真的开门、开箱、按按钮)。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
point | location | 点位名称或坐标(编辑模式的「互动点」工具) | |
region | area | 或点区域里的任何方块 | |
action | right | right 右键、left 左键、any 都可以 | |
item | hand | 手上要拿着的东西:物品种类(BLAZE_ROD)或名称里包含的文字 |
- 触发者:点击的玩家。
config.yml的interact-hint: true(默认)时,开着的interact触发点会冒出光点,玩家找得到该点哪里。
启动祭坛:
type: interact
point: 祭坛
auto-start: false
once: true
item: 冰晶钥匙 # 要拿着名称含「冰晶钥匙」的物品
script:
- "hologram remove 祭坛字"
- "sound BLOCK_BEACON_ACTIVATE 1 1"
- "message &b{self} 启动了冰之祭坛!"
- "monstergroup 霜烬守卫"
DungeonPlus:取代 BLOCK_INTERACT(location、action、hand、level、permission)。
npc
右键副本里的 NPC 时触发。NPC 用 npc spawn 动作生成。
| 参数 | 别名 | 说明 |
|---|---|---|
id | name | NPC 的 ID(npc spawn <ID> … 的那个 ID) |
- 触发者:点击的玩家。变量
{npc}= NPC ID。
长老对话:
type: npc
id: 长老
cooldown: 3
script:
- "message &e长老&7:「祭坛的封印只能撑一阵子,动作要快。」 @self"
DungeonPlus:取代 NPC。
kill
玩家亲手打死怪物时触发。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
mob | mobname、entity-name、name | 任何怪 | 怪物 ID 或显示名称;多个用逗号;all = 任何怪 |
amount | 1 | 累积打死几只才触发一次,触发后重新计算 |
- 触发者:打死怪物的玩家。变量
{mob}= 怪物 ID。 - 比对是模糊的:显示名称包含这段文字就算(不分大小写、不管颜色)。
- 触发组关着的时候打死的怪不会累积。
击杀奖励:
type: kill
mob: FrostMage
amount: 5
script:
- "message &a{self} 又打倒了 5 只冰法师 @dungeon"
- "var add 碎片 1"
DungeonPlus:取代 KILL(mobName)。
mob-death
怪物死亡时触发,不管是谁打死的(被陷阱、被其他怪、被技能弄死都算)。参数同 kill。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
mob | mobname、entity-name、name | 任何怪 | 怪物 ID 或显示名称,多个用逗号 |
amount | 1 | 累积死几只才触发一次 |
- 触发者:如果是玩家打死的就是他,否则没有。变量
{mob}= 怪物 ID。
捡碎片:
type: mob-death
mob: minecraft:stray
amount: 2
script:
- "var add 碎片 1"
- "actionbar &b寒冰碎片 +1({v:碎片})"
DungeonPlus:取代 ENTITY_DEATH(mobName)。
mob-enter
副本里的怪物走进区域时触发。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
region | area | 必填 | 区域名称 |
mob | mobname、entity-name、name | 任何怪 | 哪种怪才算 |
amount | entity-size | 1 | 区域里这种怪至少几只才触发 |
clear | entity-clear | false | true = 触发后把区域里这些怪移除 |
- 触发者:没有。变量
{count}= 区域里符合的怪物数量。 - 有新的怪走进来、而且数量达到
amount时触发。
护送失败:
type: mob-enter
region: 水晶室
mob: minecraft:zombie
amount: 3
clear: true
script:
- "var add 水晶损伤 1"
- "if {v:水晶损伤} >= 3 -> fail &c水晶被摧毁了"
DungeonPlus:取代 ENTITY_AREA(area、entity-size、entity-name、entity-clear)。
mob-health
怪物血量降到某个百分比以下时触发。每只怪只会触发一次(同一个触发组),适合做 Boss 的阶段机制。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
mob | mobname、entity-name、name | 任何怪 | 哪种怪 |
below | health | 50 | 血量百分比(0 – 100) |
- 触发者:没有。变量
{mob}= 怪物 ID。 - 要做多个阶段,就写多个触发(
below: 70、below: 30)。
守卫狂暴:
type: mob-health
mob: minecraft:wither_skeleton
below: 50
once: true
script:
- "script 狂暴"
守卫濒死:
type: mob-health
mob: minecraft:wither_skeleton
below: 15
once: true
script:
- "title &4它要拼命了!"
- "monstergroup 守卫护卫"
DungeonPlus 没有这个种类。
death
玩家倒下时触发。
| 参数 | 说明 |
|---|---|
level、permission | 只有符合的人倒下才触发(通用设置) |
- 触发者:倒下的玩家(他已经在旁观,但仍然收得到
@self的消息)。
倒下嘲讽:
type: death
script:
- "message &7{self} 被冻成了冰雕…… @others"
- "var add 死亡次数 1"
DungeonPlus:取代 PLAYER_DEATH(level、permission)。
revive
玩家被复活时触发(等待时间到复活、队友救援、复活道具、revive 动作都算)。没有额外参数。
- 触发者:被复活的玩家。
复活祝福:
type: revive
script:
- "effect RESISTANCE 5 2 @self"
DungeonPlus 没有这个种类。
chat
玩家在聊天栏说出某句话时触发(聊天内容照样会送出)。
| 参数 | 默认 | 说明 |
|---|---|---|
text | 必填 | 要说的话 |
match | exact | exact = 整句相同(不分大小写);contains = 包含这段文字就算 |
- 触发者:说话的玩家。变量
{text}= 他说的整句话。
暗 号:
type: chat
text: 冰雪之门开启吧
once: true
script:
- "obstacle open 暗门"
- "message &b{self} 说出了暗号,暗门开启了"
DungeonPlus 没有这个种类。
command
玩家输入某个指令时触发。
| 参数 | 默认 | 说明 |
|---|---|---|
command | 必填 | 指令开头(/ 可写可不写),多个用逗号;输入的指令以这段开头就算 |
cancel | false | true = 触发后把指令挡掉,不真的执行 |
- 触发者:输入指令的玩家。变量
{command}= 整段指令(不含/)。 command触发组比副本内的指令规则先执行。触发了、但这个指令本身不被规则允许(例如自己编的/芝麻开门),会直接被吃掉,不会出现「不能使用指令」的提示。
芝麻开门:
type: command
command: 芝麻开门
cancel: true
once: true
script:
- "obstacle open 宝库"
DungeonPlus:取代 COMMAND(command、cancel)。
drop
玩家丢出物品时触发。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
item | item-name | 任何物品 | 物品种类(DIAMOND)或名称里包含的文字 |
remove | item-remove | false | true = 把丢出来的物品收走 |
region | area | 不限 | 要站在这个区域里丢才算 |
- 触发者:丢物品的玩家。
- 副本规则
item-drop必须是true(默认就是),否则玩家根本丢不出来,也就不会触发。
献祭:
type: drop
item: 冰晶碎片
region: 祭坛区
remove: true
script:
- "var add 献祭 1"
- "message &b祭坛吸收了碎片({v:献祭}/3)"
- "if {v:献祭} >= 3 -> obstacle open 圣所"
DungeonPlus:取代 PLAYER_DROP(item-name、item-remove、area)。
break
玩家挖掉方块时触发。
| 参数 | 别名 | 默认 | 说明 |
|---|---|---|---|
point | location | 点位名称或坐标 | |
region | area | 或区域里的任何方块;point 与 region 都没写 = 任何地方 | |
block | blockname | 任何方块 | 方块种类,例如 ICE |
- 触发者:挖方块的玩家。变量
{block}= 方块种类(小写)。
副本默认禁止破坏方块(规则 block-break: false,或脚本 setting break=false),但开着的 break 触发所指定的方块
(在它的 point / region 里,写了 block 时种类也要符合)仍然可以挖,挖掉就会触发;其他方块照样受保护,不用为此打开 block-break。
要注意的是冒险模式(默认的游戏模式)的玩家本来就挖不动方块。要用这个触发,副本 config.yml 要改成生存模式:
environment:
gamemode: SURVIVAL
破冰:
type: break
region: 冰墙
block: PACKED_ICE
script:
- "var add 冰块 1"
- "if {v:冰块} >= 10 -> monstergroup 冰墙后的守卫"
DungeonPlus:取代 BREAK(location)。
place
玩家放置方块时触发。参数与注意事项同 break:规则禁止放方块时(默认),放在这个触发的 point / region 里、种类符合 block 的方块仍然可以放,放下就会触发;冒险模式同样放不了方块,要改成 SURVIVAL。
| 参数 | 别名 | 说明 |
|---|---|---|
point | location | 放在这个点位 |
region | area | 或放在区域里 |
block | blockname | 放的方块种类 |
- 触发者:放方块的玩家。变量
{block}。
放上能量块:
type: place
point: 能量槽
block: SEA_LANTERN
once: true
script:
- "obstacle open 能量门"
DungeonPlus:取代 PLACE(location、blockName)。