Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/事件/实体.md
2025-03-18 14:46:12 +08:00

1514 lines
55 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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