Skip to content

障碍物配置

障碍物是可以动态创建和删除的方块组合,支持玩家触碰时触发脚本。

常见用途:

  • 关卡大门(战斗开始时封锁,完成后开启)
  • 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

游戏内编辑

  1. 使用"障碍物编辑器"(编辑工具栏槽位4)
  2. Shift+右键 进入自由放置模式
  3. 放置需要的方块
  4. 右键 打开管理UI
  5. 保存障碍物配置
  6. 在配置文件中编辑脚本和触发设置

注意

  • 编辑器只记录方块位置,脚本需要在 obstacles.yml 中手动编辑
  • 保存后使用 /dga reload 重载配置

基于 MIT 许可发布