生成物品
本页面镜像自 BedrockWiki
根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。
在世界中生成物品(如同自然掉落)是常见的需求。本文将介绍多种实现方法,包括实体死亡、交互操作和通用方法。
/loot命令
目前最简单的方式是使用/loot
命令。格式如下:
/loot spawn ~ ~ ~ loot "entities/cow"
"minecraft:loot": {
"table": "loot_tables/entities/cow.json"
}
实体死亡
另一种常用方法是在实体死亡时掉落物品。通过为实体添加minecraft:loot
组件并关联对应的战利品表(如下例中的forium表)实现。
"minecraft:loot": {
"table": "loot_tables/entities/forium.json"
}
虚体死亡
我们可以为虚体添加minecraft:loot
组件,在生成时立即死亡来创建drop_entity
。通过/summon wiki:drop_entity
即可生成物品,适用于不介意死亡粒子/音效的场景。
行为包配置:
{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
"identifier": "wiki:drop_entity",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false
},
"components": {
// 使实体生成时立即死亡
"minecraft:health": {
"value": 0
},
"minecraft:loot": {
"table": "loot_tables/entities/some_loot.json"
}
}
}
}
交互操作
以下示例展示了名为"box"的实体在被交互时掉落物品。spawn_items
中的表关联需要掉落的战利品表。此例中break_box
事件会添加移除箱子的组件组。
注意:若未移除实体,可重复交互生成物品。如需保留实体,可为实体添加cooldown
参数限制交互间隔,或通过事件移除包含minecraft:interact
组件的组件组。
"minecraft:interact": {
"interactions": [
{
"on_interact": {
"filters": {
"test": "is_family",
"subject": "other",
"value": "player"
},
"event": "break_box",
"target": "self"
},
"swing": true,
"spawn_items": {
"table": "loot_tables/entities/box.json"
}
}
]
}
通用方法
此方法适用于各种场景:实体死亡、动画交互、常规掉落。特别适合需要静默生成物品(无死亡动画/音效/粒子)的情况。
需要配置以下要素:新实体的行为包、动画控制器、虚体资源(参考虚体教程)和战利品表。生成物品时召唤实体到目标位置。多个物品可通过组件组和生成事件实现。
行为配置
使用minecraft:behavior.drop_item_for
配合minecraft:navigation.walk
组件实现物品生成。注意time_of_day_range
参数需显式定义,max_dist
需根据需求调整。此方法可能导致实体位移,建议略微抬高生成位置或缩小碰撞箱。
"minecraft:navigation.walk": {},
"minecraft:behavior.drop_item_for": {
"priority": 1,
"max_dist": 16,
"loot_table": "loot_tables/entities/forium.json",
"time_of_day_range": [0.0, 1.0]
}
动画控制器
必须为实体关联此动画控制器以实现自动移除。也可使用时间轴动画实现。通过传送实体至虚空避免死亡效果。双重状态过渡确保实体不在生成瞬间被移除。
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.drop_items.die": {
"initial_state": "spawn",
"states": {
"spawn": {
"transitions": [
{
"delay": "1"
}
]
},
"delay": {
"transitions": [
{
"die": "1"
}
]
},
"die": {
"on_entry": ["/tp @s ~ -200 ~"]
}
}
}
}
}
结构方法
通过结构生成物品是另一种有趣的方式。使用structure_void
填充结构(避免加载时覆盖方块)并放入物品。此方法可保留物品数据(如耐久度),支持随时加载。