完整版BedrockWiki镜像!
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
---
|
||||
title: Spawning Items
|
||||
category: Tutorials
|
||||
title: 生成物品
|
||||
category: 巧思案例
|
||||
tags:
|
||||
- intermediate
|
||||
- 中级
|
||||
mentions:
|
||||
- SirLich
|
||||
- Joelant05
|
||||
@@ -13,44 +13,47 @@ mentions:
|
||||
- Xterionix
|
||||
---
|
||||
|
||||
It is fairly common to want to spawn an item in the world, as if dropped. This page will walk through how to accomplish this through various methods, including Entity Deaths, Interactions, and an all-purpose method.
|
||||
# 生成物品
|
||||
|
||||
## /loot
|
||||
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
|
||||
|
||||
The simplest method of spawning items to date is by using /loot. Formatted as such:
|
||||
在世界中生成物品(如同自然掉落)是常见的需求。本文将介绍多种实现方法,包括实体死亡、交互操作和通用方法。
|
||||
|
||||
## /loot命令
|
||||
|
||||
目前最简单的方式是使用`/loot`命令。格式如下:
|
||||
```
|
||||
/loot spawn ~ ~ ~ loot "entities/cow"
|
||||
```
|
||||
|
||||
<CodeHeader>BP/loot_tables/entities/cow.json</CodeHeader>
|
||||
|
||||
```json
|
||||
::: code-group
|
||||
```json [BP/loot_tables/entities/cow.json]
|
||||
"minecraft:loot": {
|
||||
"table": "loot_tables/entities/cow.json"
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## Entity Deaths
|
||||
## 实体死亡
|
||||
|
||||
Another simple method of spawning items - and generally the most common one - is dropping items upon an entity's death. This is done by adding the `minecraft:loot` component to the entity and linking it to the respective loot table (`forium` in the following example) containing items you wish to be dropped.
|
||||
另一种常用方法是在实体死亡时掉落物品。通过为实体添加`minecraft:loot`组件并关联对应的战利品表(如下例中的forium表)实现。
|
||||
|
||||
<CodeHeader>BP/entities/my_entity.json#components</CodeHeader>
|
||||
|
||||
```json
|
||||
::: code-group
|
||||
```json [BP/entities/my_entity.json#components]
|
||||
"minecraft:loot": {
|
||||
"table": "loot_tables/entities/forium.json"
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## Dummy Entity Deaths
|
||||
## 虚体死亡
|
||||
|
||||
We can use `minecraft:loot` on a [dummy entity](/entities/dummy-entities) that dies when we spawn it to create a `drop_entity`. This entity can be summoned like `/summon wiki:drop_entity` to spawn the items. This is useful for scenarios where death particles or sounds are not an issue.
|
||||
我们可以为[虚体](/wiki/entities/dummy-entities)添加`minecraft:loot`组件,在生成时立即死亡来创建`drop_entity`。通过`/summon wiki:drop_entity`即可生成物品,适用于不介意死亡粒子/音效的场景。
|
||||
|
||||
Behaviors:
|
||||
行为包配置:
|
||||
|
||||
<CodeHeader>BP/entities/my_entity.json</CodeHeader>
|
||||
|
||||
```json
|
||||
::: code-group
|
||||
```json [BP/entities/my_entity.json]
|
||||
{
|
||||
"format_version": "1.16.0",
|
||||
"minecraft:entity": {
|
||||
@@ -62,7 +65,7 @@ Behaviors:
|
||||
},
|
||||
|
||||
"components": {
|
||||
// Causes the entity to die when spawned
|
||||
// 使实体生成时立即死亡
|
||||
"minecraft:health": {
|
||||
"value": 0
|
||||
},
|
||||
@@ -73,16 +76,16 @@ Behaviors:
|
||||
}
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## Interactions
|
||||
## 交互操作
|
||||
|
||||
Here is an example of an entity called "box" which will drop its contents upon interaction. The table in `spawn_items` is linked to the loot table with the items desired to be dropped. In this particular case, the event `break_box` is also called when the entity is interacted with, adding a component group that removes the box.
|
||||
以下示例展示了名为"box"的实体在被交互时掉落物品。`spawn_items`中的表关联需要掉落的战利品表。此例中`break_box`事件会添加移除箱子的组件组。
|
||||
|
||||
Note that if the entity is not removed upon interaction, it can be interacted with again and will spawn the items. If the entity should persist after the interaction, the `cooldown` parameter may be added to the entity to prevent interaction for a specified amount of time. Alternatively, an event may be called to remove the component group containing this `minecraft:interact` component.
|
||||
注意:若未移除实体,可重复交互生成物品。如需保留实体,可为实体添加`cooldown`参数限制交互间隔,或通过事件移除包含`minecraft:interact`组件的组件组。
|
||||
|
||||
<CodeHeader>BP/entities/my_entity.json#components</CodeHeader>
|
||||
|
||||
```json
|
||||
::: code-group
|
||||
```json [BP/entities/my_entity.json#components]
|
||||
"minecraft:interact": {
|
||||
"interactions": [
|
||||
{
|
||||
@@ -103,22 +106,20 @@ Note that if the entity is not removed upon interaction, it can be interacted wi
|
||||
]
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## All-Purpose Method
|
||||
## 通用方法
|
||||
|
||||
This is a method that can be used for virtually any scenario: entity deaths, animation-based interactions, general item drops. This method was created in particular for dropping items without any death animation, sound, or particles.
|
||||
此方法适用于各种场景:实体死亡、动画交互、常规掉落。特别适合需要静默生成物品(无死亡动画/音效/粒子)的情况。
|
||||
|
||||
Several parts are required to set up the item dropping: a new entity with behavior, a corresponding animation controller, the resources for an invisible entity (refer to Dummy Entities tutorial), and a loot table. To spawn the items after it is set up, the entity is spawned where the items are to be dropped. If multiple items are desired, component groups with spawn events may be set up for each item.
|
||||
需要配置以下要素:新实体的行为包、动画控制器、虚体资源(参考虚体教程)和战利品表。生成物品时召唤实体到目标位置。多个物品可通过组件组和生成事件实现。
|
||||
|
||||
### Behavior
|
||||
### 行为配置
|
||||
|
||||
The items are spawned using the `minecraft:behavior.drop_item_for` component in conjunction with the `minecraft:navigation.walk` component, the latter being required for the former to work. Note that the `time_of_day_range` parameter in the following is not initialized to how it is defined below despite the documentation listing it as such, and this is necessary for proper function. The parameter `max_dist` must be increased to an appropriate value if the items are desired to be dropped when the player is very far away.
|
||||
使用`minecraft:behavior.drop_item_for`配合`minecraft:navigation.walk`组件实现物品生成。注意`time_of_day_range`参数需显式定义,`max_dist`需根据需求调整。此方法可能导致实体位移,建议略微抬高生成位置或缩小碰撞箱。
|
||||
|
||||
This behavior appears to push the mob back when the items are dropped. Thus it is essential to summon the entity slightly above the ground (or teleport it up in the following animation controller) to avoid the items spawning a few blocks away from the spawn location. Decreasing the size of the collision box may also help.
|
||||
|
||||
<CodeHeader>BP/entities/my_entity.json#components</CodeHeader>
|
||||
|
||||
```json
|
||||
::: code-group
|
||||
```json [BP/entities/my_entity.json#components]
|
||||
"minecraft:navigation.walk": {},
|
||||
"minecraft:behavior.drop_item_for": {
|
||||
"priority": 1,
|
||||
@@ -127,16 +128,14 @@ This behavior appears to push the mob back when the items are dropped. Thus it i
|
||||
"time_of_day_range": [0.0, 1.0]
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
### Animation Controller
|
||||
### 动画控制器
|
||||
|
||||
**The following animation controller must be linked to the entity** to remove it upon summoning. Alternatively, an animation with a timeline can be used. If you are unsure how to do this, refer to the Entity Commands tutorial.
|
||||
**必须为实体关联此动画控制器**以实现自动移除。也可使用时间轴动画实现。通过传送实体至虚空避免死亡效果。双重状态过渡确保实体不在生成瞬间被移除。
|
||||
|
||||
Teleporting the entity into the void causes no death animation, sound, or particles. Two transitions are used to ensure it is not killed in the same tick it spawns.
|
||||
|
||||
<CodeHeader>BP/animation_controllers/my_entity.ac.json</CodeHeader>
|
||||
|
||||
```json
|
||||
::: code-group
|
||||
```json [BP/animation_controllers/my_entity.ac.json]
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"animation_controllers": {
|
||||
@@ -165,12 +164,10 @@ Teleporting the entity into the void causes no death animation, sound, or partic
|
||||
}
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## Structure Method
|
||||
## 结构方法
|
||||
|
||||
There is also one interesting method of spawning items - via structure.
|
||||
You can fill a structure with `structure_void` (so air doesn't replace blocks when structure loaded) and drop an item into it.
|
||||
This method allows us to keep item data (such as durability).
|
||||
Then you can load this structure whenever and wherever you want.
|
||||
通过结构生成物品是另一种有趣的方式。使用`structure_void`填充结构(避免加载时覆盖方块)并放入物品。此方法可保留物品数据(如耐久度),支持随时加载。
|
||||
|
||||

|
||||

|
||||
Reference in New Issue
Block a user