动作:地图与场景
这一页的动作改变地图和场景:开关大门、改方块、传送、存档点、闪电爆炸、全息文字、粒子、NPC。 每个动作的格式说明见 怎么看这几页动作说明。
位置的写法
凡是参数写「位置」的地方(teleport、mob、sound、particle、hologram、npc……)都可以用下面这些写法:
| 写法 | 意思 |
|---|---|
王座 | 点位名称:编辑模式设的点位、怪物点、互动点、NPC 点都可以。同名的点有好几个时随机挑一个 |
陷阱区 | 区域或障碍的名称:在框起来的范围里随机挑一个位置 |
12,65,30 | 坐标:X、Z 相对于副本格子的原点(和编辑模式、points.yml 里看到的数字一样),Y 是真实高度 |
12,65,30,180,0 | 坐标加面向:后面两个是 yaw(水平朝向)、pitch(抬头低头),要一起写 |
~0,~3,~0 | 相对触发者现在的位置(这个例子是触发者头上 3 格) |
spawn | 名为 spawn 的点位(地图出生点);没有这个点位时等于目前的存档点 |
checkpoint | 目前的存档点(一开始是出生点,之后由 checkpoint、setspawn 改) |
self | 触发者现在站的位置 |
- 位置里也可以用变量,例如
teleport {v:下一个房间}。 - 每一场副本都贴在不同的格子上,所以脚本里一律写相对坐标,不要写世界的绝对坐标。从 DungeonPlus 搬过来的坐标要换算成相对坐标,或改成点位名称。
~和self需要触发者。任务组、怪物组、start.yml这类没有触发者的地方不要用,否则位置会算错或找不到。- 找不到位置时,大部分动作会跳过这一行并在控制台提示「找不到点位」;
lightning、explosion会直接什么都不做。
obstacle 障碍(大门)
别名:door
打开或关上编辑模式里框出来的障碍(大门、冰墙、栅栏……)。
简写:obstacle open 障碍名 [障碍名2 …] / obstacle close 障碍名
DungeonPlus 写法:$obstacle{group=大门;operation=delete} @dungeon
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / operation | 是 | 打开:open(或 delete、remove、clear);关上:close(或 undelete、restore、set) |
第 2 个起 / group(或 name) | 是 | 障碍名称(编辑模式用障碍工具框的范围,也可以是区域)。多个用空格或英文逗号分开 |
repeat | 否 | DungeonPlus 的参数,本插件的障碍没有附带脚本,写了会忽略 |
对象:不看 @对象。
前厅卫兵:
end:
- "obstacle open 大门"
- "sound BLOCK_IRON_DOOR_OPEN 1 0.7"
- "checkpoint 前厅存档"
# Boss 战开始把玩家关在王座厅,打完再放出去
霜烬守卫:
start:
- "obstacle close 王座大门"
- "title &4霜烬守卫||&7它醒了"
end:
- "obstacle open 王座大门 后门"
冰墙机关:
type: interact
point: 冰墙拉杆
cooldown: 10
script:
- "obstacle open 冰墙"
- "message &b冰墙融化了,5 秒后会重新冻结!"
- "delay 5"
- "obstacle close 冰墙"
障碍是怎么开关的:
- 打开:把框里所有方块变成空气。第一次打开时会记住原本的方块(含朝向、楼梯形状这些状态)。
- 关上:把记住的方块原样放回去。框里没被记住的格子(原本就是空气,或这个障碍从来没打开过)会填上障碍方块:
编辑模式框障碍时选的方块,没选就是屏障(
BARRIER)。 - 所以对一个从没打开过的障碍
close,会把整个框填满障碍方块,适合用来「把玩家关在房间里」。
注意:
- 框里原本有空气的格子,关上时也会被填起来。框障碍时尽量只框门本身。
- 大障碍每 tick 改 512 格,分几个 tick 完成,玩家看不出来,服务器也不会卡。单一个框最多 32768 格。
- 改方块时不会触发物理更新(沙子不会掉、水不会流)。
- 名称写错(地图上没有这个框)时控制台会提示。
block 改方块
别名:operation-block(DungeonPlus 1.3.8 的 $operation-block)
把某个位置(或一整个区域)的方块换掉或挖掉。
简写:block set 位置 方块 / block remove 位置
DungeonPlus 写法:$operation-block{loc=20,64,45;mode=set;type=SEA_LANTERN} @dungeon
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / mode | 是 | set = 放方块;remove = 变成空气 |
第 2 个 / loc(完整写法也可以写 location) | 是 | 位置(写法见 上面)。写区域或障碍名称时整个框都会换掉 |
第 3 个 / type(或 block) | set 时必填 | 方块 ID,例如 SEA_LANTERN、minecraft:ice |
对象:不看 @对象。
点亮火盆:
type: interact
point: 东侧火盆
once: true
script:
- "block set 20,66,45 SOUL_FIRE"
- "var add 火盆 1"
冰霜傀儡:
end:
- "block remove 冰墙区"
- "message &b冰墙崩塌,露出了一条暗道。"
冻结地面:
- "block set 中央平台 PACKED_ICE"
- "delay 10"
- "block set 中央平台 STONE_BRICKS"
注意:
- 单一位置必须在这场副本的格子范围里, 超出范围会直接忽略。
- 整区换掉时不会记住原本的方块:之后对同一个框用
obstacle close也还原不回来。需要能还原的门,用obstacle。 - 方块名称写错(或不是方块,例如
DIAMOND)时这一行会跳过,控制台会提示。 - DungeonPlus 的
$block{name=…;start=…;end=…}(用两个点定义障碍范围)不支持;障碍范围请在编辑模式里用障碍工具框。
teleport 传送
别名:tp
把玩家传送到某个位置。
简写:teleport 位置
DungeonPlus 写法:$teleport{location=12,65,30;yaw=180;pitch=0} @player
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / location(或 point、at) | 是 | 目的地,写法见 位置的写法 |
yaw | 否 | 到达后的水平朝向(简写也可以写 yaw=180) |
pitch | 否 | 到达后的抬头低头角度 |
defspawn(或 checkpoint) | 否 | true = 同时把存档点设在这里。完整写法 $teleport{…} 默认 true(和 DungeonPlus 一样);简写 teleport 位置 默认 false |
对象:所有 @对象 都可以用,默认 @dungeon。
前厅卫兵:
end:
- "title &e传送中……"
- "delay 2"
- "teleport 王座厅入口 defspawn=true"
冰之牢笼:
type: mob-health
mob: FrostWarden
below: 30
once: true
script:
- "teleport 牢笼 @random"
- "message &c有人被冰封进了牢笼!快去救他!"
弹射板:
type: enter
region: 弹射板
script:
- "teleport ~0,~8,~0 @self"
- "sound ENTITY_FIREWORK_ROCKET_LAUNCH 1 1 @self"
注意:
- 倒下(旁观中)的玩家也会被传送,但不会因此复活;已经离开副本的人不受影响。
~是相对触发者的位置,不是相对每个被传送的人。对全队用~时,所有人都会被传到触发者附近。
setspawn / checkpoint 存档点
设置存档点。存档点用在:倒下后复活的位置(复活在存档点时)、跑出地图边界被拉回来的位置、掉线重连的位置、revive checkpoint,
以及位置写 checkpoint 的地方。副本开始时存档点就是出生点。
setspawn:安静地改存档点(DungeonPlus 的$setspawn)。checkpoint:改存档点,并对全队提示「已到达存档点」、播放存档音效。
简写:setspawn 位置 / checkpoint 位置 [silent]
DungeonPlus 写法:$setspawn{location=20,65,25;yaw=0;pitch=0} @init
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / location(或 point、at) | 是 | 新的存档点,写法见 位置的写法 |
| 第 2 个 | 否 | 只对 checkpoint 有用:写 silent = 不提示、不播音效 |
yaw pitch | 否 | 在存档点复活时的面向 |
对象:不看 @对象,存档点是全队共用的。
前厅卫兵:
end:
- "obstacle open 大门"
- "checkpoint 前厅存档"
script:
# DungeonPlus 习惯在开场前用 @init 设出生点,放在 before.yml 即可
- "$setspawn{location=20.5,65,5.5;yaw=0;pitch=0} @init"
秘密存档:
type: enter
region: 隐藏房间
once: true
script:
- "checkpoint 隐藏房间 silent"
- "tell &d你发现了一个隐藏的存档点。"
注意:简写 teleport 位置 不会改存档点;传送到新区域后记得 checkpoint,或在 teleport 加 defspawn=true。
完整写法 $teleport{…} 默认会顺便把存档点设在目的地(和 DungeonPlus 一样),不想改存档点时写 defspawn=false。
lightning 闪电
在某个位置劈一道闪电。只有效果,不会造成伤害、不会起火。
简写:lightning 位置
完整写法:$lightning{location=王座}
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / location(或 point) | 是 | 位置,写法见 位置的写法 |
对象:不看 @对象,副本里的人都看得到。
霜烬守卫:
start:
- "lightning 王座"
- "weather thunder"
- "title &4霜烬守卫||&7它醒了"
天罚:
- "lightning self"
- "delay 5t"
- "lightning self"
注意:找不到位置时什么都不做,也不会提示。想要真的造成伤害,搭配 explosion 或 MythicMobs 技能。
explosion 爆 炸
在某个位置制造一次爆炸:会伤害附近的玩家和怪物,但不会破坏方块、不会起火。
简写:explosion 位置 [威力]
完整写法:$explosion{location=落石点;power=3}
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / location(或 point) | 是 | 位置,写法见 位置的写法 |
第 2 个 / power | 否 | 威力,默认 2(苦力怕是 3,TNT 是 4) |
对象:不看 @对象。
踩到地雷:
type: enter
region: 雷区
script:
- "explosion self 2"
- "actionbar &c轰! @self"
落石:
auto-start: true
loop: true
timeline:
20:
- "actionbar &c头顶传来碎裂声…… @alive ~落石区"
- "delay 1"
- "explosion 落石区 2"
注意:爆炸会伤到副本里的怪物;找不到位置时什么都不做,也不会提示。
hologram 全息文字
别名:holo
在某个位置显示浮空文字,可以随变量自动更新,也可以让玩家点击。不需要 HolographicDisplays 等插件。
简写:
hologram create 名称 位置 文字hologram update 名称 [新文字]hologram remove 名称
DungeonPlus 写法:$hologram{name=祭坛字;operation=create;location=祭坛;text=&b冰之祭坛} @dungeon
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / operation | 是 | create(或 spawn、set)/ update / remove(或 delete) |
第 2 个 / name(或 id) | 是 | 这个全息文字的名称,之后 update、remove 和点击触发都用它 |
第 3 个 / location(或 point) | create 必填 | 位置(写法见 位置的写法)。文字会浮在这个位置上方约 1.6 格 |
create 第 4 个起 / update 第 3 个起的整段 / text | 否 | 文字,|| 换行。create 没写文字时显示名称本身;update 没写文字时只重新刷新一次 |
click(或 clickable) | 否 | true = 可以点击(简写接在文字后面:hologram create 名称 位置 文字 click=true) |
对象:不看 @对象,副本里的人都看得到。
script:
- "hologram create 祭坛字 祭坛 &b冰之祭坛||&7打倒前厅卫兵后才能启动"
前厅卫兵:
end:
- "hologram update 祭坛字 &b冰之祭坛||&e右键启动"
- "trigger enable 启动祭坛"
script:
# 有变量的文字每秒自动刷新
- "hologram create 碎片进度 碎片石碑 &7寒冰碎片 &b{v:碎片}&7/3||&8击杀冰霜流浪者收集"
- "hologram create 传送石 传送石 &e[ 点我传送回存档点 ] click=true"
点传送石:
type: hologram
id: 传送石
cooldown: 5
script:
- "teleport checkpoint @self"
注意:
- 文字里有
{…}、%…%或 DungeonPlus 的<…>占位符时会每秒自动刷新,不用一直update。%…%是对「建立这个全息文字的那一行」的触发者代入 的;在没有触发者的地方建立时不会代入,请改用{…}变量。 - 可以点击的条件:建立时写
click=true,或trigger.yml里有type: hologram、id是这个名称的触发组(这时会自动变成可点击)。 - 用同一个名称再
create一次,会先移除旧的再建新的。副本结束时会自动清掉。 - DungeonPlus 把全息内容写在
extension/hologram/*.yml;本插件直接把文字写在动作里,点击后要做的事写在trigger.yml。
particle 粒子
在某个位置喷一次粒子。
简写:particle 位置 [粒子] [数量]
完整写法:$particle{location=祭坛;type=SOUL_FIRE_FLAME;amount=40}
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / location(或 point、at) | 是 | 位置,写法见 位置的写法。粒子在这个位置上方 0.5 格、半径约 0.4 格的范围里散开 |
第 2 个 / type(或 particle) | 否 | 粒子名称,例如 FLAME、SOUL_FIRE_FLAME、END_ROD、HEART、CLOUD、SNOWFLAKE。不写或写错 = END_ROD |
第 3 个 / amount(或 count) | 否 | 数量,默认 20 |
对象:不看 @对象,副本里的人都看得到。
启动祭坛:
type: interact
point: 祭坛
once: true
script:
- "particle 祭坛 SOUL_FIRE_FLAME 60"
- "sound BLOCK_BEACON_ACTIVATE 1 1"
# 持续冒粒子:用会循环的任务组每秒喷一次
传送门光效:
auto-start: true
loop: true
timeline:
1:
- "particle 传送门 PORTAL 30"
注意:粒子是喷一次就结束;要持续的效果用循环的任务组。需要额外资料的粒子(例如有颜色的 DUST、方块碎屑 BLOCK)无法使用,会改成 END_ROD。
npc 生成 NPC
别名:anpc(DungeonPlus 旧名称)
生成一个不会动、不会受伤的 NPC,玩家右键它会触发 trigger.yml 里 type: npc 的触发组。内建功能,不需要 Citizens 或 Adyeshach。
简写:npc spawn ID [位置] [实体] [名字] / npc remove ID
DungeonPlus 写法:$npc{operation=spawn;id=长老;location=长老} @dungeon
| 参数 | 必填 | 说明 |
|---|---|---|
第 1 个 / operation | 是 | spawn(或 create)/ remove(或 delete、despawn) |
第 2 个 / id(或 name) | 是 | NPC 的 ID,触发组用 id: 对应它 |
第 3 个 / location(或 point) | 否 | 位置,写法见 位置的写法。不写 = 和 ID 同名的点 位(编辑模式放的 NPC 点) |
第 4 个 / entity(简写也可以 type) | 否 | 实体:原版写 minecraft:villager(默认)、minecraft:iron_golem……;也可以写 MythicMobs 怪物 ID,套上 ModelEngine / CloudModel 模型 |
第 5 个起的整段 / display(或 text) | 否 | 头上的名字。不写 = &e + ID |
glow | 否 | true = 发光(简写接在名字后面:glow=true) |
ai | 否 | true = 保留 AI(会走动、会看人)。默认 false(简写接在名字后面:ai=true) |
对象:不看 @对象。
script:
- "npc spawn 长老 长老 minecraft:villager &e古殿长老"
长老对话:
type: npc
id: 长老
cooldown: 3
script:
- "tell &e长老&7:「祭坛的封印只能撑一阵子,动作要快。」"
霜烬守卫:
end:
- "npc remove 长老"
- "$npc{operation=spawn;id=冰之精灵;location=王座;entity=FrostSpirit;display=&b冰之精灵;glow=true}"
注意:
- NPC 无敌、安静、不会被推动;同一个 ID 再
spawn一次会先移除旧的。副本结束时自动清掉。 - 简写的名字是最后一整段文字,后面可以接
glow=true、ai=true:npc spawn 冰之精灵 王座 FrostSpirit &b冰之精灵 glow=true。 - DungeonPlus 的
type=a/type=c(选 NPC 插件)不需要,写了会生成村民。