---
sidebarDepth: 1
---
# 实体
# 索引
| 事件 |
| 描述 |
| --- | --- | --- |
| [ActorHurtServerEvent](实体.md#actorhurtserverevent) | 服务端 | 触发时机:生物(包括玩家)受伤时触发 |
| [ActuallyHurtServerEvent](实体.md#actuallyhurtserverevent) | 服务端 | 实体实际受到伤害时触发,相比于DamageEvent,该伤害为经过护甲及buff计算后,实际的扣血量 |
| [AddEffectServerEvent](实体.md#addeffectserverevent) | 服务端 | 触发时机:实体获得状态效果时 |
| [ApproachEntityClientEvent](实体.md#approachentityclientevent) | 客户端 | 玩家靠近生物时触发 |
| [ChangeSwimStateServerEvent](实体.md#changeswimstateserverevent) | 服务端 | 触发时机:实体开始或者结束游泳时 |
| [DamageEvent](实体.md#damageevent) | 服务端 | 实体受到伤害时触发 |
| [EntityChangeDimensionServerEvent](实体.md#entitychangedimensionserverevent) | 服务端 | 实体维度改变时服务端抛出 |
| [EntityDefinitionsEventServerEvent](实体.md#entitydefinitionseventserverevent) | 服务端 | 触发时机:生物定义json文件中设置的event触发时同时触发。生物行为变更事件 |
| [EntityDieLoottableAfterServerEvent](实体.md#entitydieloottableafterserverevent) | 服务端 | 触发时机:生物死亡掉落物品之后 |
| [EntityDieLoottableServerEvent](实体.md#entitydieloottableserverevent) | 服务端 | 触发时机:生物死亡掉落物品时 |
| [EntityDroppedItemServerEvent](实体.md#entitydroppeditemserverevent) | 服务端 | 触发时机:生物扔出物品时触发 |
| [EntityEffectDamageServerEvent](实体.md#entityeffectdamageserverevent) | 服务端 | 生物受到状态伤害/回复事件。 |
| [EntityLoadScriptEvent](实体.md#entityloadscriptevent) | 服务端 | 数据库加载实体自定义数据时触发 |
| [EntityModelChangedClientEvent](实体.md#entitymodelchangedclientevent) | 客户端 | 触发时机:实体模型切换时触发 |
| [EntityMotionStartServerEvent](实体.md#entitymotionstartserverevent) | 服务端 | 实体运动器开始事件。实体(包含玩家)添加运动器后,运动器开始运行时触发 |
| [EntityMotionStopServerEvent](实体.md#entitymotionstopserverevent) | 服务端 | 实体运动器停止事件。实体(包含玩家)添加运动器并开始运行后,运动器自动停止时触发 |
| [EntityPickupItemServerEvent](实体.md#entitypickupitemserverevent) | 服务端 | 有minecraft:behavior.pickup_items行为的生物拾取物品时触发该事件,例如村民拾取面包、猪灵拾取金锭 |
| [EntityStartRidingEvent](实体.md#entitystartridingevent) | 服务端 | 当实体骑乘上另一个实体时触发 |
| [EntityStopRidingEvent](实体.md#entitystopridingevent) | 服务端 | 触发时机:当实体停止骑乘时 |
| [EntityStopRidingEvent](实体.md#entitystopridingevent) | 客户端 | 触发时机:当实体停止骑乘时 |
| [EntityTickServerEvent](实体.md#entitytickserverevent) | 服务端 | 实体tick时触发。该事件为20帧每秒。需要使用AddEntityTickEventWhiteList添加触发该事件的实体类型白名单。 |
| [HealthChangeBeforeServerEvent](实体.md#healthchangebeforeserverevent) | 服务端 | 生物生命值或最大生命值发生变化之前触发 |
| [HealthChangeClientEvent](实体.md#healthchangeclientevent) | 客户端 | 生物生命值发生变化时触发 |
| [HealthChangeServerEvent](实体.md#healthchangeserverevent) | 服务端 | 生物生命值发生变化时触发 |
| [LeaveEntityClientEvent](实体.md#leaveentityclientevent) | 客户端 | 玩家远离生物时触发 |
| [MobDieEvent](实体.md#mobdieevent) | 服务端 | 实体死亡时触发 |
| [MobGriefingBlockServerEvent](实体.md#mobgriefingblockserverevent) | 服务端 | 环境生物改变方块时触发,触发的时机与mobgriefing游戏规则影响的行为相同 |
| [OnFireHurtEvent](实体.md#onfirehurtevent) | 服务端 | 生物受到火焰伤害时触发 |
| [OnGroundClientEvent](实体.md#ongroundclientevent) | 客户端 | 实体着地事件。玩家,沙子,铁砧,掉落的物品,点燃的TNT掉落地面时触发,其余实体着地不触发。 |
| [OnGroundServerEvent](实体.md#ongroundserverevent) | 服务端 | 实体着地事件。实体,掉落的物品,点燃的TNT掉落地面时触发 |
| [OnKnockBackServerEvent](实体.md#onknockbackserverevent) | 服务端 | 实体被击退时触发 |
| [OnMobHitBlockServerEvent](实体.md#onmobhitblockserverevent) | 服务端 | 触发时机:通过OpenMobHitBlockDetection打开方块碰撞检测后,当生物(不包括玩家)碰撞到方块时触发该事件。 |
| [OnMobHitMobClientEvent](实体.md#onmobhitmobclientevent) | 客户端 | 触发时机:通过OpenPlayerHitMobDetection打开生物碰撞检测后,当生物间(包含玩家)碰撞时触发该事件。注:客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。 |
| [OnMobHitMobServerEvent](实体.md#onmobhitmobserverevent) | 服务端 | 触发时机:通过OpenPlayerHitMobDetection打开生物碰撞检测后,当生物间(包含玩家)碰撞时触发该事件。注:客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。 |
| [ProjectileCritHitEvent](实体.md#projectilecrithitevent) | 服务端 | 触发时机:当抛射物与头部碰撞时触发该事件。注:需调用OpenPlayerCritBox开启玩家爆头后才能触发。 |
| [ProjectileDoHitEffectEvent](实体.md#projectiledohiteffectevent) | 服务端 | 触发时机:当抛射物碰撞时触发该事件 |
| [RefreshEffectServerEvent](实体.md#refresheffectserverevent) | 服务端 | 触发时机:实体身上状态效果更新时触发,更新条件1、新增状态等级较高,更新状态等级及时间;2、新增状态等级不变,时间较长,更新状态持续时间 |
| [RemoveEffectServerEvent](实体.md#removeeffectserverevent) | 服务端 | 触发时机:实体身上状态效果被移除时 |
| [SpawnProjectileServerEvent](实体.md#spawnprojectileserverevent) | 服务端 | 触发时机:抛射物生成时触发 |
| [StartRidingClientEvent](实体.md#startridingclientevent) | 客户端 | 触发时机:一个实体即将骑乘另外一个实体 |
| [StartRidingServerEvent](实体.md#startridingserverevent) | 服务端 | 触发时机:一个实体即将骑乘另外一个实体 |
| [WillAddEffectServerEvent](实体.md#willaddeffectserverevent) | 服务端 | 触发时机:实体即将获得状态效果前 |
| [WillTeleportToServerEvent](实体.md#willteleporttoserverevent) | 服务端 | 实体即将传送或切换维度 |
# 实体
## ActorHurtServerEvent
服务端
- 描述
触发时机:生物(包括玩家)受伤时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 生物Id |
| cause | str | 伤害来源,详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
| damage | float | 伤害值(被伤害吸收后的值),不可修改 |
| absorbedDamage | int | 被伤害吸收效果吸收的伤害值 |
| customTag | str | 使用[Hurt接口](../接口/实体/行为.md#hurt)传入的自定义伤害类型 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ActuallyHurtServerEvent
服务端
- 描述
实体实际受到伤害时触发,相比于DamageEvent,该伤害为经过护甲及buff计算后,实际的扣血量
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| srcId | str | 伤害源id |
| projectileId | str | 投射物id |
| entityId | str | 被伤害id |
| damage | float | 伤害值(被伤害吸收后的值),允许修改,设置为0则此次造成的伤害为0,若设置数值和原来一样则视为没有修改 |
| invulnerableTime | int | 实体受击后,剩余的无懈可击帧数,在无懈可击时间内,damage和damage_f为超过上次伤害的部分 |
| lastHurt | float | 实体上次受到的伤害 |
| cause | str | 伤害来源,详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
| customTag | str | 使用[Hurt接口](../接口/实体/行为.md#hurt)传入的自定义伤害类型 |
- 返回值
无
- 备注
- 药水与状态效果造成的伤害不触发,可以使用ActorHurtServerEvent
- 为了游戏运行效率请尽可能避免将火的伤害设置为0,因为这样会导致大量触发该事件。
- 若要修改damage的值,请确保修改后的值与原值不同,且支持转换为浮点型,否则引擎会忽略这次修改。
- 青蛙、山羊跳跃落地时也会触发此伤害事件,但它们的掉落伤害实际会有减免,青蛙减少5,山羊减少10
- 在无懈可击时间内,只要实体受到高于上次受击的伤害,可以连续触发不受SetHurtCD影响,如实体连续受到1伤害,如果在本事件中修改damage为0.5,则引擎会认为每次都有0.5的溢出伤害,可以通过invulnerableTime和lastHurt来判断是否取消这次伤害
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## AddEffectServerEvent
服务端
- 描述
触发时机:实体获得状态效果时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| effectName | str | 实体获得状态效果的名字 |
| effectDuration | int | 状态效果的持续时间,单位秒 |
| effectAmplifier | int | 状态效果的放大倍数 |
| damage | float | 状态造成的伤害值(真实扣除生命值的量)。只有持续时间为0时有用 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ApproachEntityClientEvent
客户端
- 描述
玩家靠近生物时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| entityId | str | 靠近的生物实体id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ChangeSwimStateServerEvent
服务端
- 描述
触发时机:实体开始或者结束游泳时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体的唯一ID |
| formState | bool | 事件触发前,实体是否在游泳状态 |
| toState | bool | 事件触发后,实体是否在游泳状态 |
- 返回值
无
- 备注
- 当实体的状态没有变化时,不会触发此事件,即formState和toState必定一真一假
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## DamageEvent
服务端
- 描述
实体受到伤害时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| srcId | str | 伤害源id |
| projectileId | str | 投射物id |
| entityId | str | 被伤害id |
| damage | float | 伤害值(被伤害吸收前的值),允许修改,设置为0则此次造成的伤害为0 |
| absorption | int | 受到伤害时,扣除黄心前,实体拥有的黄心血量(见[AttrType枚举](../枚举值/AttrType.md)的ABSORPTION) |
| cause | str | 伤害来源,详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
| knock | bool | 是否击退被攻击者,允许修改,设置该值为False则不产生击退 |
| ignite | bool | 是否点燃被伤害者,允许修改,设置该值为True产生点燃效果 |
| customTag | str | 使用[Hurt接口](../接口/实体/行为.md#hurt)传入的自定义伤害类型 |
- 返回值
无
- 备注
- damage值会被护甲和absorption等吸收,不一定是最终扣血量。通过设置这个伤害值可以取消伤害,但不会取消由击退效果或者点燃效果带来的伤害
- 该事件在实体受伤之前触发,由于部分伤害是在tick中处理,因此持续触发受伤时(如站在火中)会每帧触发事件(可以使用ActorHurtServerEvent来避免)。
- 这里的damage是伤害源具有的攻击伤害值,并非实体真实的扣血量,如果需要获取真实伤害,可以使用ActuallyHurtServerEvent事件。
- 当目标无法被击退时,knock值无效
- 药水与状态效果造成的伤害不触发,可以使用ActorHurtServerEvent
- 由于点燃的实现原因,此处ignite设置为false并不能取消实体的点燃效果(如果需要取消点燃效果,请通过OnFireHurtEvent事件实现)
- 青蛙、山羊跳跃落地时也会触发此伤害事件,但它们的掉落伤害实际会有减免,青蛙减少5,山羊减少10
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityChangeDimensionServerEvent
服务端
- 描述
实体维度改变时服务端抛出
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| fromDimensionId | int | 维度改变前的维度 |
| toDimensionId | int | 维度改变后的维度 |
| fromX | float | 改变前的位置x |
| fromY | float | 改变前的位置Y |
| fromZ | float | 改变前的位置Z |
| toX | float | 改变后的位置x |
| toY | float | 改变后的位置Y |
| toZ | float | 改变后的位置Z |
- 返回值
无
- 备注
- 实体转移维度时,如果对应维度的对应位置的区块尚未加载,实体会缓存在维度自身的缓冲区中,直到对应区块被加载时才会创建对应的实体,此事件的抛出只代表实体从原维度消失,不代表必定会在对应维度出现
- 注意,玩家维度改变时不触发该事件,而是会触发DimensionChangeServerEvent事件
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityDefinitionsEventServerEvent
服务端
- 描述
触发时机:生物定义json文件中设置的event触发时同时触发。生物行为变更事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 生物id |
| eventName | str | 触发的事件名称 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityDieLoottableAfterServerEvent
服务端
- 描述
触发时机:生物死亡掉落物品之后
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| dieEntityId | str | 死亡实体的entityId |
| attacker | str | 伤害来源的entityId |
| itemList | list(dict) | 掉落物品列表,每个元素为一个itemDict,格式可参考物品信息字典 |
| itemEntityIdList | list(str) | 掉落物品entityId列表 |
- 返回值
无
- 备注
- 该事件为生物死亡掉落物品生成后触发,可以得到掉落物的id列表,如果需要更改掉落物,请使用EntityDieLoottableServerEvent
- 该事件在生物死亡后会触发,无论是否掉落物品,因此掉落物品列表可能存在为空的情况
- 掉落物不包含玩家或生物携带以及背包内的物品,若要获取死亡后由背包扔出的物品请参考EntityDroppedItemServerEvent事件
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityDieLoottableServerEvent
服务端
- 描述
触发时机:生物死亡掉落物品时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| dieEntityId | str | 死亡实体的entityId |
| attacker | str | 伤害来源的entityId |
| itemList | list(dict) | 掉落物品列表,每个元素为一个itemDict,格式可参考物品信息字典 |
| dirty | bool | 默认为False,如果需要修改掉落列表需将该值设为True |
- 返回值
无
- 备注
- 只有当dirty为True时才会重新读取item列表并生成对应的掉落物,如果不需要修改掉落结果的话请勿随意修改dirty值
- 该事件在生物死亡后会触发,无论是否掉落物品,因此掉落物品列表可能存在为空的情况
- 掉落物不包含玩家或生物携带以及背包内的物品,若要获取死亡后由背包扔出的物品请参考EntityDroppedItemServerEvent事件
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityDroppedItemServerEvent
服务端
- 描述
触发时机:生物扔出物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 生物Id |
| itemDict | dict | 扔出的物品的物品信息字典 |
| itemEntityId | str | 物品实体Id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityEffectDamageServerEvent
服务端
- 描述
生物受到状态伤害/回复事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| damage | float | 伤害值(伤害吸收后实际扣血量),负数表示生命回复量 |
| attributeBuffType | int | 状态类型,参考[AttributeBuffType](../枚举值/AttributeBuffType.md) |
| duration | float | 状态持续时间,单位秒(s) |
| lifeTimer | float | 状态生命时间,单位秒(s) |
| isInstantaneous | bool | 是否为立即生效状态 |
| cause | str | 伤害来源,详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityLoadScriptEvent
服务端
- 描述
数据库加载实体自定义数据时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| args | list | 该事件的参数为长度为2的list,而非dict,其中list的第一个元素为实体id |
- 返回值
无
- 备注
- 只有使用过extraData组件的SetExtraData接口的实体才有此事件,触发时可以通过extraData组件的GetExtraData或GetWholeExtraData接口获取该实体的自定义数据
## EntityModelChangedClientEvent
客户端
- 描述
触发时机:实体模型切换时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| newModel | str | 新的模型名字 |
| oldModel | str | 原来的模型名字 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityMotionStartServerEvent
服务端
- 描述
实体运动器开始事件。实体(包含玩家)添加运动器后,运动器开始运行时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| motionId | int | 运动器id |
| entityId | str | 实体id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityMotionStopServerEvent
服务端
- 描述
实体运动器停止事件。实体(包含玩家)添加运动器并开始运行后,运动器自动停止时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| motionId | int | 运动器id |
| entityId | str | 实体id |
| remove | bool | 是否移除该运动器,设置为False则保留,默认为True,即运动器停止后自动移除,该参数设置只对非玩家实体有效 |
- 返回值
无
- 备注
- 注意:该事件触发表示运动器播放顺利完成,手动调用的[StopEntityMotion](../接口/实体/行为.md#StopEntityMotion)、[RemoveEntityMotion](../接口/实体/行为.md#RemoveEntityMotion)以及实体被销毁导致的运动器停止不会触发该事件。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityPickupItemServerEvent
服务端
- 描述
有minecraft:behavior.pickup_items行为的生物拾取物品时触发该事件,例如村民拾取面包、猪灵拾取金锭
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 生物Id |
| itemDict | dict | 拾取的物品的物品信息字典 |
| secondaryActor | str | 物品给予者id(一般是玩家),如果不存在给予者的话,这里为空字符串 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityStartRidingEvent
服务端
- 描述
当实体骑乘上另一个实体时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 乘骑者实体id |
| rideId | str | 被乘骑者实体id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityStopRidingEvent
服务端客户端
### 服务端事件
- 描述
触发时机:当实体停止骑乘时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 实体id |
| rideId | str | 坐骑id |
| exitFromRider | bool | 是否下坐骑 |
| entityIsBeingDestroyed | bool | 坐骑是否将要销毁 |
| switchingRides | bool | 是否换乘坐骑 |
| cancel | bool | 设置为True可以取消(需要与客户端事件一同取消) |
- 返回值
无
- 备注
- 以下情况不允许取消
1. ride组件StopEntityRiding接口
2. 玩家传送时
3. 坐骑死亡时
4. 玩家睡觉时
5. 玩家死亡时
6. 未驯服的马
7. 怕水的生物坐骑进入水里
8. 切换维度
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
### 客户端事件
- 描述
触发时机:当实体停止骑乘时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 实体id |
| rideId | str | 坐骑id |
| exitFromRider | bool | 是否下坐骑 |
| entityIsBeingDestroyed | bool | 坐骑是否将要销毁 |
| switchingRides | bool | 是否换乘坐骑 |
| cancel | bool | 设置为True可以取消(需要与服务端事件一同取消) |
- 返回值
无
- 备注
- 以下情况不允许取消
1. ride组件StopEntityRiding接口
2. 玩家传送时
3. 坐骑死亡时
4. 玩家睡觉时
5. 玩家死亡时
6. 未驯服的马
7. 怕水的生物坐骑进入水里
8. 切换维度
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## EntityTickServerEvent
服务端
- 描述
实体tick时触发。该事件为20帧每秒。需要使用AddEntityTickEventWhiteList添加触发该事件的实体类型白名单。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| identifier | str | 实体identifier |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
### 相关接口
### AddEntityTickEventWhiteList
method in mod.server.extraServerApi
- 描述
添加实体类型到EntityTickServerEvent事件的触发白名单。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| identifier | str | 实体的类型名,原版的实体需要加上minecraft命名空间 |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
# 让牛触发EntityTickServerEvent事件
serverApi.AddEntityTickEventWhiteList('minecraft:cow')
```
## HealthChangeBeforeServerEvent
服务端
- 描述
生物生命值或最大生命值发生变化之前触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| from | float | 变化前的生命值 |
| to | float | 将要变化到的生命值,cancel设置为True时可以取消该变化,但是此参数不变 |
| byScript | bool | 是否通过SetAttrValue或SetAttrMaxValue调用产生的变化 |
| cancel | bool | 是否取消该变化 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## HealthChangeClientEvent
客户端
- 描述
生物生命值发生变化时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| from | float | 变化前的生命值 |
| to | float | 变化后的生命值 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## HealthChangeServerEvent
服务端
- 描述
生物生命值发生变化时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| from | float | 变化前的生命值 |
| to | float | 变化后的生命值 |
| byScript | bool | 是否通过SetAttrValue或SetAttrMaxValue调用产生的变化 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## LeaveEntityClientEvent
客户端
- 描述
玩家远离生物时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| entityId | str | 远离的生物实体id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## MobDieEvent
服务端
- 描述
实体死亡时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 实体id |
| attacker | str | 伤害来源id |
| cause | str | 伤害来源,详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
| customTag | str | 使用[Hurt接口](../接口/实体/行为.md#hurt)传入的自定义伤害类型 |
- 返回值
无
- 备注
- 注意:不能在该事件回调中对此玩家手持物品进行修改,如[SpawnItemToPlayerCarried](../接口/玩家/背包.md#spawnitemtoplayercarried)、[ChangePlayerItemTipsAndExtraId](../接口/玩家/背包.md#changeplayeritemtipsandextraId)等接口
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## MobGriefingBlockServerEvent
服务端
- 描述
环境生物改变方块时触发,触发的时机与mobgriefing游戏规则影响的行为相同
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发,默认为False,若设为True,可阻止触发后续物理交互事件 |
| blockX | int | 方块x坐标 |
| blockY | int | 方块y坐标 |
| blockZ | int | 方块z坐标 |
| entityId | str | 触发的entity的唯一ID |
| blockName | str | 方块的identifier,包含命名空间及名称 |
| dimensionId | int | 维度id |
- 返回值
无
- 备注
- 触发的时机包括:生物踩踏耕地、破坏单个方块、破门、火矢点燃方块、凋灵boss破坏方块、末影龙破坏方块、末影人捡起方块、蠹虫破坏被虫蚀的方块、蠹虫把方块变成被虫蚀的方块、凋零杀死生物生成凋零玫瑰、生物踩坏海龟蛋。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnFireHurtEvent
服务端
- 描述
生物受到火焰伤害时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| victim | str | 受伤实体id |
| src | str | 火焰创建者id |
| fireTime | float | 着火时间,单位秒, 不支持修改 |
| cancel | bool | 是否取消此处火焰伤害 |
| cancelIgnite | bool | 是否取消点燃效果 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnGroundClientEvent
客户端
- 描述
实体着地事件。玩家,沙子,铁砧,掉落的物品,点燃的TNT掉落地面时触发,其余实体着地不触发。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 实体id |
- 返回值
无
- 备注
- 因为掉落是服务端与客户端各自计算的,对于掉落的方块,有时会出现服务端先着地,然后把FallingBlock实体移除掉了,导致客户端没触发着地事件的情况。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnGroundServerEvent
服务端
- 描述
实体着地事件。实体,掉落的物品,点燃的TNT掉落地面时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 实体id |
- 返回值
无
- 备注
- 不支持抛射物实体
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnKnockBackServerEvent
服务端
- 描述
实体被击退时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 实体id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnMobHitBlockServerEvent
服务端
- 描述
触发时机:通过OpenMobHitBlockDetection打开方块碰撞检测后,当生物(不包括玩家)碰撞到方块时触发该事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 碰撞到方块的生物Id |
| posX | int | 碰撞方块x坐标 |
| posY | int | 碰撞方块y坐标 |
| posZ | int | 碰撞方块z坐标 |
| blockId | str | 碰撞方块的identifier |
| auxValue | int | 碰撞方块的附加值 |
| dimensionId | int | 维度id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
### 相关接口
### OpenMobHitBlockDetection
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
开启碰撞方块的检测,开启后,生物(不包括玩家)碰撞到方块时会触发OnMobHitBlockServerEvent事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 生物的实体Id |
| precision | float | 碰撞检测精度,参数需要在区间[0, 1),值越小,表示碰撞检测精度越高(可以理解为轻轻碰一下就能触发) |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 注:该碰撞检测会屏蔽草、空气、火、高草四种方块
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.OpenMobHitBlockDetection("-123456",0.0001)
```
### CloseMobHitBlockDetection
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
关闭碰撞方块的检测,关闭后,生物(不包括玩家)碰撞到方块时将不会触发OnMobHitBlockServerEvent事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 生物的实体Id |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.CloseMobHitBlockDetection("-123456")
```
## OnMobHitMobClientEvent
客户端
- 描述
触发时机:通过OpenPlayerHitMobDetection打开生物碰撞检测后,当生物间(包含玩家)碰撞时触发该事件。注:客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| mobId | str | 当前生物的id |
| hittedMobList | list[str] | 当前生物碰撞到的其他所有生物id的list |
- 返回值
无
- 备注
- 本事件代替原有的OnPlayerHitMobClientEvent事件
- 监听本事件会导致客户端在实体较多时严重掉帧,建议监听服务端版本事件OnMobHitMobServerEvent
- 示例
```python
# ClientSystem
import mod.client.extraClientApi as clientApi
self.ListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"OnMobHitMobClientEvent",
self, self.OnMobHitMobClientEvent)
def OnMobHitMobClientEvent(self, args):
mobId = args.get('mobId', '')
hittedMobs = args.get('hittedMobList', [])
```
### 相关接口
### OpenPlayerHitMobDetection
method in mod.client.component.playerCompClient.PlayerCompClient
- 描述
开启对其他生物的碰撞检测,开启后和生物间发生碰撞时会触发OnMobHitMobClientEvent事件。(该接口对生物同样有效)
- 参数
无
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否开启成功 |
- 备注
- 该接口对生物同样有效
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerHitMobDetection()
```
### ClosePlayerHitMobDetection
method in mod.client.component.playerCompClient.PlayerCompClient
- 描述
关闭碰撞生物的检测,关闭后将不会触发OnMobHitMobClientEvent事件。(该接口对生物同样有效)
- 参数
无
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否关闭成功 |
- 备注
- 该接口对生物同样有效
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerHitMobDetection()
```
## OnMobHitMobServerEvent
服务端
- 描述
触发时机:通过OpenPlayerHitMobDetection打开生物碰撞检测后,当生物间(包含玩家)碰撞时触发该事件。注:客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| mobId | str | 当前生物的id |
| hittedMobList | list[str] | 当前生物碰撞到的其他所有生物id的list |
- 返回值
无
- 备注
- 本事件代替原有的OnPlayerHitMobServerEvent事件
- 示例
```python
# ServerSystem
import mod.server.extraServerApi as serverApi
self.ListenForEvent(serverApi.GetEngineNamespace(),
serverApi.GetEngineSystemName(),
"OnMobHitMobServerEvent",
self, self.OnMobHitMobServerEvent)
def OnMobHitMobServerEvent(self, args):
mobId = args.get('mobId', '')
hittedMobs = args.get('hittedMobList', [])
```
### 相关接口
### OpenPlayerHitMobDetection
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
开启对其他生物的碰撞检测,开启后和生物间发生碰撞时会触发OnMobHitMobServerEvent事件。(该接口对生物同样有效)
- 参数
无
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否开启成功 |
- 备注
- 该接口对生物同样有效
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerHitMobDetection()
```
### ClosePlayerHitMobDetection
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
关闭碰撞生物的检测,关闭后将不会触发OnMobHitMobServerEvent事件。
- 参数
无
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否关闭成功 |
- 备注
- 该接口对生物同样有效
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerHitMobDetection()
```
## ProjectileCritHitEvent
服务端
- 描述
触发时机:当抛射物与头部碰撞时触发该事件。注:需调用OpenPlayerCritBox开启玩家爆头后才能触发。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 抛射物id |
| targetId | str | 碰撞目标id |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
### 相关接口
### OpenPlayerCritBox
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
开启玩家爆头,开启后该玩家头部被击中后会触发ProjectileCritHitEvent事件。
- 参数
无
- 返回值
无
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerCritBox()
```
### ClosePlayerCritBox
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
关闭玩家爆头,关闭后将无法触发ProjectileCritHitEvent事件。
- 参数
无
- 返回值
无
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerCritBox()
```
## ProjectileDoHitEffectEvent
服务端
- 描述
触发时机:当抛射物碰撞时触发该事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| id | str | 抛射物id |
| hitTargetType | str | 碰撞目标类型,'ENTITY'或是'BLOCK' |
| targetId | str | 碰撞目标id |
| hitFace | int | 撞击在方块上的面id,参考[Facing枚举](../枚举值/Facing.md) |
| x | float | 碰撞x坐标 |
| y | float | 碰撞y坐标 |
| z | float | 碰撞z坐标 |
| blockPosX | int | 碰撞是方块时,方块x坐标 |
| blockPosY | int | 碰撞是方块时,方块y坐标 |
| blockPosZ | int | 碰撞是方块时,方块z坐标 |
| srcId | str | 创建者id |
| cancel | bool | 是否取消这个碰撞事件,若取消可以设置为True |
- 返回值
无
- 示例
```python
# ServerSystem
import mod.server.extraServerApi as serverApi
# 监听引擎的事件 :self指ServerSystem类的实例 ProjectileDoHitEffectEvent是系统事件
self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(),
"ProjectileDoHitEffectEvent", self, self.OnProjectileDoHitEffectEvent)
def OnProjectileDoHitEffectEvent(self, args):
# 设为True后,将取消这次的抛射物碰撞事件
args["cancel"] = True
```
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## RefreshEffectServerEvent
服务端
- 描述
触发时机:实体身上状态效果更新时触发,更新条件1、新增状态等级较高,更新状态等级及时间;2、新增状态等级不变,时间较长,更新状态持续时间
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| effectName | str | 更新状态效果的名字 |
| effectDuration | int | 更新后状态效果剩余持续时间,单位秒 |
| effectAmplifier | int | 更新后的状态效果放大倍数 |
| damage | float | 状态造成的伤害值,如药水 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## RemoveEffectServerEvent
服务端
- 描述
触发时机:实体身上状态效果被移除时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| effectName | str | 被移除状态效果的名字 |
| effectDuration | int | 被移除状态效果的剩余持续时间,单位秒 |
| effectAmplifier | int | 被移除状态效果的放大倍数 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## SpawnProjectileServerEvent
服务端
- 描述
触发时机:抛射物生成时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| projectileId | str | 抛射物的实体id |
| projectileIdentifier | str | 抛射物的identifier |
| spawnerId | str | 发射者的实体id,没有发射者时为-1 |
- 返回值
无
- 备注
- 该事件里无法获取弹射物实体的auxvalue。如有需要可以延迟一帧获取,或者在ProjectileDoHitEffectEvent获取
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## StartRidingClientEvent
客户端
- 描述
触发时机:一个实体即将骑乘另外一个实体
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| actorId | str | 骑乘者的唯一ID |
| victimId | str | 被骑乘实体的唯一ID |
- 返回值
无
- 备注
- 如果需要修改cancel,请通过服务端事件StartRidingServerEvent同步修改,客户端触发该事件时,实体已经骑乘成功。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## StartRidingServerEvent
服务端
- 描述
触发时机:一个实体即将骑乘另外一个实体
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发,默认为False,若设为True,可阻止触发后续的实体交互事件 |
| actorId | str | 骑乘者的唯一ID |
| victimId | str | 被骑乘实体的唯一ID |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## WillAddEffectServerEvent
服务端
- 描述
触发时机:实体即将获得状态效果前
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| effectName | str | 实体获得状态效果的名字 |
| effectDuration | int | 状态效果的持续时间,单位秒 |
| effectAmplifier | int | 状态效果的放大倍数 |
| cancel | bool | 设置为True可以取消 |
| damage | float | 状态将会造成的伤害值,如药水;需要注意,该值不一定是最终的伤害值,例如被伤害吸收效果扣除。只有持续时间为0时有用 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## WillTeleportToServerEvent
服务端
- 描述
实体即将传送或切换维度
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发,默认为False,若设为True,可阻止触发后续的传送 |
| entityId | str | 实体的唯一ID |
| fromDimensionId | int | 传送前所在的维度 |
| toDimensionId | int | 传送后的目标维度 |
| fromX | int | 传送前所在的x坐标 |
| fromY | int | 传送前所在的y坐标 |
| fromZ | int | 传送前所在的z坐标 |
| toX | int | 传送目标地点的x坐标 |
| toY | int | 传送目标地点的y坐标 |
| toZ | int | 传送目标地点的z坐标 |
| cause | str | 传送理由,详情见MinecraftEnum.EntityTeleportCause |
- 返回值
无
- 备注
- 假如目标维度尚未在内存中创建(即服务器启动之后,到传送之前,没有玩家进入过这个维度),那么此时事件中返回的目标地点坐标是算法生成的,不能保证正确。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件