实体行为可谓是精华的核心部分,首先你需要对实体行为的运行方式有一个大概了解
实体行为共分为三大部分:组件、组件组、事件
组件
实体组件分为四大类:固有属性组件(如碰撞箱子)、行为组件(如近战、看着玩家、自由走动)、触发器、其它
触发器被游戏调用后如果满足滤器要求将触发事件
详情见 4-6
事件
事件用于添加与删除组件组,此外,游戏也保留了一些事件,这些事件无需被触发器调用,在指定条件下就会触发(如:minecraft:entity_spawn事件在实体生成时触发)
详情见 4-6
组件组
分组区,每个组件组都将会存放组件,这些组件组在指定条件下会被启用或者禁用
组件组将会给予生物额外的属性或者行为(组件组普遍性用处,也有些时候是用来触发动画控制器)
相关接口请查阅AddonAPI文档
总结:
组件定义实体属性与行为,触发器将会在指定条件下触发事件,事件将会添加或删除对应组件组,组件组将会给予生物额外的属性或者行为
实例,为原版猪行为,已删减不必要部分
{
"format_version": "1.13.0", //版本
"minecraft:entity": {
"description": {
"identifier": "minecraft:pig", //命名空间:ID
"is_spawnable": true, //会有生物蛋
"is_summonable": true, /能被/summon指令生成
"is_experimental": false //需要实验玩法
},
"component_groups": { //组件组区
"minecraft:pig_baby": { //一个组件组,这个组件组定义幼年猪特有组件,如:碰撞箱会变小、无法繁殖。
"minecraft:is_baby": {
},
"minecraft:scale": {
"value": 0.5
},
"minecraft:behavior.follow_parent": {
"priority": 6,
"speed_multiplier": 1.1
}
},
"minecraft:pig_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/pig.json"
},
"minecraft:behavior.breed": {
"priority": 4,
"speed_multiplier": 1.0
},
"breed_items": [ "carrot", "beetroot", "potato" ]
}
}
},
"components": { //组件区,即幼年猪与成年猪都拥有的组件
"minecraft:behavior.panic": {
"priority": 3,
"speed_multiplier": 1.25
},
"minecraft:behavior.random_stroll": {
"priority": 7,
"speed_multiplier": 1.0
},
"minecraft:behavior.look_at_player": {
"priority": 8,
"look_distance": 6.0,
"probability": 0.02
},
"minecraft:behavior.random_look_around": {
"priority": 9
},
"minecraft:physics": {
},
"minecraft:pushable": {
"is_pushable": true,
"is_pushable_by_piston": true
}
},
"events": { //事件
"minecraft:entity_spawned": { //游戏自带的事件,在该实体生成时触发
"randomize": [
{ //结果1
"weight": 95, //几率:95%,百分比
"remove": {
},
"add": { //如果是,则添加成年猪组件组
"component_groups": [
"minecraft:pig_adult"
]
}
},
{
"weight": 5, //几率:5%
"remove": {
},
"add": { //如果是,则添加幼年猪组件组
"component_groups": [
"minecraft:pig_baby"
]
}
}
]
}
}
}
}
解释
format_version
格式版本
minecraft:entity
description
描述了实体的基本信息
键 | 描述 | 类型 | 默认值 | 可选值 |
---|---|---|---|---|
identifier | 实体命名空间:ID | 字符串 | null | 所有字符 |
is_spawnable | 实体是否有生物蛋 | 布尔 | true | true或false |
is_summonable | 实体是否能被/summon指令生成 | 布尔 | true | true或false |
is_experimental | 是否需要实验玩法 | 布尔 | false | true或false |
runtime_identifier | ||||
scripts | 脚本 | 对象 | null | 对象 |
animations | 用于给实体绑定动画/动画控制器(服务端) | 对象 | null | 对象 |
scripts
这里不指Script Engine脚本引擎,而是指Molang表达式
键 | 描述 | 类型 | 默认值 | 可选值 |
---|---|---|---|---|
animate | 用于模仿原始实体的硬编码元素,它接受Minecraft原版中的标识符 | 字符串 | null | 所有字符 |
栗子:
"minecraft:entity": {
"description": {
"identifier": "minecraft:player",
"is_spawnable": false,
"is_summonable": true,
"is_experimental": false,
"runtime_identifier": "minecraft:shulker",
"scripts": {
"animate": [
"byh1",
"byh2"
]
},
"animations": {
"byh1": "animation.byh1" //绑定动画(服务端),且在实体生成时会立刻调用一次(此处键要与animate中的一致)
"byh2": "controller.animation.byh2" //绑定动画控制器(服务端),且在实体生成时会立刻调用一次
}
},