生成已驯服的实体
scripting
intermediate
在本教程中,您将学习如何通过脚本、在目标玩家身上触发事件,或投掷撞击后转化为驯服实体的物品来生成预驯服的实体。
脚本方法
此示例将在每个玩家生成(或重生)时,使用 EntityTameableComponent.tame 方法为其生成一只已驯服的狼。
js
import { world } from "@minecraft/server";
world.afterEvents.playerSpawn.subscribe(({ player }) => {
const wolf = player.dimension.spawnEntity("minecraft:wolf", player.location);
// 将狼驯服给玩家
const tameable = wolf.getComponent("minecraft:tameable");
tameable.tame(player);
});事件方法
不推荐
此方法使用了运行时标识符和玩家实体的修改,可能导致兼容性问题。 推荐使用脚本方法,因为它没有这些缺点。
驯服实体生成器
我们需要创建一个简单的自定义实体,该实体将具有 minecraft:arrow 运行时标识符(其他投射物运行时标识符也可用),一个空的投射物组件,以及一个用于转化为已驯服狼的变形组件。
BP/entities/pretamed_wolf.json
json
{
"format_version": "1.21.0",
"minecraft:entity": {
"description": {
"identifier": "wiki:pretamed_wolf",
"runtime_identifier": "minecraft:arrow",
"is_spawnable": false,
"is_summonable": true,
"is_experimental": false
},
"components": {
"minecraft:projectile": {},
"minecraft:transformation": {
"into": "minecraft:wolf<minecraft:on_tame>",
"keep_owner": true
}
}
}
}您也可以通过将 is_spawnable 设为 true,使用 wiki:pretamed_wolf 生成蛋来生成它!
自定义宠物
如果您想使用此方法生成自定义实体而非狼,需要确保该实体具有 minecraft:is_tamed 组件,否则某些驯服实体的行为可能无法正常运作。
玩家事件
这里,我们需要复制玩家的行为文件并稍作修改。我们将添加一个简单的事件,该事件会添加一个组件组来生成我们的中间实体。
您可以在 Mojang 提供的原版行为包中找到 BP 玩家实体文件 此处。
BP/entities/player.json
json
{
"format_version": "1.21.0",
"minecraft:entity": {
"description": {
"identifier": "minecraft:player",
"is_spawnable": false,
"is_summonable": false,
"is_experimental": false
},
"component_groups": {
...
"wiki:spawn_tamed_wolf": {
"minecraft:spawn_entity": {
"entities": {
"min_wait_time": 0,
"max_wait_time": 0,
"spawn_entity": "wiki:pretamed_wolf",
"single_use": true,
"num_to_spawn": 1
}
}
}
},
...
"events": {
"wiki:spawn_tamed_wolf": {
"add": {
"component_groups": ["wiki:spawn_tamed_wolf"]
}
}
}
}
}投射物命中时生成
为了让驯服的狼仅在投射物命中时生成,我们首先需要创建一个可投掷物品:
BP/items/throwable_pretamed_wolf.json
json
{
"format_version": "1.21.50",
"minecraft:item": {
"description": {
"identifier": "wiki:throwable_pretamed_wolf"
},
"components": {
"minecraft:icon": "wiki:my_icon",
"minecraft:throwable": {
"do_swing_animation": true
},
"minecraft:projectile": {
"projectile_entity": "wiki:pretamed_wolf"
}
}
}
}我们还需要调整自定义投射物实体,使其不会在生成时立即转化。
BP/entities/pretamed_wolf.json
json
{
"format_version": "1.21.0",
"minecraft:entity": {
"description": {
"identifier": "wiki:pretamed_wolf",
"runtime_identifier": "minecraft:arrow",
"is_spawnable": false,
"is_summonable": true,
"is_experimental": false
},
"component_groups": {
"wiki:transform_to_entity": {
"minecraft:transformation": {
"into": "minecraft:wolf<minecraft:on_tame>",
"keep_owner": true
}
}
},
"components": {
"minecraft:projectile": {
"on_hit": {
"impact_damage": {
"damage": 0
},
"stick_in_ground": {},
"definition_event": {
"event_trigger": {
"event": "wiki:on_hit"
}
}
}
}
},
"events": {
"wiki:on_hit": {
"add": {
"component_groups": ["wiki:transform_to_entity"]
}
}
}
}
}特别感谢 Zarkmend ZAN 的贡献 😃






