行为包简介
在为《我的世界》基岩版构建您的第一个附加内容之前,您需要创建一个包来保存您的自定义内容。 创作者可以制作两种类型的包:资源包和行为包。 行为包是一个文件夹结构,其中所包含的文件将驱动实体行为、战利品掉落、生成规则、物品、配方和交易表。 本教程介绍了如何创建行为包以及如何向游戏中的奶牛实体添加行为以使其具有攻击性。
在本教程中,您将学习以下内容:
- 可以在《我的世界》基岩版中更改实体的行为。
- 如何将行为包链接到资源包。
要求
在开始本教程之前,建议完成以下内容。
构建行为包
行为包包含(像您这样的)创作者用来添加、删除或更改《我的世界》中实体的游戏行为的文件。 实体的行为文件使每个实体可以执行某些操作,例如鸡如何跟随拿着种子的玩家。
为了让《我的世界》查找和使用您的行为文件,您必须以特定结构设置文件夹和文件。 本教程将指导您创建此文件夹和文件结构。
创建一个文件夹
在本节中,您将创建一个名为 My_BEHAVIOR_Pack 的文件夹。 不过,也可以是别的名称。 事实上,可以为这个文件夹任意命名,但其他文件夹的命名必须遵循本教程,以便《我的世界》知道在何处查找。
- 打开您的 com.mojang 文件夹。
- 打开 development_behavior_packs 文件夹。
- 在 development_behavior_packs 文件夹中,创建一个新文件夹并将其命名为 My_BEHAVIOR_Pack。
- 打开 My_BEHAVIOR_Pack 文件夹。
创建清单文件
要将行为包加载到《我的世界》中,您需要创建一个清单文件。 行为包清单文件类似于为资源包创建的文件,但它有两个附加部分。
- modules:定义包,以便《我的世界》知道如何将其应用到世界上。 行为包使用数据类型。
- dependencies - 在行为包和资源包之间创建链接,以向《我的世界》添加自定义材质和视觉效果。
- 在 My_BEHAVIOR_Pack 文件夹中创建一个新文档并将其命名为 manifest.json。
- 您需要将文件扩展名从 .txt 更改为 .json。 如果您的资源管理器窗口没有显示文件扩展名,可在“查看”选项卡下启用“文件扩展名”。
- 双击 manifest.json 以在文本编辑器中打开。
- 将以下代码复制并粘贴到您的文件中。
{
"format_version": 2,
"header": {
"description": "My attack cow behavior pack Add-On!",
"name": "My Behavior Pack",
"uuid":"",
"version": [1, 0, 0],
"min_engine_version": [1, 16, 0]
},
"modules":
[
{
"description": "My First Add-On!",
"type": "data",
"uuid": "",
"version": [1, 0, 0]
}
],
"dependencies": [
{
"uuid":"UUID from the header section of manifest.json in My_RESOURCE_Pack",
"version":[1,0,0]
}
]
}
输入 UUID
与资源包清单文件类似,您需要为清单文件的 header 和 module 部分生成两个不同的 UUID。 您可以使用在线生成器(例如 https://www.uuidgenerator.net/)获取 UUID。
- 将 UUID 复制并粘贴到 header 部分。 UUID 需要粘贴在引号 ("") 之间的
"uuid"
字段中才能正确读取。 - 刷新网页以生成新的 UUID 以在 modules 部分使用。
- 将新的 UUID 复制并粘贴到 modules 部分
"uuid"
字段中的引号之间。
创建依赖
行为包的 manifest.json 文件中的第三部分称为“dependencies”,用于在资源包和行为包之间创建链接。 当资源包的 manifest.json 文件的 header 部分中的 UUID 与行为包的 manifest.json 文件的 dependencies 部分中的 UUID 相同时,将创建此链接。 您无需拥有资源包即可使用行为包,也无需拥有行为包即可使用资源包。 如果两者都有,您可以使用此解决方案将它们链接在一起,使得在将行为包加载到世界时,它会自动加载并激活链接的资源包。
- 打开位于 development_resource_packs 文件夹中 My_RESOURCE_Pack 文件夹中的 manifest.json 文件。
- 从资源包 manifest.json 文件的 header 部分复制 UUID。
- 转到位于 development_behavior_packs 文件夹中的 *My_BEHAVIOR_Pack 文件夹中的 manifest.json 文件。
- 将 UUID 粘贴到 dependencies 部分的“uuid”字段中。 确保引号之间的所有内容完全匹配。
- 保存行为包 manifest.json 文件。
创建 Entities 文件夹并添加一个 Cow(一头奶牛)
每个实体的行为都在其 JSON 文件中定义,该文件位于使《我的世界》工作的代码中。 您将创建一个《我的世界》将使用的新奶牛行为文件,而不是通常的“原版”文件。
- 在 My_BEHAVIOR_Pack 文件夹中,创建一个文件夹并将其命名为 entities。
- 在 entities 文件夹中创建一个文本文件并将其命名为 cow.json。
- 将以下代码复制并粘贴到您的 cow.json 文件中。 保存文件后,您就可以开始了!
备注
这是整个编辑后的 cow.json 文件。 它很大,因为奶牛功能丰富!
{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
"identifier": "minecraft:cow",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false
},
"component_groups": {
"minecraft:cow_baby": {
"minecraft:is_baby": {},
"minecraft:scale": {
"value": 0.5
},
"minecraft:ageable": {
"duration": 1200,
"feed_items": "wheat",
"grow_up": {
"event": "minecraft:ageable_grow_up",
"target": "self"
}
},
"minecraft:behavior.follow_parent": {
"priority": 6,
"speed_multiplier": 1.1
}
},
"minecraft:cow_adult": {
"minecraft:experience_reward": {
"on_bred": "Math.Random(1,7)",
"on_death": "query.last_hit_by_player ? Math.Random(1,3) : 0"
},
"minecraft:loot": {
"table": "loot_tables/entities/cow.json"
},
"minecraft:behavior.breed": {
"priority": 3,
"speed_multiplier": 1.0
},
"minecraft:breedable": {
"require_tame": false,
"breed_items": "wheat",
"breeds_with": {
"mate_type": "minecraft:cow",
"baby_type": "minecraft:cow",
"breed_event": {
"event": "minecraft:entity_born",
"target": "baby"
}
}
},
"minecraft:interact": {
"interactions": [
{
"on_interact": {
"filters": {
"all_of": [
{
"test": "is_family",
"subject": "other",
"value": "player"
},
{
"test": "has_equipment",
"domain": "hand",
"subject": "other",
"value": "bucket:0"
}
]
}
},
"use_item": true,
"transform_to_item": "bucket:1",
"play_sounds": "milk",
"interact_text": "action.interact.milk"
}
]
}
}
},
"components": {
"minecraft:is_hidden_when_invisible": {},
"minecraft:type_family": {
"family": [
"cow",
"mob"
]
},
"minecraft:breathable": {
"total_supply": 15,
"suffocate_time": 0
},
"minecraft:navigation.walk": {
"can_path_over_water": true,
"avoid_water": true,
"avoid_damage_blocks": true
},
"minecraft:movement.basic": {},
"minecraft:jump.static": {},
"minecraft:can_climb": {},
"minecraft:collision_box": {
"width": 0.9,
"height": 1.3
},
"minecraft:nameable": {},
"minecraft:health": {
"value": 10,
"max": 10
},
"minecraft:hurt_on_condition": {
"damage_conditions": [
{
"filters": {
"test": "in_lava",
"subject": "self",
"operator": "==",
"value": true
},
"cause": "lava",
"damage_per_tick": 4
}
]
},
"minecraft:movement": {
"value": 0.25
},
"minecraft:despawn": {
"despawn_from_distance": {}
},
"minecraft:behavior.float": {
"priority": 0
},
"minecraft:behavior.panic": {
"priority": 1,
"speed_multiplier": 1.25
},
"minecraft:behavior.mount_pathing": {
"priority": 2,
"speed_multiplier": 1.5,
"target_dist": 0.0,
"track_target": true
},
"minecraft:behavior.breed": {
"priority": 3,
"speed_multiplier": 1.0
},
"minecraft:behavior.tempt": {
"priority": 4,
"speed_multiplier": 1.25,
"items": [
"wheat"
]
},
"minecraft:behavior.follow_parent": {
"priority": 5,
"speed_multiplier": 1.1
},
"minecraft:behavior.random_stroll": {
"priority": 6,
"speed_multiplier": 0.8
},
"minecraft:behavior.look_at_player": {
"priority": 7,
"look_distance": 6.0,
"probability": 0.02
},
"minecraft:behavior.random_look_around": {
"priority": 9
},
"minecraft:leashable": {
"soft_distance": 4.0,
"hard_distance": 6.0,
"max_distance": 10.0
},
"minecraft:balloonable": {},
"minecraft:rideable": {
"seat_count": 1,
"family_types": [
"zombie"
],
"seats": {
"position": [
0.0,
1.105,
0.0
]
}
},
"minecraft:physics": {},
"minecraft:pushable": {
"is_pushable": true,
"is_pushable_by_piston": true
},
"minecraft:conditional_bandwidth_optimization": {},
"minecraft:behavior.nearest_attackable_target": {
"priority": 2,
"must_see": true,
"reselect_targets": true,
"within_radius": 25.0,
"entity_types": [
{
"filters": {
"test": "is_family",
"subject": "other",
"value": "player"
},
"max_dist": 32
}
]
},
"minecraft:behavior.melee_attack": {
"priority": 3
},
"minecraft:attack": {
"damage": 3
}
},
"events": {
"minecraft:entity_spawned": {
"randomize": [
{
"weight": 95,
"trigger": "minecraft:spawn_adult"
},
{
"weight": 5,
"add": {
"component_groups": [
"minecraft:cow_baby"
]
}
}
]
},
"minecraft:entity_born": {
"add": {
"component_groups": [
"minecraft:cow_baby"
]
}
},
"minecraft:entity_transformed": {
"remove": {},
"add": {
"component_groups": [
"minecraft:cow_adult"
]
}
},
"minecraft:ageable_grow_up": {
"remove": {
"component_groups": [
"minecraft:cow_baby"
]
},
"add": {
"component_groups": [
"minecraft:cow_adult"
]
}
},
"minecraft:spawn_adult": {
"add": {
"component_groups": [
"minecraft:cow_adult"
]
}
}
}
}
}
对包进行测试
现在,行为包既有清单文件又有奶牛实体,该启动《我的世界》并测试您的新附加内容了。 如资源包教程中所述,包堆叠也适用于行为包。 这意味着在加载内容时,首先加载原版内容,然后是任何附加内容。 因为所有奶牛都由 cow.json 行为文件控制,所以在您的世界中生成的所有奶牛都将具有新的行为。
- 启动《我的世界》并选择播放。
- 选择创建新的世界。
- 在设置下,向下滚动到附加内容部分。
- 单击行为包以查看所有可用的包。
- 单击我的包下拉菜单将其打开。
- 选择 My BEHAVIOR Pack 并单击激活以将行为包添加到世界。
- 单击创建以创建您的世界。
- 找到一头奶牛。
故障排除
行为包问题? 故障排除是任何开发过程的常规部分。 下面是一些开始对行为包进行故障排除的情形。
行为包不出现在《我的世界》中
如果您的资源包没有出现在 Add-Ons 部分,则 manifest.json
文件有问题。 我们从该处开始。
manifest.json
的 header 和 modules 部分是否有两个不同的 UUID? 有关详细信息,请参阅 UUID 部分。- 您是否打开了文件扩展名和路径?
manifest.json
manifest.json 可能不仅仅是manifest.json
。 如果您的资源管理器窗口没有显示文件扩展名,可在查看选项卡下启用文件扩展名。 - 仔细检查 JSON 花括号和方括号。 JSON linting 工具可以提供帮助。
- 如果活动行为包存在问题,Add-Ons 部分的行为包下会出现一个红色感叹号。
- 行为包将包含更多信息。 它可能会警告缺少的依赖项,或对其他问题运行诊断。
显示有行为包,但内容不起作用
- 检查
entities
文件夹是否位于正确的位置,并且拼写正确。 然后检查cow
的所有拼写。 - 确保
dependencies
部分中的 UUID 与现有资源包匹配(并且它也可以工作)。 - 将您的包移到其他包的上方,以确保首先加载您的行为包。 包堆叠可能会导致您的更改不显示。
下一步内容?
现在,您已经初步了解了行为包的使用,可进一步了解其工作原理及其功能。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈