- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
伤害
伤害(Damage)是指在Minecraft中通过一个实体或世界本身造成另一个实体的生命值发生改变的过程。狭义的伤害仅指生命值减少的情形,此时,对于生命值增加的情形,我们称之为治疗(Heal)。
单位
伤害的生命值的变化量,因此和生命值共用同一种单位,即半颗心(halfheart,)。每半颗心()俗称1点生命值。正的伤害一般代表生命值的减少,负的伤害一般代表生命值的增加。
存储
包括玩家在内的所有实体都可以拥有控制自身攻击伤害和跌落伤害的两个特性。在存档中,他们存储在每个实体的 Attributes
NBT标签内,控制该实体可以造成的该种类伤害的最大值、最小值和当前值。
ID | 描述 |
---|---|
minecraft:attack_damage | 控制攻击伤害 |
minecraft:fall_damage | 控制跌落伤害 |
应用
很多API中都暴露了应用伤害的接口,模组开发者可以通过以下方式使用这些接口。
原生
[需要更多信息]
附加包
在附加包中可以以数据驱动的形式控制实体和方块的伤害等属性,目前可用的修改方法如下:
- 实体的
minecraft:behavior.knockback_roar
AI意向的knockback_damage
字段,可以用来设定实体的击退咆哮伤害; - 实体的
minecraft:attack
属性的damage
字段,控制实体的攻击伤害范围; - 实体的
minecraft:area_attack
组件的damage_per_tick
字段,可以用来设定实体每刻能造成的的范围伤害; - 实体的
minecraft:damage_over_time
组件的damage_per_hurt
字段,可以用来设定实体每time_between_hurt
秒受到的自损伤害; - 实体的
minecraft:damage_sensor
组件的triggers
数组中每一个对象的cause
字段,可以用来修饰该触发器检测到的原始伤害值; - 实体的
minecraft:hurt_on_condition
组件的damage_conditions
数组中每一个对象中的damage_per_tick
字段,控制该过滤器满足时每秒实体应受的伤害; - 实体的
minecraft:on_hurt
触发器,在实体收到伤害时触发; - 方块的
damage
事件中的amount
字段,方块造成的伤害。
在脚本引擎中还有如下调用方法:
minecraft:entity_hurt
服务端事件的数据中的absorbed_damage
和damage
字段,分别为此次伤害中实体由于伤害吸收状态效果吸收的伤害和最终结算的伤害。
ModSDK
在在ModSDK中除了上述附加包中的数据驱动调用形式,还有以下数据驱动修改方式:
- 物品的
netease:weapon
组件的attack_damage
字段,控制该物品的攻击伤害。
在ModAPI中还有如下调用方法:
- 实体的
ActorHurtServerEvent
服务端事件的数据中的damage
字段,为此次攻击给予的伤害; - 实体的
ActuallyHurtServerEvent
服务端事件的数据中的damage
字段,为该实体受到的伤害; - 生物的
DamageEvent
服务端事件的数据中的damage
字段,为该实体实际结算的伤害。 - 玩家的
PlayerAttackEntityEvent
服务端事件的数据中的damage
字段,为玩家此次攻击给予的伤害[需要验证]; - 弹射物的
projectile
类的CreateProjectileEntity
组件第三个参数对象的damage
字段,为该弹射物的伤害值; - 实体的
hurt
类的SetHurtByEntity
组件第二个参数,为对实体造成伤害值。
InnerCore
在AdaptedScript中,[需要更多信息]
在CoreEngine中,伤害可以通过以下方法获取:
EntityHurt
回调函数的第三个参数,为该实体受伤时结算的伤害;Armor.registerOnHurtListener
的第二个参函数的第四个参数,为盔甲穿戴者受到的伤害。
上表中网络ID
列中的值可以通过以下方法被调用:
Entity.damageEntity
的第二个参数,为对指定造成的伤害。
ModPE
entityHurtHook
的第三个参数,为该实体受伤时结算的伤害。
伤害类型
Minecraft中的伤害由来源不同被分为很多伤害类型(Damage types)。不仅不同的伤害类型在实体受到伤害时会被分开结算,玩家的死亡信息也会由类型不同而有所不同。下面列出当前游戏内所有伤害类型的表格以及他们的相关数据,该表格源自源码中的ActorDamageCause
类。
枚举键 | 内部ID | 接口字符串 [仅附加包] | 枚举值 | 原版中的产生途径 |
---|---|---|---|---|
None |
none |
none |
-1 | 无 |
Override |
override |
override |
0 | 程序直接覆写生命值 |
Contact |
contact |
contact |
1 | 仙人掌或甜浆果丛 |
EntityAttack |
entity_attack |
attack |
2 | 近战攻击 |
Projectile |
projectile |
projectile |
3 | 弹射物 |
Suffocation |
suffocation |
suffocation |
4 | 窒息 |
Fall |
fall |
fall |
5 | 跌落或末影珍珠 |
Fire |
fire |
fire |
6 | 火或篝火 |
FireTick |
fire_tick |
fire_tick |
7 | 身上连续着火 |
Lava |
lava |
lava |
8 | 熔岩 |
Drowning |
drowning |
drowning |
9 | 溺水或淋雨 |
BlockExplosion |
block_explosion |
block_explosion |
10 | 方块爆炸 |
EntityExplosion |
entity_explosion |
entity_explosion |
11 | 实体爆炸 |
Void |
void |
void |
12 | 虚空 |
Suicide |
suicide |
suicide |
13 | /kill 指令
|
Magic |
magic |
magic |
14 | 药水、龙息、唤魔者尖牙或守卫者激光 |
Wither |
wither |
wither |
15 | 凋零 |
Starve |
starve |
starve |
16 | 饥饿 |
Anvil |
anvil |
anvil |
17 | 铁砧 |
Thorns |
thorns |
thorns |
18 | 荆棘 |
FallingBlock |
falling_block |
falling_block |
19 | 下落的方块(除了铁砧) |
Piston |
piston |
piston |
20 | 活塞 |
FlyIntoWall |
fly_into_wall |
fly_into_wall |
21 | 动能 |
Magma |
magma |
- | 22 | 岩浆块 |
Fireworks |
fireworks |
- | 23 | 烟花火箭 |
Lightning |
lightning |
- | 24 | 闪电 |
Charging |
charging |
- | 25 | 物品或实体蓄力[需要验证] |
Temperature |
temperature |
- | 26 | 雪傀儡在干燥、温暖或下界生物群系中 |
Freezing |
freezing |
- | 27 | 冰冻 |
Stalactite |
stalactite |
- | 28 | 钟乳石 |
Stalagmite |
stalagmite |
- | 29 | 石笋 |
All |
all |
fatal |
31 | 任意伤害[注 1] |
- ↑ 源码内描述:Any damage which kills the subject
伤害类型又称作伤害来源(Damage sources),在源码中又被称作伤害成因(Damage causes),模组开发者可以通过以下方式调用伤害成因。
原生
可以使用ActorDamageCause::<key>
调用到上表中的枚举值
列中的值,其中<key>
是上表中枚举建
列中的项。[需要更多信息]
附加包
在附加包中伤害类型只能直接以上表中接口字符串
列中的值以字符串的形式被调用,目前可以数据驱动的调用方法如下:
- 实体的
has_damage
过滤器的value
字段; - 实体的
minecraft:behavior.panic
AI意向的damage_sources
数组; - 实体的
minecraft:damage_sensor
组件的triggers
数组中每一个对象的cause
字段。 - 实体的
minecraft:hurt_on_condition
组件的damage_conditions
数组中每一个对象中的cause
字段; - 方块的
damage
事件中的type
字段。
在脚本引擎中还有如下调用方法:
minecraft:entity_hurt
服务端事件的数据中的cause
字段。
ModSDK
在ModSDK的ModAPI中可以使用<api>.GetMinecraftEnum().ActorDamageCause.<key>
得到上表中的内部ID
列中的值,其中<api>
是Python脚本中导入的当前服务端或客户端的API,<key>
是上表中枚举建
列中的项。
除了上述附加包中的数据驱动调用形式,在ModAPI中伤害类型还能以如下形式被调用:
- 实体的
ActorHurtServerEvent
服务端事件的数据中的cause
字段; - 实体的
ActuallyHurtServerEvent
服务端事件的数据中的cause
字段; - 生物的
DamageEvent
服务端事件的数据中的cause
字段。
InnerCore
在AdaptedScript中,[需要更多信息]
在CoreEngine中,上表中枚举值
列中的值可以通过以下方法获取:
EntityDeath
回调函数的第三个参数;EntityHurt
回调函数的第四个参数;Armor.registerOnHurtListener
的第二个参函数的第五个参数。
上表中枚举值
列中的值可以通过以下方法被调用:
Entity.damageEntity
的第三个参数。