- 致编者:请牢记我们的域名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
欄位,分別為此次傷害中實體由於吸收狀態效果吸收的傷害和最終結算的傷害。
模組SDK[編輯]
在在模組SDK中除了上述附加包中的資料驅動呼叫形式,還有以下資料驅動修改方式:
- 物品的
netease:weapon
元件的attack_damage
欄位,控制該物品的攻擊傷害。
在模組API中還有如下呼叫方法:
- 實體的
ActorHurtServerEvent
伺服器端事件的資料中的damage
欄位,為此次攻擊給予的傷害; - 實體的
ActuallyHurtServerEvent
伺服器端事件的資料中的damage
欄位,為該實體受到的傷害; - 生物的
DamageEvent
伺服器端事件的資料中的damage
欄位,為該實體實際結算的傷害。 - 玩家的
PlayerAttackEntityEvent
伺服器端事件的資料中的damage
欄位,為玩家此次攻擊給予的傷害[需要驗證]; - 彈射物的
projectile
類的CreateProjectileEntity
元件第三個參數物件的damage
欄位,為該彈射物的傷害值; - 實體的
hurt
類的SetHurtByEntity
元件第二個參數,為對實體造成傷害值。
Inner Core[編輯]
在AdaptedScript中,[需要更多資訊]
在CoreEngine中,傷害可以透過以下方法取得:
EntityHurt
回呼函式的第三個參數,為該實體受傷時結算的傷害;Armor.registerOnHurtListener
的第二個參函式的第四個參數,為盔甲穿戴者受到的傷害。
上表中网络ID
列中的值可以透過以下方法被呼叫:
Entity.damageEntity
的第二個參數,為對指定造成的傷害。
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] |
- ↑ 這包括
has_damage
過濾器的value
欄位。 - ↑ 這包括
minecraft:damage_sensor
元件的cause
欄位。minecraft:hurt_on_condition
元件的cause
欄位。minecraft:area_attack
元件的cause
欄位。minecraft:behavior.panic
元件的damage_sources
欄位。minecraft:behavior.play_dead
元件的damage_sources
欄位。damage
事件響應的type
欄位。/damage
指令的cause: DamageCause
參數。- 腳本API的
@minecraft/server
模組的EntityDamageCause
列舉。
- ↑ 對於物品來說,過濾器主體必須為
self
。對於方塊來說,過濾器主體必須為item
- ↑ 事實上,原始碼內並無
durability
型別,當滿足損壞物品的條件時,傷害型別可以為任意字串,且不會對物品的損壞情況造成任何影響。durability
型別為約定俗成的寫法。
傷害型別又稱作傷害來源(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
欄位。
模組SDK[編輯]
在模組SDK的模組API中可以使用<api>.GetMinecraftEnum().ActorDamageCause.<key>
得到上表中的内部ID
列中的值,其中<api>
是Python腳本中匯入的目前伺服器端或用戶端的API,<key>
是上表中枚举建
列中的項。
除了上述附加包中的資料驅動呼叫形式,在模組API中傷害型別還能以如下形式被呼叫:
- 實體的
ActorHurtServerEvent
伺服器端事件的資料中的cause
欄位; - 實體的
ActuallyHurtServerEvent
伺服器端事件的資料中的cause
欄位; - 生物的
DamageEvent
伺服器端事件的資料中的cause
欄位。
Inner Core[編輯]
在AdaptedScript中,[需要更多資訊]
在CoreEngine中,上表中枚举值
列中的值可以透過以下方法取得:
EntityDeath
回呼函式的第三個參數;EntityHurt
回呼函式的第四個參數;Armor.registerOnHurtListener
的第二個參函式的第五個參數。
上表中枚举值
列中的值可以透過以下方法被呼叫:
Entity.damageEntity
的第三個參數。