附加包教程:14.方块 (三)
[!WARNING] 版本弃用通知
此文档所述功能已在1.21.20.23
版本移除,请使用脚本系统替代实现
保留本文档仅用于历史版本附加包开发参考
前言
上上上期,我们学习了所有我已知的方块组件。这一期,我们将继续学习方块相关知识。这次,我们要学习方块事件。事件存储在与组件同级的地方。下面是一个例子。
{
"format_version": "1.19.40",
"minecraft:block": {
"description": {不要在意这些细节},
"components": {不要在意这些细节},
"events": {
"loot": {
"run_command": {
"command": [
"loot spawn ~~~ loot \"items/ancientcity_map\" minecraft:air"
]
},
"decrement_stack": {}
}
}
}
}
这其实和物品事件是大致相同的。
事件方法列表
add_mob_effect
增加状态效果。
"add_mob_effect": {
"amplifier": 0,
"duration": 1.0,
"effect": "poison",
"target": "self"
}
damage
对实体造成伤害。
"damage": {
"amount": 1,
"mob_amount": 1,
"target": {"test": "in_lava"},
"type": "lava"
}
decrement_stack
减少物品数量。
"decrement_stack": {
"ignore_game_mode": true
}
die
摧毁实体或使方块消失。
"die": {
"target": {
"test": "random_chance",
"value": 1
}
}
play_effect
播放粒子效果。
"play_effect": {
"delta": 0,
"effect": "evaporation",
"target": {"test": "random_chance", "value": "3"}
}
play_sound
播放声音。
"play_sound": {
"sound": "jumpscare",
"target": {"test": "random_chance", "value": "2"}
}
remove_mob_effect
移除状态效果。
"remove_mob_effect": {
"effect": "poison",
"target": "self"
}
run_command
运行命令。
"run_command": {
"command": "give @p emerald",
"target": "self"
}
set_block
放置方块。
"set_block": {
"block_type": "redstone_block"
}
set_block_at_pos
在指定位置放置方块。
"set_block_at_pos": {
"block_offset": [2, 1, -3],
"block_type": "bedrock"
}
set_block_state
设置方块状态。
"set_block_state": {
"example_boolean_state": true,
"example_string_state": "'red'"
}
spawn_loot
根据战利品表生成掉落物。
"spawn_loot": {
"table": "loot_tables/blocks/custom_block.json"
}
swing
实体摇晃动画。
"swing": {}
teleport
传送实体。
"teleport": {
"avoid_water": true,
"destination": [0.0, 0.0, 0.0],
"land_on_block": true,
"max_range": [8.0, 8.0, 8.0],
"target": {
"test": "has_damage",
"subject": "self",
"operator": "equals",
"value": "suffocating"
}
}
transform_item
物品转化。
"transform_item": {
"transform": "iron_sword"
}
trigger
触发事件。
"trigger": {
"event": "test_event",
"target": "self"
}
两个特殊结构
sequence
用于有序执行事件方法。
"sequence": [
{
"condition": "表达式a",
"target": "holder",
"事件方法a": ...
},
{
"condition": "表达式b",
"target": "holder",
"事件方法b": ...
}
]
randomize
用于随机执行事件方法。
"randomize": [
{
"weight": 1,
"事件方法c": ...
},
{
"weight": 3,
"事件方法d": ...
}
]
嵌套使用:
"sequence": [{
"randomize": [
{
"weight": 2,
"事件方法a": ...
},
{
"weight": 3,
"事件方法b": ...
}
]
}]
无限嵌套示例:
"sequence": [{
"sequence": [{
"sequence": [{
"sequence": [{
"sequence": [{
"事件方法": ...
}]
}]
}]
}]
}]
总结
本期我们学习了所有可用的方块事件方法。下期我们将学习方块状态和对应状态的赋值。