文档托管解决方案

14.方块 (三)

附加包教程: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": [{
          "事件方法": ...
        }]
      }]
    }]
  }]
}]

总结

本期我们学习了所有可用的方块事件方法。下期我们将学习方块状态和对应状态的赋值。

目录导航

更多文档