方块事件与触发器
本页面镜像自 BedrockWiki
根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。
格式与最低引擎版本 1.20.30
创建自定义方块时使用最新格式版本可获得新功能和改进。本wiki旨在分享关于自定义方块的最新信息,当前目标格式版本为1.20.30
。
实验性功能
方块事件需要启用假日创作者功能
实验性玩法。
警告
方块事件已被弃用,将在未来更新中移除。除非必要,否则不建议使用,因为在移除后你需要将所有功能迁移至脚本系统。
定义事件
方块事件允许你在满足特定条件时操控游戏世界,事件定义在minecraft:block
的events
子项中。在事件内部,你可以通过配置事件响应来设定触发事件时执行的操作。
事件触发器会在适当条件下运行事件,执行所有关联的事件响应。
{
"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"
}
}
}
}
}
此示例在实体踏上方块时生成战利品
序列响应
序列允许你多次运行相同响应,或在满足条件时触发特定操作。
所有事件响应都应包含在序列中。
"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"
}
}
]
}
随机响应
随机执行事件响应。
"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"
}
}
]
}
事件响应
add_mob_effect
damage
decrement_stack
die
play_effect
play_sound
remove_mob_effect
run_command
set_block
set_block_at_pos
set_block_state
spawn_loot
swing
teleport
transform_item
trigger
添加生物效果
为指定目标添加生物效果。
"wiki:effect_event": {
"add_mob_effect": {
"effect": "poison",
"target": "other",
"duration": 8,
"amplifier": 3
}
}
造成伤害
对目标造成指定类型和数值的伤害。
"wiki:damage_event": {
"damage": {
"type": "magic",
"target": "other",
"amount": 4
}
}
减少堆叠
移除玩家当前手持物品堆叠中的一个物品。
"wiki:remove_one": {
"decrement_stack": {
"ignore_game_mode": true // 可选 - 是否影响创造模式玩家(默认为false)
}
}
摧毁
摧毁指定目标,若目标为self
则方块直接消失且不生成战利品或效果。
"wiki:destroy": {
"die": {
"target": "self"
}
}
播放特效
在目标位置播放粒子特效。
支持的effect
值未知。可通过run_command
配合playsound
命令实现类似效果。
"wiki:particle_effect": {
"play_effect": {
"effect": "???",
"target": "self"
}
}
播放音效
在目标位置播放音效。
支持RP/sounds.json
中大多数原版独立音效事件ID,但自定义音效条目不可用。
"wiki:play_sound": {
"play_sound": {
"sound": "beacon.power",
"target": "self"
}
}
移除生物效果
移除目标的指定生物效果。
"wiki:remove_effect_event": {
"remove_mob_effect": {
"effect": "poison",
"target": "other"
}
}
执行命令
对目标执行命令。
使用数组可执行多个命令。
"wiki:execute_event": {
"run_command": {
"target": "self", // 可选 - 默认为'self'(目标为方块)
"command": "summon pig"
}
}
或...
"wiki:execute_event": {
"run_command": {
"target": "self", // 可选 - 默认为'self'(目标为方块)
"command": [
"summon pig",
"say 大家欢迎小猪!"
]
}
}
设置方块
用指定方块替换当前方块。
"wiki:place_block": {
"set_block": {
"block_type": "minecraft:grass"
}
}
或...
"wiki:place_block": {
"set_block": {
"block_type": {
"name": "minecraft:trapdoor",
"states": {
"direction": 2,
"open_bit": true
}
}
}
}
在指定位置设置方块
在方块相对位置生成指定方块。
"wiki:generate_stone_above": {
"set_block_at_pos": {
"block_type": "minecraft:stone",
"block_offset": [0, 1, 0]
}
}
或...
"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表达式。因此,要设置字符串状态时,必须用'
包裹值(见示例)。
"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'"
}
}
生成战利品
生成战利品表内容。
"wiki:drop_loot": {
"spawn_loot": {
"table": "loot_tables/blocks/my_loot_table.json"
}
}
挥动
使关联实体执行挥动动作。
"wiki:swing_arm": {
"swing": {}
}
传送
将目标随机传送至目标点周围。
"wiki:go_away": {
"teleport": {
"target": "other", // 被传送实体
"avoid_water": true, // 避免传入水中
"land_on_block": true, // 将目标放置在方块上
"destination": [0, 0, 0], // 目标原点
"max_range": [5, 6, 7] // 相对原点的最大偏移范围
}
}
转换物品
替换目标的当前手持物品。
"wiki:replace": {
"transform_item": {
"transform": "iron_sword"
}
}
触发事件
触发指定目标的事件。
"wiki:trigger_crack": {
"trigger": {
"event": "wiki:crack",
"target": "self"
}
}
事件触发器
事件触发器通过组件定义,可通过permutations动态添加、修改或移除。
minecraft:on_fall_on
minecraft:on_interact
minecraft:on_placed
minecraft:on_player_destroyed
minecraft:on_player_placing
minecraft:on_step_off
minecraft:on_step_on
minecraft:queued_ticking
minecraft:random_ticking
跌落触发
当实体跌落在方块上时触发事件。
注意:需要minecraft:collision_box
组件的Y轴高度≥4。
"minecraft:on_fall_on": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')", // 可选
"min_fall_distance": 5
}
交互触发
当玩家与方块交互时触发事件。
"minecraft:on_interact": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
放置触发
当方块被放置时触发事件。
"minecraft:on_placed": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
玩家破坏触发
当玩家通过挖掘破坏方块时触发事件(创造模式不触发)。
"minecraft:on_player_destroyed": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
玩家放置时触发
当玩家放置方块时触发事件。
"minecraft:on_player_placing": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
离开触发
当实体离开方块时触发事件。
注意:需要minecraft:collision_box
组件的Y轴高度≥4。
"minecraft:on_step_off": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
踏入触发
当实体踏上方块时触发事件。
注意:需要minecraft:collision_box
组件的Y轴高度≥4。
"minecraft:on_step_on": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
队列计时
在interval_range
范围内随机间隔触发事件。
"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
在每次随机刻触发事件(如作物随机生长机制)。
"minecraft:random_ticking": {
"on_tick": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
}