主题
障碍物配置
障碍物是可以动态创建和删除的方块组合,支持玩家触碰时触发脚本。
常见用途:
- 关卡大门(战斗开始时封锁,完成后开启)
- Boss房屏障(限制玩家进入)
- 陷阱区域(玩家触碰时造成伤害或效果)
- 安全区边界(防止玩家离开指定区域)
触发模式说明
障碍物支持 4 种触发模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
无触发 | 玩家接触时不执行任何脚本 | 纯装饰性障碍物 |
进入触发 | 玩家进入障碍物区域时触发一次 | 警告提示、击退效果 |
离开触发 | 玩家离开障碍物区域时触发一次 | 离开安全区警告 |
持续触发 | 玩家在障碍物区域内持续触发(根据冷却时间) | 持续伤害(岩浆、毒气) |
配置文件结构 (obstacles.yml)
yaml
obstacles:
return_gate: # 障碍物组名称(脚本中引用)
blocks: # 由编辑器记录的方块坐标与类型
- "15,64,20,BARRIER"
- "15,65,20,BARRIER"
- "16,64,20,BARRIER"
- "16,65,20,BARRIER"
auto_create: true # 副本开始时是否自动生成
# 创建时执行的脚本
on_create: |-
action.sound('@all', 'BLOCK_IRON_DOOR_CLOSE', 1.0, 1.0)
action.message('@all', '&c返回路径已封锁!')
# 删除时执行的脚本
on_delete: |-
action.sound('@all', 'BLOCK_IRON_DOOR_OPEN', 1.0, 1.0)
action.message('@all', '&a返回路径已开放!')
# 触发配置(可选)
trigger_mode: "进入触发" # 支持:无触发 / 进入触发 / 离开触发 / 持续触发
trigger_script: |-
action.damage('@trigger', 4.0)
action.message('@trigger', '&c能量场造成了伤害!')
trigger_cooldown: 2 # 触发冷却时间(秒)
trigger_once: false # 是否只触发一次说明:
blocks由编辑器自动记录;trigger_*字段可省略;配置支持中英文键名。
脚本调用示例
yaml
# scripts.yml
start:
script: |-
action.create_obstacle('return_gate')
complete: |-
action.delete_obstacle('return_gate')
action.message('@all', '&a大门已开启,继续前进!')常用命令:
action.create_obstacle('名称')- 创建障碍物(放置方块)action.delete_obstacle('名称')- 移除障碍物(恢复原方块)
示例1:无触发 - 纯装饰大门
适用于不需要触碰反馈的障碍物。
yaml
obstacles:
Boss房大门:
blocks:
- "20,64,0,IRON_BARS"
- "20,65,0,IRON_BARS"
- "20,66,0,IRON_BARS"
on_create: |-
action.message('@all', '&c&lBoss房大门已关闭!')
action.sound('@all', 'BLOCK_IRON_DOOR_CLOSE', 1.0, 0.8)
on_delete: |-
action.message('@all', '&a&lBoss房大门已打开!')
action.sound('@all', 'BLOCK_IRON_DOOR_OPEN', 1.0, 0.8)
auto_create: false # 由脚本控制创建
trigger_mode: "无触发"
trigger_script: []
trigger_cooldown: 0
trigger_once: false示例2:进入触发 - 能量屏障(带击退)
玩家触碰时触发一次,造成伤害并击退。
yaml
obstacles:
出生点屏障:
blocks:
- "-2,64,5,BARRIER"
- "-1,64,5,BARRIER"
- "0,64,5,BARRIER"
on_create: |-
action.message('@all', '&c能量屏障已激活!')
action.sound('@all', 'BLOCK_BEACON_ACTIVATE', 1.0, 1.2)
on_delete: |-
action.message('@all', '&a屏障已解除!')
action.sound('@all', 'ENTITY_GENERIC_EXPLODE', 1.0, 1.0)
auto_create: true
trigger_mode: "进入触发"
trigger_script: |-
action.sound('@trigger', 'ENTITY_PLAYER_HURT', 1.0, 0.8)
action.damage('@trigger', 3.0)
action.message('@trigger', '&c你触碰到了能量屏障!')
action.velocity('@trigger', 0.0, 0.5, -1.0) # 向后上方击退
trigger_cooldown: 2 # 2秒内不会重复触发
trigger_once: false # 可以多次触发示例3:持续触发 - 岩浆陷阱(持续伤害)
玩家在区域内会持续受到伤害。
yaml
obstacles:
岩浆陷阱:
blocks:
- "-10,63,-10,LAVA"
- "-11,63,-10,LAVA"
- "-10,63,-11,LAVA"
on_create: |-
action.message('@all', '&c&l陷阱激活!小心岩浆!')
action.sound('@all', 'BLOCK_LAVA_POP', 2.0, 0.8)
action.effect('LAVA', '-10,64,-10', 50, 2.0, 0.5)
on_delete: |-
action.message('@all', '&7岩浆已冷却')
action.sound('@all', 'BLOCK_FIRE_EXTINGUISH', 1.0, 1.0)
auto_create: false # 由交互点触发创建
trigger_mode: "持续触发"
trigger_script: |-
action.damage('@trigger', 4.0)
action.message('@trigger', '&c你正在岩浆中燃烧!')
action.sound('@trigger', 'ENTITY_PLAYER_HURT_ON_FIRE', 1.0, 1.0)
trigger_cooldown: 1 # 每1秒触发一次
trigger_once: false示例4:进入触发 - 边界警告(带击退)
防止玩家离开指定区域。
yaml
obstacles:
隐形边界:
blocks:
- "30,64,0,BARRIER"
- "30,65,0,BARRIER"
- "30,66,0,BARRIER"
on_create: []
on_delete: []
auto_create: true # 自动创建,始终存在
trigger_mode: "进入触发"
trigger_script: |-
action.message('@trigger', '&c这里已经到达边界了!')
action.sound('@trigger', 'BLOCK_NOTE_BLOCK_BASS', 1.0, 0.5)
action.velocity('@trigger', -0.5, 0.3, 0.0) # 向后击退
trigger_cooldown: 3 # 3秒冷却
trigger_once: false示例5:离开触发 - 安全区提示
玩家离开安全区时触发警告。
yaml
obstacles:
安全区:
blocks:
- "0,64,0,GLASS"
- "1,64,0,GLASS"
- "0,64,1,GLASS"
- "1,64,1,GLASS"
on_create: |-
action.message('@all', '&a安全区已激活')
on_delete: []
auto_create: true
trigger_mode: "离开触发"
trigger_script: |-
action.message('@trigger', '&e你离开了安全区!')
action.title('@trigger', '&c危险区域', '&7小心敌人')
action.sound('@trigger', 'BLOCK_NOTE_BLOCK_BELL', 1.0, 0.8)
action.apply_potion('@trigger', 'GLOWING', '10秒', 0) # 给予发光效果
trigger_cooldown: 5
trigger_once: true # 只触发一次配置字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
blocks | 列表 | ✅ | 方块列表,格式:"x,y,z,方块类型" |
auto_create | 布尔 | ✅ | 是否在地牢开始时自动创建 |
on_create | 脚本 | ❌ | 创建时执行的脚本(可选) |
on_delete | 脚本 | ❌ | 删除时执行的脚本(可选) |
trigger_mode | 字符串 | ❌ | 触发模式:"无触发"/"进入触发"/"离开触发"/"持续触发" |
trigger_script | 脚本 | ❌ | 触发时执行的脚本(trigger_mode不为"无触发"时使用) |
trigger_cooldown | 整数 | ❌ | 触发冷却时间(秒),默认0 |
trigger_once | 布尔 | ❌ | 是否只触发一次,默认false |
游戏内编辑
- 使用"障碍物编辑器"(编辑工具栏槽位4)
- Shift+右键 进入自由放置模式
- 放置需要的方块
- 右键 打开管理UI
- 保存障碍物配置
- 在配置文件中编辑脚本和触发设置
注意:
- 编辑器只记录方块位置,脚本需要在
obstacles.yml中手动编辑 - 保存后使用
/dga reload重载配置
