跳到主要内容

触发组 trigger.yml

触发组是「某件事发生时执行一段脚本」:踩到陷阱、右键祭坛、打倒某只怪、Boss 血量剩一半、说出暗号……

trigger.yml
踩到陷阱:
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是 / 否truetrue = 副本正式开始时就生效;false = 等脚本 trigger enable 名称 才生效
once是 / 否false整场只触发一次(别名 first,DungeonPlus 的写法)。关掉再打开也不会重置
cooldown时间0两次触发之间至少隔几秒
condition条件清单空额外条件,全部成立才触发(别名 conditions)。可以用 @self 判断触发者,见 条件
script脚本空触发时执行(别名 actions)
level整数0触发者的经验等级至少要这么多
permission文字空触发者要有这个权限
各种类的参数直接写在触发底下,或写在 parameter: 底下(DungeonPlus 写法),两种都可以
与 DungeonPlus 的差别:auto-start 默认是 true

云副本的触发组默认一开场就生效;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} @dungeonDungeonPlus 写法

打开 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-bDungeonPlus 写法:两个坐标框出的长方体(高度刚好是选到的方块,不会往上多算)

种类一览​

种类什么时候触发别名 / DungeonPlus 名称
enter玩家走进区域 / 点位area、walk、enter-region、region
leave玩家离开区域leave-region
interact右键 / 左键点方块block_interact、click、right-click-block
npc右键 NPCnpc
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​

玩家走进区域或点位的那一刻触发。站在里面不会一直重复触发,要离开再进来才会再触发一次。

参数别名默认说明
regionarea区域名称,多个用逗号
pointlocation、location-a点位名称或坐标(region 与 point 二选一)
location-b与 location-a 一起框出长方体(DungeonPlus)
playersplayer-size区域里人数到了才触发:数字,或 all = 所有还活着的人
  • 触发者:走进来的那位玩家。
  • 写了 players 时:人数从「不够」变成「够了」的那一刻触发一次(人数掉下去再补回来会再触发);变量 {count} = 区域里的人数。
  • 每 0.25 秒检查一次。同一次检查里有好几个人一起走进来时,每个人各触发一次(各自当触发者,仍受 once、cooldown 限制)。leave、sneak 也一样。
trigger.yml
踩到陷阱:
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​

玩家离开区域的那一刻触发。

参数别名说明
regionarea区域名称
pointlocation、location-a点位(与 region 二选一)
  • 触发者:离开的那位玩家。倒下变成旁观不算离开。
离开安全区:
type: leave
region: 安全区
script:
- "message &c你离开了圣光的庇护 @self"
- "effect WEAKNESS 10 1 @self"

DungeonPlus 没有这个种类。

interact​

右键(或左键)点击某个方块时触发。触发后取消原本的动作(不会真的开门、开箱、按按钮)。

参数别名默认说明
pointlocation点位名称或坐标(编辑模式的「互动点」工具)
regionarea或点区域里的任何方块
actionrightright 右键、left 左键、any 都可以
itemhand手上要拿着的东西:物品种类(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 动作生成。

参数别名说明
idnameNPC 的 ID(npc spawn <ID> … 的那个 ID)
  • 触发者:点击的玩家。变量 {npc} = NPC ID。
长老对话:
type: npc
id: 长老
cooldown: 3
script:
- "message &e长老&7:「祭坛的封印只能撑一阵子,动作要快。」 @self"

DungeonPlus:取代 NPC。

kill​

玩家亲手打死怪物时触发。

参数别名默认说明
mobmobname、entity-name、name任何怪怪物 ID 或显示名称;多个用逗号;all = 任何怪
amount1累积打死几只才触发一次,触发后重新计算
  • 触发者:打死怪物的玩家。变量 {mob} = 怪物 ID。
  • 比对是模糊的:显示名称包含这段文字就算(不分大小写、不管颜色)。
  • 触发组关着的时候打死的怪不会累积。
击杀奖励:
type: kill
mob: FrostMage
amount: 5
script:
- "message &a{self} 又打倒了 5 只冰法师 @dungeon"
- "var add 碎片 1"

DungeonPlus:取代 KILL(mobName)。

mob-death​

怪物死亡时触发,不管是谁打死的(被陷阱、被其他怪、被技能弄死都算)。参数同 kill。

参数别名默认说明
mobmobname、entity-name、name任何怪怪物 ID 或显示名称,多个用逗号
amount1累积死几只才触发一次
  • 触发者:如果是玩家打死的就是他,否则没有。变量 {mob} = 怪物 ID。
捡碎片:
type: mob-death
mob: minecraft:stray
amount: 2
script:
- "var add 碎片 1"
- "actionbar &b寒冰碎片 +1({v:碎片})"

DungeonPlus:取代 ENTITY_DEATH(mobName)。

mob-enter​

副本里的怪物走进区域时触发。

参数别名默认说明
regionarea必填区域名称
mobmobname、entity-name、name任何怪哪种怪才算
amountentity-size1区域里这种怪至少几只才触发
clearentity-clearfalsetrue = 触发后把区域里这些怪移除
  • 触发者:没有。变量 {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 的阶段机制。

参数别名默认说明
mobmobname、entity-name、name任何怪哪种怪
belowhealth50血量百分比(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必填要说的话
matchexactexact = 整句相同(不分大小写);contains = 包含这段文字就算
  • 触发者:说话的玩家。变量 {text} = 他说的整句话。
暗号:
type: chat
text: 冰雪之门开启吧
once: true
script:
- "obstacle open 暗门"
- "message &b{self} 说出了暗号,暗门开启了"

DungeonPlus 没有这个种类。

command​

玩家输入某个指令时触发。

参数默认说明
command必填指令开头(/ 可写可不写),多个用逗号;输入的指令以这段开头就算
cancelfalsetrue = 触发后把指令挡掉,不真的执行
  • 触发者:输入指令的玩家。变量 {command} = 整段指令(不含 /)。
  • command 触发组比副本内的指令规则先执行。触发了、但这个指令本身不被规则允许(例如自己编的 /芝麻开门),会直接被吃掉,不会出现「不能使用指令」的提示。
芝麻开门:
type: command
command: 芝麻开门
cancel: true
once: true
script:
- "obstacle open 宝库"

DungeonPlus:取代 COMMAND(command、cancel)。

drop​

玩家丢出物品时触发。

参数别名默认说明
itemitem-name任何物品物品种类(DIAMOND)或名称里包含的文字
removeitem-removefalsetrue = 把丢出来的物品收走
regionarea不限要站在这个区域里丢才算
  • 触发者:丢物品的玩家。
  • 副本规则 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​

玩家挖掉方块时触发。

参数别名默认说明
pointlocation点位名称或坐标
regionarea或区域里的任何方块;point 与 region 都没写 = 任何地方
blockblockname任何方块方块种类,例如 ICE
  • 触发者:挖方块的玩家。变量 {block} = 方块种类(小写)。
冒险模式挖不动方块

副本默认禁止破坏方块(规则 block-break: false,或脚本 setting break=false),但开着的 break 触发所指定的方块 (在它的 point / region 里,写了 block 时种类也要符合)仍然可以挖,挖掉就会触发;其他方块照样受保护,不用为此打开 block-break。

要注意的是冒险模式(默认的游戏模式)的玩家本来就挖不动方块。要用这个触发,副本 config.yml 要改成生存模式:

environment:
gamemode: SURVIVAL

不想改游戏模式时,改用 interact 触发加 action: left(左键点那个方块)。规则说明见 副本规则。

破冰:
type: break
region: 冰墙
block: PACKED_ICE
script:
- "var add 冰块 1"
- "if {v:冰块} >= 10 -> monstergroup 冰墙后的守卫"

DungeonPlus:取代 BREAK(location)。

place​

玩家放置方块时触发。参数与注意事项同 break:规则禁止放方块时(默认),放在这个触发的 point / region 里、种类符合 block 的方块仍然可以放,放下就会触发;冒险模式同样放不了方块,要改成 SURVIVAL。

参数别名说明
pointlocation放在这个点位
regionarea或放在区域里
blockblockname放的方块种类
  • 触发者:放方块的玩家。变量 {block}。
放上能量块:
type: place
point: 能量槽
block: SEA_LANTERN
once: true
script:
- "obstacle open 能量门"

DungeonPlus:取代 PLACE(location、blockName)。

use​

玩家拿着物品按右键时触发(对空气或方块都算)。

参数别名默认说明
itemhand任何物品物品种类或名称里包含的文字
  • 触发者:使用物品的玩家。
吹响号角:
type: use
item: 远古号角
cooldown: 30
script:
- "sound EVENT_RAID_HORN 1 1"
- "effect STRENGTH 15 1 @alive"

DungeonPlus 没有这个种类。

hologram​

点击可点击的全息文字时触发。全息文字用 hologram 动作生成,生成时设 click=true(简写接在文字后面就好):

before.yml
script:
- "hologram create 结界石 结界 &b结界石||&e点我解除封印 click=true"
参数别名说明
idname全息文字的 ID
  • 触发者:点击的玩家。变量 {hologram} = 全息文字 ID。
trigger.yml
解除封印:
type: hologram
id: 结界石
once: true
script:
- "hologram remove 结界石"
- "obstacle open 结界"

DungeonPlus:取代全息扩展里 action: 的点击行。

sneak​

玩家开始蹲下的那一刻触发(一直蹲着不会重复触发)。

参数别名说明
regionarea在这个区域里蹲才算;没写 = 任何地方
pointlocation或在这个点位上
players区域里同时蹲着的人数到了才触发(all = 全部活着的人),用法同 enter
  • 触发者:蹲下的玩家。
全员祈祷:
type: sneak
region: 祈祷台
players: all
once: true
script:
- "title &e神像回应了你们的祈祷"
- "heal"

DungeonPlus 没有这个种类。

quit​

玩家掉线时触发(副本会依 disconnect.grace 保留他的位置)。没有额外参数。

  • 触发者:掉线的玩家。他已经不在线,@self 的消息收不到;通常用来通知其他人。
队友掉线:
type: quit
script:
- "message &7{self} 掉线了,等他一下吧"

DungeonPlus 没有这个种类。

rejoin​

掉线的玩家重新连接回到副本时触发。没有额外参数。

  • 触发者:回来的玩家。
欢迎回来:
type: rejoin
script:
- "message &a欢迎回来,目前目标:{objective} @self"

DungeonPlus 没有这个种类。

variable​

条件从不成立变成成立的那一刻触发,每秒检查一次。之后条件又变回不成立、再成立时会再触发(除非 once: true)。

参数别名说明
whenif条件运算式,例如 {v:钥匙} >= 3
  • 触发者:没有。因为没有玩家,%player_…% 这类玩家的 PlaceholderAPI 变量在这里读不到,请用副本变量({v:…}、{alive}、{group:…}……)。
钥匙收齐:
type: variable
when: "{v:钥匙} >= 3"
once: true
script:
- "title &a三把钥匙都找到了"
- "obstacle open 宝库"

只剩一人:
type: variable
when: "{alive} == 1"
script:
- "message &c只剩你了,撑住! @alive"

DungeonPlus 没有这个种类(以前要靠任务不停检查 data-condition)。

wipe​

全队都倒下、没有人还能战斗时触发。没有额外参数。

  • 触发者:没有。
  • 在判定「团灭重来」(lives.wipe-retries)或「失败」之前执行。如果接着就是失败,脚本里 delay 之后的行不会执行(失败会取消所有等待中的脚本),所以要说的话放在最前面、不要加 delay。
团灭:
type: wipe
script:
- "message &8寒风吞没了你们……"

DungeonPlus 没有这个种类。

group-start​

某个怪物组开始时触发。

参数别名说明
groupname怪物组名称;没写 = 任何怪物组
  • 触发者:没有。变量 {group} = 怪物组名称。
Boss登场:
type: group-start
group: 霜烬守卫
script:
- "stopsound"
- "sound myserver:music.frost_boss 1 1"

DungeonPlus 没有这个种类。

group-end​

某个怪物组打完时触发:在这组标记为打完的那一刻,比这组的 end 还早一点。

参数别名说明
groupname怪物组名称;没写 = 任何怪物组
  • 触发者:没有。变量 {group} = 怪物组名称。
每关结束:
type: group-end
script:
- "heal"
- "actionbar &a{group} 已清除,全队恢复生命"

DungeonPlus 没有这个种类。


DungeonPlus 的写法​

DungeonPlus interact/*.yml 的内容可以贴进 trigger.yml,每个交互变成一个有名称的节点:

trigger.yml
死亡提示:
type: PLAYER_DEATH
parameter:
level: "100"
permission: "none"
first: false
auto-start: false
script:
- "$message{type=text;text=<self:player-name> 倒下了} @self"
DungeonPlus云副本
interact/*.yml 一个文件一个交互trigger.yml 一个节点一个触发
type: BLOCK_INTERACT(大写)原样可用,或写 interact
parameter: 底下的参数原样可用,或直接写在触发底下
参数值 none视为没写
first原样可用,或写 once
auto-start(默认 false)原样可用,但云副本默认是 true
$interact{name;operation=start/end}原样可用,或写 trigger enable / disable 名称
坐标参数(location 等)坐标改为相对副本格子(与 points.yml 相同),或直接改用点位名称