Skip to content

方块事件与触发器

本页面镜像自
BedrockWiki

根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。

格式与最低引擎版本 1.20.30

创建自定义方块时使用最新格式版本可获得新功能和改进。本wiki旨在分享关于自定义方块的最新信息,当前目标格式版本为1.20.30

实验性功能

方块事件需要启用假日创作者功能实验性玩法。

警告

方块事件已被弃用,将在未来更新中移除。除非必要,否则不建议使用,因为在移除后你需要将所有功能迁移至脚本系统。

定义事件

方块事件允许你在满足特定条件时操控游戏世界,事件定义在minecraft:blockevents子项中。在事件内部,你可以通过配置事件响应来设定触发事件时执行的操作。

事件触发器会在适当条件下运行事件,执行所有关联的事件响应。

json
{
  "format_version": "1.20.30",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:loot_dropper"
    },
    "components": {
      "minecraft:on_step_on": {
        "event": "wiki:drop_loot"
      }
    },
    "events": {
      "wiki:drop_loot": {
        "spawn_loot": {
          "table": "loot_tables/blocks/my_loot_table.json"
        }
      }
    }
  }
}

此示例在实体踏上方块时生成战利品

序列响应

序列允许你多次运行相同响应,或在满足条件时触发特定操作。

所有事件响应都应包含在序列中。

json
"wiki:my_sequence": {
  "sequence": [
    {
      "set_block_state": {
        "wiki:my_state": true
      }
    },
    {
      "condition": "q.block_state('wiki:my_state')", // 可选
      "trigger": {
        "event": "wiki:my_entity_event",
        "target": "other"
      }
    }
  ]
}

随机响应

随机执行事件响应。

json
"wiki:random_action": {
  "randomize": [
    {
      "weight": 1, // 1/4概率
      "set_block_state": {
        "wiki:my_state": true
      }
    },
    {
      "weight": 3, // 3/4概率
      "trigger": {
        "event": "wiki:my_entity_event",
        "target": "other"
      }
    }
  ]
}

事件响应

添加生物效果

为指定目标添加生物效果。

json
"wiki:effect_event": {
  "add_mob_effect": {
    "effect": "poison",
    "target": "other",
    "duration": 8,
    "amplifier": 3
  }
}

造成伤害

对目标造成指定类型和数值的伤害。

json
"wiki:damage_event": {
  "damage": {
    "type": "magic",
    "target": "other",
    "amount": 4
  }
}

减少堆叠

移除玩家当前手持物品堆叠中的一个物品。

json
"wiki:remove_one": {
  "decrement_stack": {
    "ignore_game_mode": true // 可选 - 是否影响创造模式玩家(默认为false)
  }
}

摧毁

摧毁指定目标,若目标为self则方块直接消失且不生成战利品或效果。

json
"wiki:destroy": {
  "die": {
    "target": "self"
  }
}

播放特效

在目标位置播放粒子特效。

支持的effect值未知。可通过run_command配合playsound命令实现类似效果。

json
"wiki:particle_effect": {
  "play_effect": {
    "effect": "???",
    "target": "self"
  }
}

播放音效

在目标位置播放音效。

支持RP/sounds.json中大多数原版独立音效事件ID,但自定义音效条目不可用。

json
"wiki:play_sound": {
  "play_sound": {
    "sound": "beacon.power",
    "target": "self"
  }
}

移除生物效果

移除目标的指定生物效果。

json
"wiki:remove_effect_event": {
  "remove_mob_effect": {
    "effect": "poison",
    "target": "other"
  }
}

执行命令

对目标执行命令。

使用数组可执行多个命令。

json
"wiki:execute_event": {
  "run_command": {
    "target": "self", // 可选 - 默认为'self'(目标为方块)
    "command": "summon pig"
  }
}

或...

json
"wiki:execute_event": {
  "run_command": {
    "target": "self", // 可选 - 默认为'self'(目标为方块)
    "command": [
      "summon pig",
      "say 大家欢迎小猪!"
    ]
  }
}

设置方块

用指定方块替换当前方块。

json
"wiki:place_block": {
  "set_block": {
      "block_type": "minecraft:grass"
  }
}

或...

json
"wiki:place_block": {
  "set_block": {
      "block_type": {
          "name": "minecraft:trapdoor",
          "states": {
              "direction": 2,
              "open_bit": true
          }
      }
  }
}

在指定位置设置方块

在方块相对位置生成指定方块。

json
"wiki:generate_stone_above": {
  "set_block_at_pos": {
    "block_type": "minecraft:stone",
    "block_offset": [0, 1, 0]
  }
}

或...

json
"wiki:generate_upper_door_above": {
  "set_block_at_pos": {
      "block_type": {
          "name": "minecraft:wooden_door",
          "states": {
              "upper_block_bit": true
          }
      },
      "block_offset": [0, 1, 0]
  }
}

设置方块状态

设置方块状态值(可设置为Molang表达式字符串的返回值)。

WARNING

字符串值会被解析为Molang表达式。因此,要设置字符串状态时,必须用'包裹值(见示例)。

json
"wiki:change_state": {
  "set_block_state": {
    "wiki:boolean_state_example": false,
    "wiki:integer_state_example": "q.block_state('wiki:integer_state_example') + 1",
    "wiki:string_state_example": "'red'"
  }
}

生成战利品

生成战利品表内容。

json
"wiki:drop_loot": {
  "spawn_loot": {
    "table": "loot_tables/blocks/my_loot_table.json"
  }
}

挥动

使关联实体执行挥动动作。

json
"wiki:swing_arm": {
  "swing": {}
}

传送

将目标随机传送至目标点周围。

json
"wiki:go_away": {
  "teleport": {
    "target": "other", // 被传送实体
    "avoid_water": true, // 避免传入水中
    "land_on_block": true, // 将目标放置在方块上
    "destination": [0, 0, 0], // 目标原点
    "max_range": [5, 6, 7] // 相对原点的最大偏移范围
  }
}

转换物品

替换目标的当前手持物品。

json
"wiki:replace": {
  "transform_item": {
    "transform": "iron_sword"
  }
}

触发事件

触发指定目标的事件。

json
"wiki:trigger_crack": {
  "trigger": {
    "event": "wiki:crack",
    "target": "self"
  }
}

事件触发器

事件触发器通过组件定义,可通过permutations动态添加、修改或移除。

跌落触发

当实体跌落在方块上时触发事件。

注意:需要minecraft:collision_box组件的Y轴高度≥4。

json
"minecraft:on_fall_on": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')", // 可选
  "min_fall_distance": 5
}

交互触发

当玩家与方块交互时触发事件。

json
"minecraft:on_interact": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')" // 可选
}

放置触发

当方块被放置时触发事件。

json
"minecraft:on_placed": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')" // 可选
}

玩家破坏触发

当玩家通过挖掘破坏方块时触发事件(创造模式不触发)。

json
"minecraft:on_player_destroyed": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')" // 可选
}

玩家放置时触发

当玩家放置方块时触发事件。

json
"minecraft:on_player_placing": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')" // 可选
}

离开触发

当实体离开方块时触发事件。

注意:需要minecraft:collision_box组件的Y轴高度≥4。

json
"minecraft:on_step_off": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')" // 可选
}

踏入触发

当实体踏上方块时触发事件。

注意:需要minecraft:collision_box组件的Y轴高度≥4。

json
"minecraft:on_step_on": {
  "event": "wiki:example_event",
  "target": "self", // 可选 - 默认为'self'(目标为方块)
  "condition": "q.block_state('wiki:boolean_state_example')" // 可选
}

队列计时

interval_range范围内随机间隔触发事件。

json
"minecraft:queued_ticking": {
  "looping": true,
  "interval_range": [20, 20], // 两个游戏刻数值,随机决定延迟时间
  "on_tick": {
    "event": "wiki:example_event",
    "target": "self", // 可选 - 默认为'self'(目标为方块)
    "condition": "q.block_state('wiki:boolean_state_example')" // 可选
  }
}

随机Tick

在每次随机刻触发事件(如作物随机生长机制)。

json
"minecraft:random_ticking": {
  "on_tick": {
    "event": "wiki:example_event",
    "target": "self", // 可选 - 默认为'self'(目标为方块)
    "condition": "q.block_state('wiki:boolean_state_example')" // 可选
  }
}