---
sidebarDepth: 1
---
# 物品
# 索引
| 事件 |
| 描述 |
| --- | --- | --- |
| [ActorAcquiredItemClientEvent](物品.md#actoracquireditemclientevent) | 客户端 | 触发时机:玩家获得物品时客户端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。) |
| [ActorAcquiredItemServerEvent](物品.md#actoracquireditemserverevent) | 服务端 | 触发时机:玩家获得物品时服务端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。) |
| [ActorUseItemClientEvent](物品.md#actoruseitemclientevent) | 客户端 | 触发时机:玩家使用物品时客户端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲);3)喝牛奶 |
| [ActorUseItemServerEvent](物品.md#actoruseitemserverevent) | 服务端 | 触发时机:玩家使用物品生效之前服务端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲) |
| [AnvilCreateResultItemAfterClientEvent](物品.md#anvilcreateresultitemafterclientevent) | 客户端 | 玩家点击铁砧合成得到的物品时抛出的事件。 |
| [ClientItemTryUseEvent](物品.md#clientitemtryuseevent) | 客户端 | 玩家点击右键尝试使用物品时客户端抛出的事件,可以通过设置cancel为True取消使用物品。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 |
| [ClientItemUseOnEvent](物品.md#clientitemuseonevent) | 客户端 | 玩家在对方块使用物品时客户端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 |
| [ClientShapedRecipeTriggeredEvent](物品.md#clientshapedrecipetriggeredevent) | 客户端 | 玩家合成物品时触发 |
| [ContainerItemChangedServerEvent](物品.md#containeritemchangedserverevent) | 服务端 | 容器物品变化事件 |
| [CraftItemOutputChangeServerEvent](物品.md#craftitemoutputchangeserverevent) | 服务端 | 玩家从容器拿出生成物品时触发 |
| [CraftUpdateResultItemClientEvent](物品.md#craftupdateresultitemclientevent) | 客户端 | 玩家工作台界面更新显示可合成物品时抛出的事件。 |
| [FurnaceBurnFinishedServerEvent](物品.md#furnaceburnfinishedserverevent) | 服务端 | 服务端熔炉烧制触发事件。熔炉, 高炉,烟熏炉烧出物品时触发 |
| [GrindStoneRemovedEnchantClientEvent](物品.md#grindstoneremovedenchantclientevent) | 客户端 | 玩家点击砂轮合成得到的物品时抛出的事件 |
| [InventoryItemChangedClientEvent](物品.md#inventoryitemchangedclientevent) | 客户端 | 玩家背包物品变化时客户端抛出的事件。 |
| [InventoryItemChangedServerEvent](物品.md#inventoryitemchangedserverevent) | 服务端 | 玩家背包物品变化时服务端抛出的事件。 |
| [ItemDurabilityChangedServerEvent](物品.md#itemdurabilitychangedserverevent) | 服务端 | 物品耐久度变化事件 |
| [ItemReleaseUsingClientEvent](物品.md#itemreleaseusingclientevent) | 客户端 | 触发时机:释放正在使用的物品 |
| [ItemReleaseUsingServerEvent](物品.md#itemreleaseusingserverevent) | 服务端 | 触发时机:释放正在使用的物品时 |
| [ItemUseAfterServerEvent](物品.md#itemuseafterserverevent) | 服务端 | 玩家在使用物品之后服务端抛出的事件。 |
| [ItemUseOnAfterServerEvent](物品.md#itemuseonafterserverevent) | 服务端 | 玩家在对方块使用物品之后服务端抛出的事件。 |
| [OnCarriedNewItemChangedClientEvent](物品.md#oncarriednewitemchangedclientevent) | 客户端 | 手持物品发生变化时,触发该事件;数量改变不会通知 |
| [OnCarriedNewItemChangedServerEvent](物品.md#oncarriednewitemchangedserverevent) | 服务端 | 触发时机:玩家切换主手物品时触发该事件 |
| [OnItemPutInEnchantingModelServerEvent](物品.md#onitemputinenchantingmodelserverevent) | 服务端 | 触发时机:玩家将可附魔物品放到附魔台上时 |
| [OnNewArmorExchangeServerEvent](物品.md#onnewarmorexchangeserverevent) | 服务端 | 触发时机:玩家切换盔甲时触发该事件 |
| [OnOffhandItemChangedServerEvent](物品.md#onoffhanditemchangedserverevent) | 服务端 | 触发时机:玩家切换副手物品时触发该事件 |
| [OnPlayerActiveShieldServerEvent](物品.md#onplayeractiveshieldserverevent) | 服务端 | 触发时机:玩家激活/取消激活盾牌触发的事件。包括玩家持盾进入潜行状态,以及在潜行状态切换盾牌(切换耐久度不同的相同盾牌不会触发) |
| [OnPlayerBlockedByShieldAfterServerEvent](物品.md#onplayerblockedbyshieldafterserverevent) | 服务端 | 触发时机:玩家使用盾牌抵挡伤害之后触发 |
| [OnPlayerBlockedByShieldBeforeServerEvent](物品.md#onplayerblockedbyshieldbeforeserverevent) | 服务端 | 触发时机:玩家使用盾牌抵挡伤害之前触发 |
| [PlayerDropItemServerEvent](物品.md#playerdropitemserverevent) | 服务端 | 触发时机:玩家丢弃物品时触发 |
| [PlayerPickupArrowServerEvent](物品.md#playerpickuparrowserverevent) | 服务端 | 玩家即将捡起抛射物时触发,包括使用"netease:pick_up"的自定义抛射物 |
| [PlayerTryDropItemClientEvent](物品.md#playertrydropitemclientevent) | 客户端 | 触发时机:玩家丢弃物品时触发 |
| [ServerItemTryUseEvent](物品.md#serveritemtryuseevent) | 服务端 | 玩家点击右键尝试使用物品时服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 |
| [ServerItemUseOnEvent](物品.md#serveritemuseonevent) | 服务端 | 玩家在对方块使用物品之前服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 |
| [ServerPlayerTryTouchEvent](物品.md#serverplayertrytouchevent) | 服务端 | 玩家即将捡起物品时触发 |
| [ShearsUseToBlockBeforeServerEvent](物品.md#shearsusetoblockbeforeserverevent) | 服务端 | 触发时机:实体手持剪刀对方块使用时,有剪刀特殊效果的方块会在服务端线程触发该事件 |
| [StartUsingItemClientEvent](物品.md#startusingitemclientevent) | 客户端 | 玩家使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出 |
| [StopUsingItemClientEvent](物品.md#stopusingitemclientevent) | 客户端 | 玩家停止使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出 |
| [UIContainerItemChangedServerEvent](物品.md#uicontaineritemchangedserverevent) | 服务端 | 合成容器物品发生变化时触发 |
# 物品
## ActorAcquiredItemClientEvent
客户端
- 描述
触发时机:玩家获得物品时客户端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。)
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| actor | str | 获得物品玩家实体id |
| secondaryActor | str | 物品给予者玩家实体id,如果不存在给予者的话,这里为空字符串 |
| itemDict | dict | 获取到的物品的物品信息字典 |
| acquireMethod | int | 获得物品的方法,详见[ItemAcquisitionMethod](../枚举值/ItemAcquisitionMethod.md) |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ActorAcquiredItemServerEvent
服务端
- 描述
触发时机:玩家获得物品时服务端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。)
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| actor | str | 获得物品玩家实体id |
| secondaryActor | str | 物品给予者玩家实体id,如果不存在给予者的话,这里为空字符串 |
| itemDict | dict | 获得的物品的物品信息字典 |
| acquireMethod | int | 获得物品的方法,详见[ItemAcquisitionMethod枚举](../枚举值/ItemAcquisitionMethod.md) |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ActorUseItemClientEvent
客户端
- 描述
触发时机:玩家使用物品时客户端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲);3)喝牛奶
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
| useMethod | int | 使用物品的方法,详见[ItemUseMethodEnum枚举](../枚举值/ItemUseMethodEnum.md) |
- 返回值
无
- 备注
- 注意,喝牛奶不会触发该事件,但是会触发ActorUseItemServerEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ActorUseItemServerEvent
服务端
- 描述
触发时机:玩家使用物品生效之前服务端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲)
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
| useMethod | int | 使用物品的方法,详见[ItemUseMethodEnum枚举](../枚举值/ItemUseMethodEnum.md) |
- 返回值
无
- 备注
- 注意,喝牛奶会触发该事件,但是不会触发ActorUseItemClientEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## AnvilCreateResultItemAfterClientEvent
客户端
- 描述
玩家点击铁砧合成得到的物品时抛出的事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemShowName | str | 合成后的物品显示名称 |
| itemDict | dict | 合成后的物品的物品信息字典 |
| oldItemDict | dict | 合成前的物品的物品信息字典(铁砧内第一个物品) |
| materialItemDict | dict | 合成所使用材料的物品信息字典(铁砧内第二个物品) |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ClientItemTryUseEvent
客户端
- 描述
玩家点击右键尝试使用物品时客户端抛出的事件,可以通过设置cancel为True取消使用物品。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| itemDict | dict | 使用的物品的物品信息字典 |
| cancel | bool | 取消使用物品 |
- 返回值
无
- 备注
- ServerItemTryUseEvent/ClientItemTryUseEvent不能取消对方块使用物品的行为,如使用生物蛋,使用桶倒出/收集,使用打火石点燃草等;如果想要取消这种行为,请使用ClientItemUseOnEvent和ServerItemUseOnEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ClientItemUseOnEvent
客户端
- 描述
玩家在对方块使用物品时客户端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
| x | int | 方块 x 坐标值 |
| y | int | 方块 y 坐标值 |
| z | int | 方块 z 坐标值 |
| blockName | str | 方块的identifier |
| blockAuxValue | int | 方块的附加值 |
| face | int | 点击方块的面,参考[Facing枚举](../枚举值/Facing.md) |
| clickX | float | 点击点的x比例位置 |
| clickY | float | 点击点的y比例位置 |
| clickZ | float | 点击点的z比例位置 |
| ret | bool | 设为True可取消物品的使用 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ClientShapedRecipeTriggeredEvent
客户端
- 描述
玩家合成物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| recipeId | str | 配方id,对应配方json文件中的identifier字段 |
- 返回值
无
## ContainerItemChangedServerEvent
服务端
- 描述
容器物品变化事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| pos | tuple(int,int,int)/None | 容器坐标 |
| containerType | int | 容器类型,类型含义见:[容器类型枚举](../枚举值/ContainerType.md) |
| slot | int | 容器槽位 |
| dimensionId | int | 维度id |
| oldItemDict | dict | 旧物品,格式参考物品信息字典 |
| newItemDict | dict | 新物品,格式参考物品信息字典 |
- 返回值
无
- 备注
- 储物容器(箱子,潜影箱),熔炉,酿造台,发射器,投掷器,漏斗,炼药锅,唱片机,高炉,烟熏炉中物品发生变化会触发此事件
- 工作台、铁砧、附魔台、织布机、砂轮、切石机、制图台、锻造台为合成容器,不会触发此事件,此类容器可通过UIContainerItemChangedServerEvent监听具体生成容器物品变化
- 炼药锅只在使用染料时触发本事件,且slot为2
- 唱片机只在从漏斗放入唱片触发此事件
- 示例
```python
import mod.server.extraServerApi as serverApi
from mod_log import logger as logger
# 监听引擎的事件
self.ListenForEvent(serverApi.GetEngineNamespace(),
serverApi.GetEngineSystemName(),
"ContainerItemChangedServerEvent",
self, self.OnContainerItemChangedServerEvent)
def OnContainerItemChangedServerEvent(self, args):
playerId = args['playerId']
logger.info("OnContainerItemChangedServerEvent args:%s", args)
if args['containerType'] == serverApi.GetMinecraftEnum().ContainerType.SMOKER:
print '烟熏炉发生变化'
```
## CraftItemOutputChangeServerEvent
服务端
- 描述
玩家从容器拿出生成物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemDict | dict | 生成的物品,格式参考物品信息字典 |
| screenContainerType | int | 当前界面类型,类型含义见:[容器类型枚举](../枚举值/ContainerType.md) |
| cancel | bool | 是否取消生成物品 |
- 返回值
无
- 备注
- 支持工作台,铁砧,砂轮等工作方块
- screenContainerType = serverApi.GetMinecraftEnum().ContainerType.INVENTORY时,表示从创造模式物品栏中拿出物品,或者从合成栏中拿出合成物品
- 通过cancel参数取消生成物品,可用于禁止外挂刷物品
- cancel=True时无法从创造模式物品栏拿物品
- cancel=True时铁砧无法修复或重命名物品,但仍会扣除经验值
- 示例
```python
import mod.server.extraServerApi as serverApi
from mod_log import logger as logger
# 监听引擎的事件
self.ListenForEvent(serverApi.GetEngineNamespace(),
serverApi.GetEngineSystemName(),
"CraftItemOutputChangeServerEvent",
self, self.OnCraftItemOutputChangeServerEvent)
def OnCraftItemOutputChangeServerEvent(self, args):
playerId = args['playerId']
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
logger.info("OnCraftItemOutputChangeServerEvent args:%s", args)
# 铁砧触发
if args['screenContainerType'] == serverApi.GetMinecraftEnum().ContainerType.ANVIL:
anvilInputItem = comp.GetOpenContainerItem(playerId,serverApi.GetMinecraftEnum().OpenContainerId.AnvilInputContainer,True)
if anvilInputItem != None:
# 铁砧输入位有物品,该事件为拿出铁砧生成物触发的
if anvilInputItem['itenName'] != args['itemDict']['itemName']:
# 输入物品和生成物品不是同一类型,可能是作弊,取消物品生成
args['cancel'] = True
```
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## CraftUpdateResultItemClientEvent
客户端
- 描述
玩家工作台界面更新显示可合成物品时抛出的事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemDict | dict | 合成后的物品的[物品信息字典] |
- 返回值
无
- 备注
- 该事件在打开3×3工作台界面,2×2工作台界面,向工作台放入物品,预览配方时触发。
- 如果无可合成的物品,或预览的配方因材料不足而无法合成,则传递的物品参数为 minecraft:air。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## FurnaceBurnFinishedServerEvent
服务端
- 描述
服务端熔炉烧制触发事件。熔炉, 高炉,烟熏炉烧出物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 维度id |
| posX | float | 位置x |
| posY | float | 位置y |
| posZ | float | 位置z |
| itemDict | dict | 物品的物品信息字典,当新物品为空时,此项属性为None |
- 返回值
无
## GrindStoneRemovedEnchantClientEvent
客户端
- 描述
玩家点击砂轮合成得到的物品时抛出的事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| oldItemDict | dict | 合成前的物品物品信息字典(砂轮内第一个物品) |
| additionalItemDict | dict | 作为合成材料的物品物品信息字典(砂轮内第二个物品) |
| newItemDict | dict | 合成后的物品物品信息字典 |
| exp | int | 本次合成返还的经验 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## InventoryItemChangedClientEvent
客户端
- 描述
玩家背包物品变化时客户端抛出的事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| slot | int | 背包槽位 |
| oldItemDict | dict | 变化前槽位中的物品,格式参考物品信息字典 |
| newItemDict | dict | 变化后槽位中的物品,格式参考物品信息字典 |
- 返回值
无
- 备注
- 如果槽位变空,变化后槽位中物品为空气
- 触发时槽位物品仍为变化前物品
- 背包内物品移动,合堆,分堆的操作会分多次事件触发并且顺序不定,编写逻辑时请勿依赖事件触发顺序
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## InventoryItemChangedServerEvent
服务端
- 描述
玩家背包物品变化时服务端抛出的事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| slot | int | 背包槽位 |
| oldItemDict | dict | 变化前槽位中的物品,格式参考物品信息字典 |
| newItemDict | dict | 变化后槽位中的物品,格式参考物品信息字典 |
- 返回值
无
- 备注
- 如果槽位变空,变化后槽位中物品为空气
- 触发时槽位物品仍为变化前物品
- 玩家进入游戏时,身上的物品会触发该事件
- 背包内物品移动,合堆,分堆的操作会分多次事件触发并且顺序不定,编写逻辑时请勿依赖事件触发顺序
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ItemDurabilityChangedServerEvent
服务端
- 描述
物品耐久度变化事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 物品拥有者的实体id |
| itemDict | dict | 物品的物品信息字典 |
| durabilityBefore | int | 变化前耐久度 |
| durability | int | 变化后耐久度,支持修改。但是请注意修改范围,支持范围为[-32768,32767) |
| canChange | bool | 是否支持修改,为true时支持通过durability修改,为false时不支持 |
- 返回值
无
- 备注
- 目前只有存在耐久的物品,并且有物主的物品才会触发该事件,存在发射器中发射导致的物品耐久变化不会触发该事件
- 目前铁砧修复、经验修补魔咒、SetItemDurability接口触发的耐久度变化中canChange为false,并且不支持修改变化后耐久度
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ItemReleaseUsingClientEvent
客户端
- 描述
触发时机:释放正在使用的物品
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| durationLeft | float | 蓄力剩余时间(当物品缺少"minecraft:maxduration"组件时,蓄力剩余时间为负数) |
| itemDict | dict | 使用的物品的物品信息字典 |
| maxUseDuration | int | 最大蓄力时长 |
| cancel | bool | 设置为True可以取消,需要同时取消服务端事件[ItemReleaseUsingServerEvent](#itemreleaseusingserverevent) |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ItemReleaseUsingServerEvent
服务端
- 描述
触发时机:释放正在使用的物品时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| durationLeft | float | 蓄力剩余时间(当物品缺少"minecraft:maxduration"组件时,蓄力剩余时间为负数) |
| itemDict | dict | 使用的物品的物品信息字典 |
| maxUseDuration | int | 最大蓄力时长 |
| cancel | bool | 设置为True可以取消,需要同时取消客户端事件[ItemReleaseUsingClientEvent](#itemreleaseusingclientevent) |
| changeItem | bool | 如果要在该事件的回调中修改当前使用槽位的物品,需设置这个参数为True,否则将修改物品失败,例如修改耐久度或者替换成新物品 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ItemUseAfterServerEvent
服务端
- 描述
玩家在使用物品之后服务端抛出的事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
- 返回值
无
- 备注
- 做出使用物品这个动作之后触发,一些需要蓄力的物品使用事件(ActorUseItemServerEvent)会在之后触发。如投掷三叉戟,先触发本事件,投出去之后再触发ActorUseItemServerEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ItemUseOnAfterServerEvent
服务端
- 描述
玩家在对方块使用物品之后服务端抛出的事件。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
| x | int | 方块 x 坐标值 |
| y | int | 方块 y 坐标值 |
| z | int | 方块 z 坐标值 |
| face | int | 点击方块的面,参考[Facing枚举](../枚举值/Facing.md) |
| clickX | float | 点击点的x比例位置 |
| clickY | float | 点击点的y比例位置 |
| clickZ | float | 点击点的z比例位置 |
| blockName | str | 方块的identifier |
| blockAuxValue | int | 方块的附加值 |
| dimensionId | int | 维度id |
- 返回值
无
- 备注
- 在ServerItemUseOnEvent和原版物品使用事件(例如StartUsingItemClientEvent)之后触发
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnCarriedNewItemChangedClientEvent
客户端
- 描述
手持物品发生变化时,触发该事件;数量改变不会通知
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| itemDict | dict | 切换后物品的物品信息字典 |
- 返回值
无
## OnCarriedNewItemChangedServerEvent
服务端
- 描述
触发时机:玩家切换主手物品时触发该事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| oldItemDict | dict/None | 旧物品的物品信息字典,当旧物品为空时,此项属性为None |
| newItemDict | dict/None | 新物品的物品信息字典,当新物品为空时,此项属性为None |
| playerId | str | 玩家 entityId |
- 返回值
无
- 备注
- 切换耐久度不同的相同物品,不会触发该事件
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnItemPutInEnchantingModelServerEvent
服务端
- 描述
触发时机:玩家将可附魔物品放到附魔台上时
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id,参数类型为str |
| slotType | int | 玩家放入物品的EnchantSlotType |
| options | list | 附魔台选项 |
| change | bool | 传入True时,附魔台选项会被新传入的options覆盖 |
- 返回值
无
- 备注
- options为包含三个dict的list,单个dict的格式形如{'cost': 1, 'enchantData': [(1,1)], 'modEnchantData': [('custom_enchant, 1')]},cost为解锁该选项所需的玩家等级,enchantData为该附魔选项包含的原版附魔数据,modEnchantData为该选项包含的自定义附魔数据
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnNewArmorExchangeServerEvent
服务端
- 描述
触发时机:玩家切换盔甲时触发该事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| slot | int | 槽位id |
| oldArmorDict | dict/None | 旧装备的物品信息字典,当旧物品为空时,此项属性为None |
| newArmorDict | dict/None | 新装备的物品信息字典,当新物品为空时,此项属性为None |
| playerId | str | 玩家 entityId |
- 返回值
无
- 备注
- 当玩家登录时,每个盔甲槽位会触发两次该事件,第一次为None切换到身上的装备,第二次的old和new都为身上装备。如果槽位为空,则是触发两次从None切换到None的事件。
- 注意:避免在该事件回调中对玩家修改盔甲栏装备,如[SetEntityItem](../接口/实体/背包.md#setentityitem)接口,会导致事件循环触发造成堆栈溢出。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnOffhandItemChangedServerEvent
服务端
- 描述
触发时机:玩家切换副手物品时触发该事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| oldItemDict | dict/None | 旧物品的物品信息字典,当旧物品为空时,此项属性为None |
| newItemDict | dict/None | 新物品的物品信息字典,当新物品为空时,此项属性为None |
| playerId | str | 玩家 entityId |
- 返回值
无
- 备注
- 当原有的物品槽内容为空时,`oldItemName`值为'minecraft:air',且`oldItem`其余字段不存在
当切换原有物品,且新物品为空时,参数值同理
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnPlayerActiveShieldServerEvent
服务端
- 描述
触发时机:玩家激活/取消激活盾牌触发的事件。包括玩家持盾进入潜行状态,以及在潜行状态切换盾牌(切换耐久度不同的相同盾牌不会触发)
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| isActive | bool | True:尝试激活,False:尝试取消激活 |
| itemDict | dict | 盾牌物品的物品信息字典 |
| cancelable | bool | 是否可以取消。如果玩家在潜行状态切换盾牌,则无法取消 |
| cancel | bool | 是否取消这次激活 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnPlayerBlockedByShieldAfterServerEvent
服务端
- 描述
触发时机:玩家使用盾牌抵挡伤害之后触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| sourceId | str | 伤害来源实体Id,没有实体返回"-1" |
| itemDict | dict | 盾牌物品字典物品信息字典 |
| damage | float | 抵挡的伤害数值 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## OnPlayerBlockedByShieldBeforeServerEvent
服务端
- 描述
触发时机:玩家使用盾牌抵挡伤害之前触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| sourceId | str | 伤害来源实体Id,没有实体返回"-1" |
| itemDict | dict | 盾牌物品字典物品信息字典 |
| damage | float | 抵挡的伤害数值 |
- 返回值
无
- 备注
- 盾牌抵挡了所有伤害时,才会触发事件;部分抛射物造成的伤害无法全部抵挡,无法触发事件,例如带有穿透魔咒的弩。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## PlayerDropItemServerEvent
服务端
- 描述
触发时机:玩家丢弃物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| itemEntityId | str | 物品entityId |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## PlayerPickupArrowServerEvent
服务端
- 描述
玩家即将捡起抛射物时触发,包括使用"netease:pick_up"的自定义抛射物
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| arrowId | str | 抛射物Id |
| itemDict | dict | 触碰的物品的物品信息字典 |
| cancel | bool | 设置为True时将取消本次拾取 |
| pickupDelay | int | 取消拾取后重新设置该物品的拾取cd,小于15帧将视作15帧,大于等于97813帧将视作无法拾取,每秒30帧 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## PlayerTryDropItemClientEvent
客户端
- 描述
触发时机:玩家丢弃物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| itemDict | dict | 物品dict |
| cancel | bool | 是否取消此次操作 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ServerItemTryUseEvent
服务端
- 描述
玩家点击右键尝试使用物品时服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家id |
| itemDict | dict | 使用的物品的物品信息字典 |
| cancel | bool | 设为True可取消物品的使用 |
- 返回值
无
- 备注
- ServerItemTryUseEvent/ClientItemTryUseEvent不能取消对方块使用物品的行为,如使用生物蛋,使用桶倒出/收集,使用打火石点燃草等;如果想要取消这种行为,请使用ClientItemUseOnEvent和ServerItemUseOnEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ServerItemUseOnEvent
服务端
- 描述
玩家在对方块使用物品之前服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| entityId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
| x | int | 方块 x 坐标值 |
| y | int | 方块 y 坐标值 |
| z | int | 方块 z 坐标值 |
| blockName | str | 方块的identifier |
| blockAuxValue | int | 方块的附加值 |
| face | int | 点击方块的面,参考[Facing枚举](../枚举值/Facing.md) |
| dimensionId | int | 维度id |
| clickX | float | 点击点的x比例位置 |
| clickY | float | 点击点的y比例位置 |
| clickZ | float | 点击点的z比例位置 |
| ret | bool | 设为True可取消物品的使用 |
- 返回值
无
- 备注
- 当对原生方块进行使用时,如堆肥桶等类似有 使用 功能的方块使用物品时,不会触发该事件。而当原生方块加入监听后,ServerBlockUseEvent会触发。当需要获取触发时使用的物品时,可以通过item组件(例如GetPlayerItem接口)获取手中持有的物品,对应的客户端事件同理。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ServerPlayerTryTouchEvent
服务端
- 描述
玩家即将捡起物品时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| entityId | str | 物品实体的Id |
| itemDict | dict | 触碰的物品的物品信息字典 |
| cancel | bool | 设置为True时将取消本次拾取 |
| pickupDelay | int | 取消拾取后重新设置该物品的拾取cd,小于15帧将视作15帧,大于等于97813帧将视作无法拾取 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## ShearsUseToBlockBeforeServerEvent
服务端
- 描述
触发时机:实体手持剪刀对方块使用时,有剪刀特殊效果的方块会在服务端线程触发该事件
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier,包含命名空间及名称 |
| auxData | int | 方块附加值 |
| dropName | str | 触发剪刀效果的掉落物identifier,包含命名空间及名称 |
| dropCount | int | 触发剪刀效果的掉落物数量 |
| entityId | str | 触发剪刀效果的实体id,目前仅玩家会触发 |
| dimensionId | int | 玩家触发时的维度id |
| cancelShears | bool | 是否取消剪刀效果 |
- 返回值
无
- 备注
- 目前会触发该事件的方块:南瓜、蜂巢
- 该事件触发在ServerItemUseOnEvent之后,如果ServerItemUseOnEvent中取消了物品使用,该事件无法被触发
- 和ServerItemUseOnEvent一样该事件判定在tick执行,意味着如果取消剪刀效果该事件可能会多次触发(取决于玩家按下使用键时长)
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## StartUsingItemClientEvent
客户端
- 描述
玩家使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## StopUsingItemClientEvent
客户端
- 描述
玩家停止使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| itemDict | dict | 使用的物品的物品信息字典 |
- 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
## UIContainerItemChangedServerEvent
服务端
- 描述
合成容器物品发生变化时触发
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| slot | int | 容器槽位,含义见:[容器类型枚举](../枚举值/PlayerUISlot.md) |
| oldItemDict | dict | 旧物品,格式参考物品信息字典 |
| newItemDict | dict | 生成的物品,格式参考物品信息字典 |
- 返回值
无
- 备注
- 合成容器包括工作台、铁砧、附魔台、织布机、砂轮、切石机、制图台、锻造台,输入物品发生变化时会触发本事件
- 可通过容器槽位区分不同的生成容器类型
- 合成容器的生成槽位生成物品时不触发本事件,生成物品可通过CraftItemOutputChangeServerEvent监听
- 储物容器(箱子,潜影箱),熔炉,酿造台,发射器,投掷器,漏斗,炼药锅,唱片机,高炉,烟熏炉中物品发生变化不会触发此事件,此类容器可通过ContainerItemChangedServerEvent监听
- 示例
```python
import mod.server.extraServerApi as serverApi
from mod_log import logger as logger
# 监听引擎的事件
self.ListenForEvent(serverApi.GetEngineNamespace(),
serverApi.GetEngineSystemName(),
"UIContainerItemChangedServerEvent",
self, self.OnUIContainerItemChangedServerEvent)
def OnUIContainerItemChangedServerEvent(self, args):
playerId = args['playerId']
logger.info("OnUIContainerItemChangedServerEvent args:%s", args)
if args['slot'] == serverApi.GetMinecraftEnum().PlayerUISlot.GrindstoneInput:
print '砂轮输入位发生变化'
```
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件