冒险家、开发者们:
突发奇想,如果让你自定义一个僵尸生物。
能超远追击村民,并且会搭方块、换僵尸皮肤,那阁下该如何应对呢?
本周专题Week2将带你一起学习使用“自定义生物”
Let’s go !!!
一、前言
首先,请收下这些网站,不妨请放到你浏览器的收藏夹,以便后续使用:
微软MC国际版 – Entity Documentation – Component list
这些网站有更详细的案例代码,以及可供查询的开发文档
如果本教程未提及到,请自行去学习哦~
好的,我们继续重点内容!

二、快速创建体验自定义生物
- 如果我们要快速创建?那就有请出我们的“网易我的世界开发者编辑器”

2. 当我们选择好母体模板(原版生物)后就能开始自定义了
3. 在左侧,我们可以看到我们创建的生物配置文件(文件夹内文件格式为json)
4. 点击左侧的自定义生物配置文件后,右侧显示的就是我们能够修改的参数啦~

5. 如果我们还要设置原版生物没有的行为,比如让村民攻击僵尸,那我们如何操作呢?

在这里我们配置好这些参数即可实现,并且我们还能修改攻击伤害哦~
6. 这些完成后我们要进游戏调试,如何操作呢?
我们需要设置好基础属性

让召唤生成打开,或者自然生成
这样我们在游戏内就能输入标识符(图中已显示),进行召唤了
/summon 标识符 位置x 位置y 位置z

你以为到这就结束了吗??
哦哦,我的好兄弟,还没有over呢~
这只是皮毛的不能再皮毛的基础知识啦~
快跟着下面学习更深度的知识(芝士 bushi
三、更深度的知识
刚刚我们上面给到了三个链接
(分别是:1我的世界实体基础教程 2微软实体开发文档与参数 3基岩版开发文档)
我们可以打开第一个链接,跟随网易的脚步直接学习更详细的课程。
但是作为更可靠的开发者小编,快用我的视角高效率的学习这些内容。
1. 找到自定义生物文件
自定义生物文件可分为3个部分:
① 行为包 | 自定义生物文件JSON
用于控制生物行为的,比如僵尸攻击和基础生命值
文件路径:behavior_packs/behavior_pack_xxx/entities/xxx.json
② 资源包 | 自定义生物文件JSON
用于绑定生物的皮肤、模型、动作等,生物贴图??
文件路径:resource_packs/resource_pack_xxx/entity/xxx.json
③ 资源包 | 自定义生物资源文件(贴图、模型等)
和上面的文件进行互相绑定,这样游戏内就能显示出来啦~
文件路径:resource_packs/resource_pack_xxx/textures/entity
2. 行为包的自定义生物文件(JSON格式学习)
这里推荐使用VSCODE进行编辑(微软官方的免费编辑器),如果大家没有可以自行下载:
我们打开行为包中的自定义生物文件
behavior_packs/behavior_pack_xxx/entities/xxx.json

以下是重点内容!!!快拿起你的小本本记下来~
① JSON格式解析

版本号:这个要根据当前客户端的来写,如果你是开发者编辑器创建的,就不要改了
子组件包(组):这个是总组件包后所属的子组件包,用于部分特殊的组件包自定义数据,或者一体式包,需要手动加载
!!!等下,这个怎么那么难理解呢??
其实很简单,比如你要吃饭,吃什么饭呢?盒饭里面有坤腿、坤蛋、坤菜
那这个子组件包就是一个盒饭,那里面的东西呢?
坤腿要含辣椒、酱油、鸡腿,我们的鸡腿是重要的内容,比如僵尸的攻击目标,那辣椒和酱油呢,你可以理解成僵尸攻击的距离范围、僵尸攻击的次要攻击目标
总组件包:这里面所有的内容,都会被自动加载,不存在手动,比如僵尸的生命值、攻击伤害、移动速度等
和上面子组件包不同的是,总组件包可以调用子组件包,就比如可以直接吃“坤坤饭套餐”
基本配置:
- 标识符:你让生物ID名字叫什么,比如villager_shop,但是一定要记得,带有前面的 : 分号,比如原版的Minecraft:,或者你自定义
- 实验性玩法:这个是用于特殊配置,比如新版本特性等,这里不做介绍,需要了解的去刚刚上面提及的微软文档里面学习
- 自然生成:会自动生成的,可以理解成和原版僵尸一起在夜晚生成
- summon召唤:如果你要用指令summon召唤这个僵尸那你就需要开启
- (更多的有runtime_identifier):这个是母版标识符,比如你只要修改原版村民,需要原版村民的特性,可以被游戏理解成村民生物。”runtime_identifier”: “minecraft:villager_v2”
事件:这个就和我们理解的网易主动请求一样,比如僵尸生成后会自动调用这个事件
常用的有:minecraft:as_adult(生物是大人)、minecraft:entity_spawned(生物生成)
ok,其实这个部分的内容很多很详细,如果你学习了就能自定义你想要的生物,比如让自定义僵尸拥有搭方块的内容,在1000格以外就开始追逐村民,可以用来村庄保卫战等。
下面给出了我在村庄保卫战自定义的僵尸行为JSON文件,大家可以下载学习
{
"format_version": "1.20.10",
"minecraft:entity": {
"component_groups": {
"minecraft:can_break_doors": {
"minecraft:annotation.break_door": {
}
},
"minecraft:can_have_equipment": {
"minecraft:equipment": {
"table": "loot_tables/entities/zombie_equipment.json"
}
},
"minecraft:convert_to_baby_drowned": {
"minecraft:is_shaking": {
},
"minecraft:transformation": {
"delay": {
"value": 15
},
"drop_equipment": true,
"into": "minecraft:drowned<minecraft:as_baby>",
"transformation_sound": "convert_to_drowned"
}
},
"minecraft:convert_to_drowned": {
"minecraft:is_shaking": {
},
"minecraft:transformation": {
"delay": {
"value": 15
},
"drop_equipment": true,
"into": "minecraft:drowned<minecraft:as_adult>",
"transformation_sound": "convert_to_drowned"
}
},
"minecraft:look_to_start_drowned_transformation": {
"minecraft:environment_sensor": {
"triggers": {
"event": "minecraft:start_transforming",
"filters": {
"operator": "==",
"subject": "self",
"test": "is_underwater",
"value": true
}
}
}
},
"minecraft:start_drowned_transformation": {
"minecraft:environment_sensor": {
"triggers": {
"event": "minecraft:stop_transforming",
"filters": {
"operator": "==",
"subject": "self",
"test": "is_underwater",
"value": false
}
}
},
"minecraft:timer": {
"looping": false,
"time": 30,
"time_down_event": {
"event": "minecraft:convert_to_drowned"
}
}
},
"minecraft:zombie_adult": {
"minecraft:behavior.mount_pathing": {
"priority": 2,
"speed_multiplier": 1.25,
"target_dist": 0.0,
"track_target": true
},
"minecraft:movement": {
"value": 0.23
},
"minecraft:rideable": {
"family_types": [
"zombie"
],
"seat_count": 1,
"seats": {
"lock_rider_rotation": 0,
"position": [
0.0,
1.1,
-0.35
]
}
}
},
"minecraft:zombie_baby": {
"minecraft:is_baby": {
},
"minecraft:movement": {
"value": 0.35
},
"minecraft:scale": {
"value": 0.5
}
},
"minecraft:zombie_jockey": {
"minecraft:behavior.circle_around_anchor": {
}
}
},
"components": {
"minecraft:attack": {
"damage": 2
},
"minecraft:behavior.break_door": {
"priority": 1
},
"minecraft:behavior.door_interact": {
"priority": 1
},
"minecraft:behavior.equip_item": {
"priority": 2
},
"minecraft:behavior.hurt_by_target": {
"entity_types": {
"filters": {
"subject": "other",
"test": "is_family",
"value": "villager"
},
"max_dist": 1000
},
"priority": 1
},
"minecraft:behavior.melee_attack": {
"priority": 3
},
"minecraft:behavior.nearest_prioritized_attackable_target": {
"entity_types": {
"filters": {
"subject": "other",
"test": "is_family",
"value": "villager"
},
"max_dist": 1000,
"priority": 0
},
"priority": 0,
"target_search_height": -1.0
},
"minecraft:behavior.open_door": {
},
"minecraft:can_climb": {
},
"minecraft:collision_box": {
"height": 1.9,
"width": 0.6
},
"minecraft:conditional_bandwidth_optimization": {
},
"minecraft:despawn": {
"despawn_from_distance": {
}
},
"minecraft:environment_sensor": {
"triggers": {
"event": "minecraft:start_transforming",
"filters": {
"operator": "==",
"test": "is_underwater",
"value": true
}
}
},
"minecraft:equip_item": {
},
"minecraft:follow_range": {
"max": 1000,
"value": 1000
},
"minecraft:health": {
"max": 20,
"value": 20
},
"minecraft:hurt_on_condition": {
"damage_conditions": [
{
"cause": "lava",
"damage_per_tick": 4,
"filters": {
"operator": "==",
"subject": "self",
"test": "in_lava",
"value": true
}
}
]
},
"minecraft:is_hidden_when_invisible": {
},
"minecraft:jump.static": {
},
"minecraft:movement.basic": {
},
"minecraft:nameable": {
},
"minecraft:navigation.walk": {
"can_break_doors": true,
"can_pass_doors": true,
"can_walk": true,
"is_amphibious": true
},
"minecraft:persistent": {
},
"minecraft:physics": {
},
"minecraft:pushable": {
"is_pushable": true,
"is_pushable_by_piston": true
},
"minecraft:type_family": {
"family": [
"zombie",
"undead",
"monster",
"mob"
]
}
},
"description": {
"identifier": "truol:zombie_attack",
"is_experimental": false,
"is_spawnable": false,
"is_summonable": true,
"runtime_identifier": "minecraft:zombie"
},
"events": {
"find_gold_timeout": {
"remove": {
"component_groups": [
"look_for_gold"
]
}
},
"minecraft:as_adult": {
"add": {
"component_groups": [
"minecraft:zombie_adult"
]
}
},
"minecraft:as_baby": {
"add": {
"component_groups": [
"minecraft:zombie_baby"
]
}
},
"minecraft:convert_to_drowned": {
"sequence": [
{
"add": {
"component_groups": [
"minecraft:convert_to_drowned"
]
},
"filters": {
"operator": "!=",
"test": "has_component",
"value": "minecraft:is_baby"
},
"remove": {
"component_groups": [
"minecraft:start_drowned_transformation"
]
}
},
{
"add": {
"component_groups": [
"minecraft:convert_to_baby_drowned"
]
},
"filters": {
"test": "has_component",
"value": "minecraft:is_baby"
},
"remove": {
"component_groups": [
"minecraft:start_drowned_transformation"
]
}
}
]
},
"minecraft:entity_spawned": {
"sequence": [
{
"randomize": [
{
"add": {
"component_groups": [
"minecraft:zombie_adult",
"minecraft:can_have_equipment"
]
},
"remove": {
},
"weight": 380
},
{
"add": {
"component_groups": [
"minecraft:zombie_baby",
"minecraft:can_have_equipment"
]
},
"remove": {
},
"weight": 17
},
{
"add": {
"component_groups": [
"minecraft:zombie_baby",
"minecraft:zombie_jockey",
"minecraft:can_have_equipment"
]
},
"remove": {
},
"weight": 3
}
]
},
{
"add": {
"component_groups": [
"minecraft:can_break_doors"
]
}
}
]
},
"minecraft:start_transforming": {
"add": {
"component_groups": [
"minecraft:start_drowned_transformation"
]
},
"remove": {
"component_groups": [
"minecraft:look_to_start_drowned_transformation"
]
}
},
"minecraft:stop_transforming": {
"add": {
"component_groups": [
"minecraft:look_to_start_drowned_transformation"
]
},
"remove": {
"component_groups": [
"minecraft:start_drowned_transformation"
]
}
}
}
}
}
由于篇幅有限,下期我们将继续介绍这个自定义生物。
我们下期再见~ヾ( ̄▽ ̄)Bye~Bye~