伤害

来自Minecraft基岩版开发Wiki

伤害Damage)是指在Minecraft中通过一个实体或世界本身造成另一个实体的生命值发生改变的过程。狭义的伤害仅指生命值减少的情形,此时,对于生命值增加的情形,我们称之为治疗Heal)。

单位[编辑]

伤害的生命值的变化量,因此和生命值共用同一种单位,即半颗心halfheart♥)。每半颗心(♥)俗称1点生命值。正的伤害一般代表生命值的减少,负的伤害一般代表生命值的增加。

存储[编辑]

包括玩家在内的所有实体都可以拥有控制自身攻击伤害和跌落伤害的两个特性。在存档中,他们存储在每个实体的 AttributesNBT标签内,控制该实体可以造成的该种类伤害的最大值、最小值和当前值。

ID 描述
minecraft:attack_damage 控制攻击伤害
minecraft:fall_damage 控制跌落伤害

应用[编辑]

很多API中都暴露了应用伤害的接口,模组开发者可以通过以下方式使用这些接口。

原生[编辑]

[需要更多信息]

附加包[编辑]

附加包中可以以数据驱动的形式控制实体和方块的伤害等属性,目前可用的修改方法如下:

脚本引擎中还有如下调用方法:

  • minecraft:entity_hurt服务端事件的数据中的absorbed_damagedamage字段,分别为此次伤害中实体由于伤害吸收状态效果吸收的伤害和最终结算的伤害。

模组SDK[编辑]

在在模组SDK中除了上述附加包中的数据驱动调用形式,还有以下数据驱动修改方式:

模组API中还有如下调用方法:

  • 实体的ActorHurtServerEvent服务端事件的数据中的damage字段,为此次攻击给予的伤害;
  • 实体的ActuallyHurtServerEvent服务端事件的数据中的damage字段,为该实体受到的伤害;
  • 生物的DamageEvent服务端事件的数据中的damage字段,为该实体实际结算的伤害。
  • 玩家的PlayerAttackEntityEvent服务端事件的数据中的damage字段,为玩家此次攻击给予的伤害‌[需要验证]
  • 弹射物的projectile类的CreateProjectileEntity组件第三个参数对象的damage字段,为该弹射物的伤害值;
  • 实体的hurt类的SetHurtByEntity组件第二个参数,为对实体造成伤害值。

Inner Core[编辑]

AdaptedScript中,‌[需要更多信息]

CoreEngine中,伤害可以通过以下方法获取:

上表中网络ID列中的值可以通过以下方法被调用:

ModPE[编辑]

ModPE中,可以使用以下钩子函数来获取伤害:

  • entityHurtHook的第三个参数,为该实体受伤时结算的伤害。

伤害类型[编辑]

Minecraft中的伤害由来源不同被分为很多伤害类型Damage types)。不仅不同的伤害类型在实体受到伤害时会被分开结算,玩家的死亡信息也会由类型不同而有所不同。下面列出当前游戏内所有伤害类型的表格以及他们的相关数据,该表格源自源码中的ActorDamageCause类。

活动对象伤害成因枚举
键名 接口字符串 接口可用性 版际可用性 原版用例
过滤器[注 1] 其他[注 2] 国际版 中国版
-2 fatal 可用 不可用 可用 可用 任意能够杀死主体的致命伤害
None -1 none 可用 可用 可用 可用
Override 0 override 可用 可用 可用 可用 程序直接覆写生命值
Contact 1 contact 可用 可用 可用 可用 仙人掌甜浆果丛
EntityAttack 2 entity_attack attack 可用 可用 可用 近战攻击
Projectile 3 projectile 可用 可用 可用 可用 弹射物
Suffocation 4 suffocation 可用 可用 可用 可用 窒息
Fall 5 fall 可用 可用 可用 可用 跌落末影珍珠
Fire 6 fire 可用 可用 可用 可用
FireTick 7 fire_tick 可用 可用 可用 可用 身上连续着火
Lava 8 lava 可用 可用 可用 可用 熔岩
Drowning 9 drowning 可用 可用 可用 可用 溺水或淋雨
BlockExplosion 10 block_explosion 可用 可用 可用 可用 方块爆炸
EntityExplosion 11 entity_explosion 可用 可用 可用 可用 实体爆炸
Void 12 void 可用 可用 可用 可用 虚空
SelfDestruct 13 suicide 可用 可用 可用 可用 /kill命令
Magic 14 magic 可用 可用 可用 可用 药水龙息唤魔者尖牙守卫者激光
Wither 15 wither 可用 可用 可用 可用 凋零
Starve 16 starve 可用 可用 可用 可用 饥饿
Anvil 17 anvil 可用 可用 可用 可用 铁砧
Thorns 18 thorns 可用 可用 可用 可用 荆棘
FallingBlock 19 falling_block 可用 可用 可用 可用 下落的方块(除了铁砧)
Piston 20 piston 可用 可用 可用 可用 活塞
FlyIntoWall 21 fly_into_wall 可用 可用 可用 可用 动能
Magma 22 magma 不可用 可用 可用 可用 岩浆块
Fireworks 23 fireworks 不可用 可用 可用 可用 烟花火箭
Lightning 24 lightning 不可用 可用 可用 可用 闪电
Charging 25 charging 不可用 可用 可用 可用 物品或实体蓄力‌[需要验证]
Temperature 26 temperature 不可用 可用 可用 可用 雪傀儡在干燥、温暖或下界生物群系
Freezing 27 freezing 不可用 可用 可用 可用 冰冻
Stalactite 28 stalactite 可用 可用 可用 可用 钟乳石
Stalagmite 29 stalagmite 可用 可用 可用 可用 石笋
RamAttack 30 ram_attack 不可用 可用 不可用 可用 冲撞攻击
SonicBoom 31 sonic_boom 可用 不可用 可用 即将到来 音爆
Campfire 32 篝火
SoulCampfire 33 灵魂火
All 34 all 不可用 不可用 可用 可用 任意伤害类型
durability 不可用 部分 可用 可用 物品耐久[注 3][注 4]
  1. 这包括has_damage过滤器的value字段。
  2. 这包括
  3. 对于物品来说,过滤器主体必须为self。对于方块来说,过滤器主体必须为item
  4. 事实上,源码内并无durability类型,当满足损坏物品的条件时,伤害类型可以为任意字符串,且不会对物品的损坏情况造成任何影响。durability类型为约定俗成的写法。

伤害类型又称作伤害来源Damage sources),在源码中又被称作伤害成因Damage causes),模组开发者可以通过以下方式调用伤害成因。

原生[编辑]

可以使用ActorDamageCause::<key>调用到上表中的枚举值列中的值,其中<key>是上表中枚举建列中的项。‌[需要更多信息]

附加包[编辑]

附加包中伤害类型只能直接以上表中接口字符串列中的值以字符串的形式被调用,目前可以数据驱动的调用方法如下:

脚本引擎中还有如下调用方法:

模组SDK[编辑]

模组SDK模组API中可以使用<api>.GetMinecraftEnum().ActorDamageCause.<key>得到上表中的内部ID列中的值,其中<api>是Python脚本中导入的当前服务端或客户端的API<key>是上表中枚举建列中的项。

除了上述附加包中的数据驱动调用形式,在模组API中伤害类型还能以如下形式被调用:

  • 实体的ActorHurtServerEvent服务端事件的数据中的cause字段;
  • 实体的ActuallyHurtServerEvent服务端事件的数据中的cause字段;
  • 生物的DamageEvent服务端事件的数据中的cause字段。

Inner Core[编辑]

AdaptedScript中,‌[需要更多信息]

CoreEngine中,上表中枚举值列中的值可以通过以下方法获取:

上表中枚举值列中的值可以通过以下方法被调用: