实体攻击机制
实体攻击是一个复杂的主题,需要协调多个系统才能正常运行:
- 移动导航能力以接近目标
- 目标选择能力以确定攻击对象
- 攻击类型(近战或远程)
- 伤害数值与效果机制
目标选择机制
移动组件
生物发起攻击前需要配置移动组件。
在创建攻击行为前,请确保您的实体已具备移动和路径导航能力。
WARNING
即使是固定实体(如炮塔),仍需添加导航组件才能锁定射击目标。
敌对触发机制
有多种方式触发敌对状态。最常见的nearest_attackable_target组件配置如下,用于定义实体的攻击目标类型:
"minecraft:behavior.nearest_attackable_target": {
"must_see": true, //若为true,目标必须在视线范围内
"reselect_targets": true, //允许切换更近的目标
"within_radius": 25.0, //目标检测半径
"must_see_forget_duration": 17.0, //目标丢失视线后的记忆时长
"entity_types": [
{
"filters": { //攻击目标筛选条件
"test": "is_family",
"subject": "other",
"value": "player"
},
"max_dist": 48.0
}
]
}如需更精细控制,可选用以下组件:
| 组件 | 说明 |
|---|---|
| minecraft:behavior.nearest_attackable_target | 攻击符合筛选条件的实体 |
| minecraft:behavior.nearest_prioritized_attackable_target | 可为每个筛选条件设置"priority": [整数]优先级 |
| minecraft:behavior.defend_trusted_target | 攻击伤害指定实体的目标 |
另有一个特殊组件minecraft:lookat:
该组件用于检测与实体对视的目标,结构示例如下:
"minecraft:lookat": {
"search_radius": 64.0,
"set_target": true, //设为true时对视目标会成为有效攻击目标
"look_cooldown": 5.0,
"filters": {
"all_of": [
{
"subject": "other",
"test": "is_family",
"value": "player"
},
{
"test": "has_equipment",
"domain": "head",
"subject": "other",
"operator": "not",
"value": "carved_pumpkin" //不戴雕刻南瓜的玩家
}
]
}
}目标筛选配置
TIP
本节展示如何配置前文提到的"目标选择"组件。
生物通过筛选器确定有效目标,使用test、subject、operator和value参数。
"entity_types":[
{
"filters":{
"any_of":[
{
"test":"is_family",
"subject":"other",
"operator":"==",
"value":"snow_golem"
},
{
"test":"is_family",
"subject":"other",
"operator":"==",
"value":"iron_golem"
}
//雪傀儡或铁傀儡
]
},
"max_dist":24
},
{
"filters":{
"all_of":[
{
"test":"is_family",
"subject":"other",
"operator":"==",
"value":"player"
},
{
"test":"has_equipment",
"subject":"other",
"domain":"head",
"operator":"=!",
"value":"turtle_helmet"
}
//未戴海龟帽的玩家
]
},
"max_dist":24
}
]此配置仅会攻击雪傀儡、铁傀儡以及未佩戴海龟帽的玩家。
攻击类型系统
可用攻击类型如下:
| 组件 | 说明 |
|---|---|
| minecraft:behavior.melee_attack | 对单个目标造成伤害 |
| minecraft:behavior.ranged_attack | 向目标发射投射物 |
| minecraft:area_attack | 对范围内所有实体造成近战伤害 |
| minecraft:behavior.knockback_roar | 类似区域攻击但更灵活的击退咆哮 |
近战攻击
近战是最常见的攻击类型,必定命中且附带击退效果。
"wiki:melee_attack": {
"minecraft:attack": {
"damage": 3,
"effect_name": "slowness",
"effect_duration": 20
},
"minecraft:behavior.melee_attack": {
"priority": 3,
"melee_fov": 90.0, //有效攻击视角范围
"speed_multiplier": 1,
"track_target": false,
"require_complete_path": true
}
}可设置伤害值、状态效果及其他属性。
伤害值可设为固定值或范围区间:
"damage": 3 固定造成3点伤害
"damage": [ 2, 6 ] 随机造成2-6点伤害
状态效果及其持续时间可选,可用效果如下:
| 效果名称 |
|---|
| speed |
| slowness |
| haste |
| mining_fatigue |
| strength |
| instant_health |
| instant_damage |
| jump_boost |
| nausea |
| regeneration |
| resistance |
| fire_resistance |
| water_breathing |
| invisibility |
| blindness |
| night_vision |
| hunger |
| weakness |
| poison |
| wither |
| health_boost |
| absorption |
| saturation |
| levitation |
| fatal_poison |
| slow_falling |
| conduit_power |
| bad_omen |
| village_hero |
| darkness |
远程攻击
按设定间隔向目标发射指定投射物。
"wiki:ranged_attack": {
"minecraft:behavior.ranged_attack": {
"priority": 2,
"ranged_fov": 90.0, //有效射击视角范围
"attack_interval_min": 1.0,
"attack_interval_max": 3.0,
"attack_radius": 15.0
},
"minecraft:shooter": {
"def": "wiki:projectile"
}
}原版投射物列表:
| 原版投射物 |
|---|
| minecraft:arrow |
| minecraft:dragon_fireball |
| minecraft:egg |
| minecraft:ender_pearl |
| minecraft:fireball |
| minecraft:fishing_hook |
| minecraft:lingering_potion |
| minecraft:llama_spit |
| minecraft:skulker_bullet |
| minecraft:small_fireball |
| minecraft:snowball |
| minecraft:splash_potion |
| minecraft:thrown_trident |
| minecraft:wither_skull |
| minecraft:wither_skull_dangerous |
| minecraft:xp_bottle |
弩箭特殊机制:若实体装备弩,需先完成装填才能射击。无论minecraft:shooter定义何种投射物,装填物品必须为minecraft:arrow。
"minecraft:behavior.charge_held_item": {
"priority": 2,
"items": [
"minecraft:arrow"
]
}完成装填后实体才能执行远程攻击,之后需重新装填。
区域攻击
对范围内所有实体造成伤害。与近战/远程不同,此组件无需特定目标,会持续对范围内实体造成伤害和击退。
"minecraft:area_attack" : {
"damage_range": 1, //伤害范围(方块)
"damage_per_tick": 2, //每tick伤害
"cause": "contact", //伤害来源类型
"entity_filter": {
"any_of": [
{
"test": "is_family",
"subject": "other",
"value": "player"
},
{
"test": "is_family",
"subject": "other",
"value": "monster"
}
]
}
}注意实体伤害来源类型,某些装备能抵抗特定伤害,也可通过minecraft:damage_sensor使生物免疫特定伤害。
击退咆哮
与区域攻击类似但更灵活的组件。
"wiki:roar_attack": {
"minecraft:behavior.knockback_roar":{
"priority":2,
"duration":0.7,
"attack_time":0.2,
"knockback_damage":1,
"knockback_horizontal_strength":1,
"knockback_vertical_strength":1,
"knockback_range":5,
"knockback_filters":{
"test":"is_family",
"subject":"other",
"operator":"==",
"value":"player"
},
"damage_filters":{
"test":"is_family",
"subject":"other",
"operator":"==",
"value":"player"
},
"on_roar_end":{
"event":"wiki:other_event"
},
"cooldown_time":10
}
}该组件会产生冲击波效果,可通过资源包修改粒子效果。
进阶攻击机制
实体攻击不仅限于简单的"生物攻击目标造成伤害"。
难度差异化攻击
为不同难度配置不同攻击参数。
"easy_attack": {
"minecraft:attack": {
"damage": 2
}
},
"normal_attack": {
"minecraft:attack": {
"damage": 2,
"effect_name": "poison",
"effect_duration": 10
}
},
"hard_attack": {
"minecraft:attack": {
"damage": 2,
"effect_name": "poison",
"effect_duration": 18
}
}攻击模式切换
通过事件和组件组实现条件攻击或攻击模式切换。常用传感器包括minecraft:environment_sensor和minecraft:target_nearby_sensor。
攻击组件组
定义不同攻击模式的组件组示例:
"wiki:ranged_components": {
"minecraft:shooter": {
"def": "wiki:projectile"
},
"minecraft:behavior.ranged_attack": {
"priority": 3,
"ranged_fov": 90.0,
"attack_interval_min": 1.0,
"attack_interval_max": 3.0,
"attack_radius": 15.0
}
}"wiki:melee_components": {
"minecraft:attack": {
"damage": 6
},
"minecraft:behavior.melee_attack": {
"priority": 3
}
}切换事件
用于激活/禁用攻击模式的事件配置:
"wiki:melee_swap": { //触发时切换为近战模式
"remove": {
"component_groups": [
"wiki:ranged_components"
]
},
"add": {
"component_groups": [
"wiki:melee_components"
]
}
}"wiki:ranged_swap": { //触发时切换为远程模式
"remove": {
"component_groups": [
"wiki:melee_components"
]
},
"add": {
"component_groups": [
"wiki:ranged_components"
]
}
}传感器配置
触发模式切换的传感器示例:
- 目标距离传感器
"wiki:switcher_range": {
"minecraft:target_nearby_sensor": {
"inside_range": 4.0,
"outside_range": 5.0,
"must_see": true,
"on_inside_range": { //目标进入4格范围触发近战模式
"event": "wiki:melee_swap",
"target": "self"
},
"on_outside_range": { //目标超出5格范围触发远程模式
"event": "wiki:ranged_swap",
"target": "self"
}
}
}- 环境传感器
"wiki:switcher_environment": {
"minecraft:environment_sensor": {
"triggers": [
{
"filters": { //水下环境触发近战模式
"test": "is_underwater",
"subject": "self",
"operator": "==",
"value": true
},
"event": "wiki:melee_swap"
},
{
"filters": { //非水下环境触发远程模式
"test": "is_underwater",
"subject": "self",
"operator": "==",
"value": false
},
"event": "wiki:ranged_swap"
}
]
}
}TIP
可配置任意数量的攻击模式,只需确保事件和传感器逻辑完整。
攻击动画系统
攻击行为需配合动画实现。资源包中需要配置以下目录:
- animations (实体名.animation.json)
- animation_controllers (实体名.animation_controller.json)
- entity (实体名.json)
若使用原版动画,只需在实体文件中引用对应名称。
动画资源
动画文件包含实体所有动作数据。推荐使用Blockbench制作,也可直接编辑文本。
| 原版攻击动画 |
|---|
| "animation.zombie.attack_bare_hand" |
| "animation.skeleton.attack.v1.0" |
| "animation.humanoid.bow_and_arrow.v1.0" |
| "animation.humanoid.damage_nearby_mobs.v1.0" |
完整列表见/vanilla_resource_pack/animations目录
动画控制器
定义动画触发逻辑的状态机。
| 原版攻击动画控制器 |
|---|
| "controller.animation.zombie.attack_bare_hand" |
| "controller.animation.skeleton.attack" |
| "controller.animation.humanoid.bow_and_arrow" |
| "controller.animation.humanoid.attack" |
完整列表见/vanilla_resource_pack/animation_controllers目录
更多动画细节参见官方文档。





