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

1212 lines
44 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> | 描述 |
| --- | --- | --- |
| [AddExpEvent](玩家.md#addexpevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当玩家增加经验时触发该事件。 |
| [AddLevelEvent](玩家.md#addlevelevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当玩家升级时触发该事件。 |
| [CameraMotionStartClientEvent](玩家.md#cameramotionstartclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 相机运动器开始事件。相机添加运动器后,运动器开始运行时触发 |
| [CameraMotionStopClientEvent](玩家.md#cameramotionstopclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 相机运动器停止事件。相机添加运动器并开始运行后,运动器自动停止时触发 |
| [ChangeLevelUpCostServerEvent](玩家.md#changelevelupcostserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:获取玩家下一个等级升级经验时,用于重载玩家的升级经验,每个等级在重置之前都只会触发一次 |
| [DimensionChangeClientEvent](玩家.md#dimensionchangeclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 玩家维度改变时客户端抛出 |
| [DimensionChangeFinishClientEvent](玩家.md#dimensionchangefinishclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 玩家维度改变完成后客户端抛出 |
| [DimensionChangeFinishServerEvent](玩家.md#dimensionchangefinishserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家维度改变完成后服务端抛出 |
| [DimensionChangeServerEvent](玩家.md#dimensionchangeserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家维度改变时服务端抛出 |
| [ExtinguishFireClientEvent](玩家.md#extinguishfireclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 玩家扑灭火焰时触发。下雨,倒水等方式熄灭火焰不会触发。 |
| [ExtinguishFireServerEvent](玩家.md#extinguishfireserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家扑灭火焰时触发。下雨,倒水等方式熄灭火焰不会触发。 |
| [GameTypeChangedClientEvent](玩家.md#gametypechangedclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 个人游戏模式发生变化时客户端触发。 |
| [GameTypeChangedServerEvent](玩家.md#gametypechangedserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 当默认游戏模式或个人游戏模式发生变化时服务端触发,如果个人游戏模式不为默认时,修改默认游戏模式也会同时修改个人游戏模式,此时会触发两次该事件 |
| [MountTamingEvent](玩家.md#mounttamingevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家通过骑乘驯服生物后触发该事件 |
| [OnLocalPlayerActionClientEvent](玩家.md#onlocalplayeractionclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 玩家动作事件,当本地玩家开始/停止某些动作时触发该事件 |
| [OnLocalPlayerStartJumpClientEvent](玩家.md#onlocalplayerstartjumpclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 本地玩家开始跳跃时触发 |
| [OnPlayerActionServerEvent](玩家.md#onplayeractionserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家动作事件,当玩家开始/停止某些动作时触发该事件 |
| [OnPlayerHitBlockClientEvent](玩家.md#onplayerhitblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机通过OpenPlayerHitBlockDetection打开方块碰撞检测后当玩家碰撞到方块时触发该事件。玩家着地时会触发OnGroundClientEvent而不是该事件。客户端和服务端分别作碰撞检测可能两个事件返回的结果略有差异。 |
| [OnPlayerHitBlockServerEvent](玩家.md#onplayerhitblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机通过OpenPlayerHitBlockDetection打开方块碰撞检测后当玩家碰撞到方块时触发该事件。监听玩家着地请使用客户端的OnGroundClientEvent。客户端和服务端分别作碰撞检测可能两个事件返回的略有差异。 |
| [PerspChangeClientEvent](玩家.md#perspchangeclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 视角切换时会触发的事件 |
| [PlayerAttackEntityEvent](玩家.md#playerattackentityevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当玩家攻击时触发该事件。 |
| [PlayerAttackEntityEvent](玩家.md#playerattackentityevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:当本地玩家攻击时触发该事件。 |
| [PlayerCheatSpinAttackServerEvent](玩家.md#playercheatspinattackserverevent) | <span style="display:inline;color:#ff5555">Apollo</span> | 触发时机:玩家开始/结束快速旋转攻击并且不符合发送快速旋转攻击条件时触发(装备激流附魔的三叉戟、在水中或雨中,且未骑乘) |
| [PlayerDieEvent](玩家.md#playerdieevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当玩家死亡时触发该事件。 |
| [PlayerDoInteractServerEvent](玩家.md#playerdointeractserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家与有minecraft:interact组件的生物交互时触发该事件例如玩家手持空桶对牛挤奶、玩家手持打火石点燃苦力怕 |
| [PlayerEatFoodServerEvent](玩家.md#playereatfoodserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家吃下食物时触发 |
| [PlayerFeedEntityServerEvent](玩家.md#playerfeedentityserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家喂养生物时触发,例如玩家手持小麦喂养牛、玩家手持胡萝卜喂养幼年猪。 |
| [PlayerHungerChangeServerEvent](玩家.md#playerhungerchangeserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家饥饿度变化时触发该事件 |
| [PlayerHurtEvent](玩家.md#playerhurtevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当玩家受伤害前触发该事件。 |
| [PlayerInteractServerEvent](玩家.md#playerinteractserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家可以与实体交互时。如果是鼠标控制模式,则当准心对着实体时触发。如果是触屏模式,则触发时机与屏幕下方的交互按钮显示的时机相同。玩家真正与实体发生交互的事件见[PlayerDoInteractServerEvent](#playerdointeractserverevent) |
| [PlayerNamedEntityServerEvent](玩家.md#playernamedentityserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家用命名牌重命名实体时触发,例如玩家手持命名牌对羊修改名字、玩家手持命名牌对盔甲架修改名字。 |
| [PlayerRespawnEvent](玩家.md#playerrespawnevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家复活时触发该事件。 |
| [PlayerRespawnFinishServerEvent](玩家.md#playerrespawnfinishserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家复活完毕时触发 |
| [PlayerSleepServerEvent](玩家.md#playersleepserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家使用床睡觉成功 |
| [PlayerSpinAttackServerEvent](玩家.md#playerspinattackserverevent) | <span style="display:inline;color:#ff5555">Apollo</span> | 触发时机:玩家开始/结束快速旋转攻击时触发 |
| [PlayerStopSleepServerEvent](玩家.md#playerstopsleepserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家停止睡觉 |
| [PlayerTeleportEvent](玩家.md#playerteleportevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机当玩家传送时触发该事件玩家使用末影珍珠或tp指令时。 |
| [PlayerTrySleepServerEvent](玩家.md#playertrysleepserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家尝试使用床睡觉 |
| [ServerPlayerGetExperienceOrbEvent](玩家.md#serverplayergetexperienceorbevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家获取经验球时触发的事件 |
| [StoreBuySuccServerEvent](玩家.md#storebuysuccserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家游戏内购买商品时服务端抛出的事件 |
# 玩家
## AddExpEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当玩家增加经验时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| id | str | 玩家id |
| addExp | int | 增加的经验值 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## AddLevelEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当玩家升级时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| id | str | 玩家id |
| addLevel | int | 增加的等级值 |
| newLevel | int | 新的等级 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## CameraMotionStartClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
相机运动器开始事件。相机添加运动器后,运动器开始运行时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| motionId | int | 运动器id |
- 返回值
## CameraMotionStopClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
相机运动器停止事件。相机添加运动器并开始运行后,运动器自动停止时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| motionId | int | 运动器id |
| remove | bool | 是否移除该运动器设置为False则保留默认为True即运动器停止后自动移除 |
- 返回值
- 备注
- 注意:该事件触发表示运动器播放顺利完成,手动调用的[StopCameraMotion](../接口/玩家/摄像机.md#StopCameraMotion)、[RemoveCameraMotion](../接口/玩家/摄像机.md#RemoveCameraMotion)不会触发该事件。
## ChangeLevelUpCostServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:获取玩家下一个等级升级经验时,用于重载玩家的升级经验,每个等级在重置之前都只会触发一次
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| level | int | 玩家当前等级 |
| levelUpCostExp | int | 当前等级升级到下个等级需要的经验值当设置升级经验小于1时会被强制调整到1 |
| changed | bool | 设置为True重载玩家升级经验才会生效 |
- 返回值
### 相关接口
<span id="ClearDefinedLevelUpCost"></span>
### ClearDefinedLevelUpCost
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
接口用于重置升级经验。使用ChangeLevelUpCostServerEvent事件设置升级经验后升级经验无法调整。需要调整升级经验时可使用该接口。使用步骤如下1、使用ClearDefineLevelUpconst2、在升级抛出ChangeLevelUpCostServerEvent事件后重新设置经验。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| level | int | 指定清理的等级加入传入的数值小于0则清理所有等级的升级经验值缓存 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否清理成功。 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
suc = comp.ClearDefinedLevelUpCost(1)
```
## DimensionChangeClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
玩家维度改变时客户端抛出
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| fromDimensionId | int | 维度改变前的维度 |
| toDimensionId | int | 维度改变后的维度 |
| fromX | float | 改变前的位置x |
| fromY | float | 改变前的位置Y |
| fromZ | float | 改变前的位置Z |
| toX | float | 改变后的位置x |
| toY | float | 改变后的位置Y |
| toZ | float | 改变后的位置Z |
- 返回值
- 备注
- 当通过传送门从末地回到主世界时toY值为32767其他情况一般会比设置值高1.62
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## DimensionChangeFinishClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
玩家维度改变完成后客户端抛出
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| fromDimensionId | int | 维度改变前的维度 |
| toDimensionId | int | 维度改变后的维度 |
| toPos | tuple(float,float,float) | 改变后的位置x,y,z,其中y值为脚底加上角色的身高值 |
- 返回值
- 备注
- 当通过传送门从末地回到主世界时toPos的y值为32767其他情况一般会比设置值高1.62
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## DimensionChangeFinishServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家维度改变完成后服务端抛出
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| fromDimensionId | int | 维度改变前的维度 |
| toDimensionId | int | 维度改变后的维度 |
| toPos | tuple(float,float,float) | 改变后的位置x,y,z,其中y值为脚底加上角色的身高值 |
- 返回值
- 备注
- 当通过传送门从末地回到主世界时toPos的y值为32767其他情况一般会比设置值高1.62
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## DimensionChangeServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家维度改变时服务端抛出
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| fromDimensionId | int | 维度改变前的维度 |
| toDimensionId | int | 维度改变后的维度 |
| fromX | float | 改变前的位置x |
| fromY | float | 改变前的位置Y |
| fromZ | float | 改变前的位置Z |
| toX | float | 改变后的位置x |
| toY | float | 改变后的位置Y |
| toZ | float | 改变后的位置Z |
- 返回值
- 备注
- 当通过传送门从末地回到主世界时toY值为32767其他情况一般会比设置值高1.62
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ExtinguishFireClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
玩家扑灭火焰时触发。下雨,倒水等方式熄灭火焰不会触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(float,float,float) | 火焰方块的坐标 |
| playerId | str | 玩家id |
| cancel | bool | 修改为True时可阻止玩家扑灭火焰。需要与ExtinguishFireServerEvent一起修改。 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ExtinguishFireServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家扑灭火焰时触发。下雨,倒水等方式熄灭火焰不会触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(float,float,float) | 火焰方块的坐标 |
| playerId | str | 玩家id |
| cancel | bool | 修改为True时可阻止玩家扑灭火焰。需要与ExtinguishFireClientEvent一起修改。 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## GameTypeChangedClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
个人游戏模式发生变化时客户端触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| oldGameType | int | 切换前的游戏模式 |
| newGameType | int | 切换后的游戏模式 |
- 返回值
- 备注
- 游戏模式GetMinecraftEnum().GameType.*:SurvivalCreativeAdventure分别为0~2
默认游戏模式发生变化时最后反映在个人游戏模式之上。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## GameTypeChangedServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
当默认游戏模式或个人游戏模式发生变化时服务端触发,如果个人游戏模式不为默认时,修改默认游戏模式也会同时修改个人游戏模式,此时会触发两次该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id[SetDefaultGameType](../接口/世界/游戏规则.md#SetDefaultGameType)接口改变游戏模式时该参数为空字符串 |
| oldGameType | int | 切换前的游戏模式 |
| newGameType | int | 切换后的游戏模式 |
- 返回值
- 备注
- 游戏模式GetMinecraftEnum().GameType.*:SurvivalCreativeAdventure分别为0~2Spectator为6
默认游戏模式发生变化时最后反映在个人游戏模式之上。
注意避免在该事件中调用修改ability相关的接口比如ChangePlayerFlyState等接口如确实需要可加定时器延后调用
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## MountTamingEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家通过骑乘驯服生物后触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| eid | str | 生物id |
| pid | str | 玩家id |
- 返回值
- 备注
- 该事件是检测minecraft:tamemount行为包组件即玩家通过不断骑乘生物使其冒出爱心时触发
## OnLocalPlayerActionClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
玩家动作事件,当本地玩家开始/停止某些动作时触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| actionType | int | 动作事件枚举详见Minecraft枚举值文档的[PlayerActionType](../枚举值/PlayerActionType.md) |
- 返回值
## OnLocalPlayerStartJumpClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
本地玩家开始跳跃时触发
- 参数
- 返回值
## OnPlayerActionServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家动作事件,当玩家开始/停止某些动作时触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| actionType | int | 动作事件枚举详见Minecraft枚举值文档的[PlayerActionType](../枚举值/PlayerActionType.md) |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## OnPlayerHitBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机通过OpenPlayerHitBlockDetection打开方块碰撞检测后当玩家碰撞到方块时触发该事件。玩家着地时会触发OnGroundClientEvent而不是该事件。客户端和服务端分别作碰撞检测可能两个事件返回的结果略有差异。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 碰撞到方块的玩家Id |
| posX | int | 碰撞方块x坐标 |
| posY | int | 碰撞方块y坐标 |
| posZ | int | 碰撞方块z坐标 |
| blockId | str | 碰撞方块的identifier |
| auxValue | int | 碰撞方块的附加值 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="OpenPlayerHitBlockDetection"></span>
### OpenPlayerHitBlockDetection
method in mod.client.component.playerCompClient.PlayerCompClient
- 描述
开启碰撞方块的检测开启后碰撞时会触发OnPlayerHitBlockClientEvent事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| precision | float | 碰撞检测精度,参数需要在区间[0, 1),值越小,表示碰撞检测精度越高(可以理解为轻轻碰一下就能触发) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 注:该碰撞检测会屏蔽草、空气、火、高草四种方块
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreatePlayer(entityId)
comp.OpenPlayerHitBlockDetection(0.0001)
```
<span id="ClosePlayerHitBlockDetection"></span>
### ClosePlayerHitBlockDetection
method in mod.client.component.playerCompClient.PlayerCompClient
- 描述
关闭碰撞方块的检测关闭后将不会触发OnPlayerHitBlockClientEvent事件
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreatePlayer(entityId)
comp.ClosePlayerHitBlockDetection()
```
## OnPlayerHitBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机通过OpenPlayerHitBlockDetection打开方块碰撞检测后当玩家碰撞到方块时触发该事件。监听玩家着地请使用客户端的OnGroundClientEvent。客户端和服务端分别作碰撞检测可能两个事件返回的略有差异。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | 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="OpenPlayerHitBlockDetection"></span>
### OpenPlayerHitBlockDetection
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
开启碰撞方块的检测开启后碰撞时会触发OnPlayerHitBlockServerEvent事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| precision | float | 碰撞检测精度,参数需要在区间[0, 1),值越小,表示碰撞检测精度越高(可以理解为轻轻碰一下就能触发) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 注:该碰撞检测会屏蔽草、空气、火、高草四种方块
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerHitBlockDetection(0.0001)
```
<span id="ClosePlayerHitBlockDetection"></span>
### ClosePlayerHitBlockDetection
method in mod.server.component.playerCompServer.PlayerCompServer
- 描述
关闭碰撞方块的检测关闭后将不会触发OnPlayerHitBlockServerEvent事件
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerHitBlockDetection()
```
## PerspChangeClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
视角切换时会触发的事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| from | int | 切换前的视角 |
| to | int | 切换后的视角 |
- 返回值
- 备注
- 视角数字代表含义
0: 第一人称
1: 第三人称背面
2: 第三人称正面
## PlayerAttackEntityEvent
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
<span id="server"></span>
### 服务端事件
- 描述
触发时机:当玩家攻击时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| victimId | str | 受击者id |
| damage | float | 伤害值引擎传过来的值是0 允许脚本层修改为其他数 |
| isValid | int | 脚本是否设置伤害值1表示是0 表示否 |
| cancel | bool | 是否取消该次攻击,默认不取消 |
| isKnockBack | bool | 是否支持击退效果,默认支持,当不支持时将屏蔽武器击退附魔效果 |
| isCrit | bool | 本次攻击是否产生暴击,不支持修改 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
<span id="client"></span>
### 客户端事件
- 描述
触发时机:当本地玩家攻击时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| victimId | str | 受击者id |
| damage | float | 客户端收到的是真实伤害值,且修改无效 |
| isCrit | bool | 本次攻击是否产生暴击,不支持修改 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerCheatSpinAttackServerEvent
<span style="display:inline;color:#ff5555">仅Apollo可用</span>
- 描述
触发时机:玩家开始/结束快速旋转攻击并且不符合发送快速旋转攻击条件时触发(装备激流附魔的三叉戟、在水中或雨中,且未骑乘)
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家的entityId |
| isStart | bool | True时代表开始快速旋转攻击False时代表结束快速旋转攻击 |
- 返回值
- 备注
- 假如没有自定义类似三叉戟/激流附魔的物品,那么触发此事件说明此有很大可能此玩家使用了【杀戮光环】外挂
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerDieEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当玩家死亡时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| id | str | 玩家id |
| attacker | str | 伤害来源id |
| customTag | str | 使用[Hurt接口](../接口/实体/行为.md#hurt)传入的自定义伤害类型 |
| cause | str | 伤害来源详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerDoInteractServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家与有minecraft:interact组件的生物交互时触发该事件例如玩家手持空桶对牛挤奶、玩家手持打火石点燃苦力怕
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| itemDict | dict | 交互时使用物品的<a href="../../../mcguide/20-玩法开发/10-基本概念/1-我的世界基础概念.html#物品信息字典#物品信息字典">物品信息字典</a> |
| interactEntityId | str | 交互的生物entityId |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerEatFoodServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家吃下食物时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| itemDict | dict | 食物物品的<a href="../../../mcguide/20-玩法开发/10-基本概念/1-我的世界基础概念.html#物品信息字典#物品信息字典">物品信息字典</a> |
| hunger | int | 食物增加的饥饿值,可修改 |
| nutrition | float | 食物的营养价值,回复饱和度 = 食物增加的饥饿值 * 食物的营养价值 * 2饱和度最大不超过当前饥饿值可修改 |
- 返回值
- 备注
- 由于牛奶本身并没有饱食度的概念因此当喝牛奶触发该事件时饥饿度、营养价值字段无效并始终为0
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerFeedEntityServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家喂养生物时触发,例如玩家手持小麦喂养牛、玩家手持胡萝卜喂养幼年猪。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 主动喂养生物的玩家的唯一ID |
| entityId | str | 被喂养生物的唯一ID |
| itemDict | dict | 当前玩家手持物品的<a href="../../../mcguide/20-玩法开发/10-基本概念/1-我的世界基础概念.html#物品信息字典#物品信息字典">物品信息字典</a> |
| cancel | bool | 是否取消触发默认为False若设为True可阻止触发后续的生物喂养逻辑 |
- 返回值
- 备注
- 1.对于幼年生物,用对应的物品喂养后就可以触发事件,例如用小麦喂养幼年牛、用生鲑鱼喂养幼年猫;
2.对于成年生物,用对应的物品喂养后,该生物要进入“求爱模式”(持续散发红心粒子),才可以触发事件。特殊的成年生物列举如下:
a.可骑乘生物,例如马,玩家要驯服马后,再给它喂养食物(例如金苹果、金萝卜),才可以触发事件;已驯服的马受伤后,用金苹果喂养时会治疗马,不触发事件,马的血量回满时,再喂养金苹果,才会触发事件;
b.可驯服生物,例如狼,玩家要用骨头驯服狼后,再给它喂养肉类物品(例如熟猪排),才可以触发事件;
c.需要在特定环境下才能繁殖的生物例如熊猫玩家用竹子喂养熊猫时熊猫的5格内至少要有8根竹子喂养后才可以触发事件。
3.该事件中如需调用使用手持物相关的接口如PlayerUseItemToEntity或其他设置物品数量的接口会导致接口正常调用但是物品数量计算异常建议通过timer延迟调用。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerHungerChangeServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家饥饿度变化时触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| hungerBefore | float | 变化前的饥饿度 |
| hunger | float | 变化后的饥饿度 |
| cancel | bool | 是否取消饥饿度变化 |
- 返回值
- 备注
- 当通过setplayerhunger接口设置饥饿度时不会触发服务端对应的事件
- 当通过/hunger等指令设置饥饿度设置时hunger字段值可能会超过最大饥饿度
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerHurtEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当玩家受伤害前触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| id | str | 受击玩家id |
| attacker | str | 伤害来源实体id若没有实体攻击例如高空坠落id为-1 |
| customTag | str | 使用[Hurt接口](../接口/实体/行为.md#hurt)传入的自定义伤害类型 |
| cause | str | 伤害来源详见Minecraft枚举值文档的[ActorDamageCause](../枚举值/ActorDamageCause.md) |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerInteractServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家可以与实体交互时。如果是鼠标控制模式,则当准心对着实体时触发。如果是触屏模式,则触发时机与屏幕下方的交互按钮显示的时机相同。玩家真正与实体发生交互的事件见[PlayerDoInteractServerEvent](#playerdointeractserverevent)
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否取消触发默认为False若设为True可阻止触发后续的实体交互事件 |
| playerId | str | 主动与实体互动的玩家的唯一ID |
| itemDict | dict | 当前玩家手持物品的<a href="../../../mcguide/20-玩法开发/10-基本概念/1-我的世界基础概念.html#物品信息字典#物品信息字典">物品信息字典</a> |
| victimId | str | 被动的实体的唯一ID |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerNamedEntityServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家用命名牌重命名实体时触发,例如玩家手持命名牌对羊修改名字、玩家手持命名牌对盔甲架修改名字。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 主动命名实体的玩家的唯一ID |
| entityId | str | 被命名实体的唯一ID |
| preName | str | 实体当前的名字 |
| afterName | str | 实体重命名后的名字 |
| cancel | bool | 是否取消触发默认为False若设为True可阻止触发后续的实体命名逻辑 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerRespawnEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家复活时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| id | str | 玩家id |
- 返回值
- 备注
- 该事件为玩家点击重生按钮时触发,但是触发时玩家可能尚未完成复活,此时请勿对玩家进行切维度或设置生命值等操作
一般情况下推荐使用PlayerRespawnFinishServerEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerRespawnFinishServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家复活完毕时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
- 返回值
- 备注
- 该事件触发时玩家已重生完毕,可以安全使用切维度等操作
- 通过末地传送门回到主世界时也算重生,同样也会触发该事件
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerSleepServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家使用床睡觉成功
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerSpinAttackServerEvent
<span style="display:inline;color:#ff5555">仅Apollo可用</span>
- 描述
触发时机:玩家开始/结束快速旋转攻击时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家的entityId |
| isInWaterOrRain | bool | 是否在水中或雨中 |
| isRiding | bool | 是否骑乘状态 |
| isStart | bool | True时代表开始快速旋转攻击False时代表结束快速旋转攻击 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerStopSleepServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家停止睡觉
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerTeleportEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机当玩家传送时触发该事件玩家使用末影珍珠或tp指令时。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| id | str | 玩家id |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## PlayerTrySleepServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家尝试使用床睡觉
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| cancel | bool | 是否取消(开发者传入) |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ServerPlayerGetExperienceOrbEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家获取经验球时触发的事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| experienceValue | int | 经验球经验值 |
| cancel | bool | 是否取消(开发者传入) |
- 返回值
- 备注
- `cancel`值设为True时捡起的经验球不会增加经验值但是经验球一样会消失。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## StoreBuySuccServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家游戏内购买商品时服务端抛出的事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 购买商品的玩家实体id |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
self.ListenForEvent(serverApi.GetEngineNamespace(),serverApi.GetEngineSystemName(),
"StoreBuySuccServerEvent",
self, self.OnStoreBuySucc)
def OnStoreBuySucc(self, args):
entityId = args['playerId']
print 'Ship Item.EntityId:', playerId
```
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/12-深入理解零件/0-零件开发.html#零件事件">零件事件</a>