傷害

出自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中,上表中枚举值列中的值可以透過以下方法取得:

上表中枚举值列中的值可以透過以下方法被呼叫: