# 物品
# 索引
事件 | 描述 | |
---|---|---|
ActorAcquiredItemClientEvent | 客户端 | 触发时机:玩家获得物品时客户端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。) |
ActorAcquiredItemServerEvent | 服务端 | 触发时机:玩家获得物品时服务端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。) |
ActorUseItemClientEvent | 客户端 | 触发时机:玩家使用物品时客户端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲);3)喝牛奶 |
ActorUseItemServerEvent | 服务端 | 触发时机:玩家使用物品生效之前服务端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲) |
AnvilCreateResultItemAfterClientEvent | 客户端 | 玩家点击铁砧合成得到的物品时抛出的事件。 |
ClientItemTryUseEvent | 客户端 | 玩家点击右键尝试使用物品时客户端抛出的事件,可以通过设置cancel为True取消使用物品。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 |
ClientItemUseOnEvent | 客户端 | 玩家在对方块使用物品时客户端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 |
ClientShapedRecipeTriggeredEvent | 客户端 | 玩家合成物品时触发 |
ContainerItemChangedServerEvent | 服务端 | 容器物品变化事件 |
CraftItemOutputChangeServerEvent | 服务端 | 玩家从容器拿出生成物品时触发 |
CraftUpdateResultItemClientEvent | 客户端 | 玩家工作台界面更新显示可合成物品时抛出的事件。 |
FurnaceBurnFinishedServerEvent | 服务端 | 服务端熔炉烧制触发事件。熔炉, 高炉,烟熏炉烧出物品时触发 |
GrindStoneRemovedEnchantClientEvent | 客户端 | 玩家点击砂轮合成得到的物品时抛出的事件 |
InventoryItemChangedClientEvent | 客户端 | 玩家背包物品变化时客户端抛出的事件。 |
InventoryItemChangedServerEvent | 服务端 | 玩家背包物品变化时服务端抛出的事件。 |
ItemDurabilityChangedServerEvent | 服务端 | 物品耐久度变化事件 |
ItemReleaseUsingClientEvent | 客户端 | 触发时机:释放正在使用的物品 |
ItemReleaseUsingServerEvent | 服务端 | 触发时机:释放正在使用的物品时 |
ItemUseAfterServerEvent | 服务端 | 玩家在使用物品之后服务端抛出的事件。 |
ItemUseOnAfterServerEvent | 服务端 | 玩家在对方块使用物品之后服务端抛出的事件。 |
OnCarriedNewItemChangedClientEvent | 客户端 | 手持物品发生变化时,触发该事件;数量改变不会通知 |
OnCarriedNewItemChangedServerEvent | 服务端 | 触发时机:玩家切换主手物品时触发该事件 |
OnItemPutInEnchantingModelServerEvent | 服务端 | 触发时机:玩家将可附魔物品放到附魔台上时 |
OnNewArmorExchangeServerEvent | 服务端 | 触发时机:玩家切换盔甲时触发该事件 |
OnOffhandItemChangedServerEvent | 服务端 | 触发时机:玩家切换副手物品时触发该事件 |
OnPlayerActiveShieldServerEvent | 服务端 | 触发时机:玩家激活/取消激活盾牌触发的事件。包括玩家持盾进入潜行状态,以及在潜行状态切换盾牌(切换耐久度不同的相同盾牌不会触发) |
OnPlayerBlockedByShieldAfterServerEvent | 服务端 | 触发时机:玩家使用盾牌抵挡伤害之后触发 |
OnPlayerBlockedByShieldBeforeServerEvent | 服务端 | 触发时机:玩家使用盾牌抵挡伤害之前触发 |
PlayerDropItemServerEvent | 服务端 | 触发时机:玩家丢弃物品时触发 |
PlayerTryDropItemClientEvent | 客户端 | 触发时机:玩家丢弃物品时触发 |
ServerItemTryUseEvent | 服务端 | 玩家点击右键尝试使用物品时服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 |
ServerItemUseOnEvent | 服务端 | 玩家在对方块使用物品之前服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 |
ServerPlayerTryTouchEvent | 服务端 | 玩家即将捡起物品时触发 |
ShearsUseToBlockBeforeServerEvent | 服务端 | 触发时机:实体手持剪刀对方块使用时,有剪刀特殊效果的方块会在服务端线程触发该事件 |
StartUsingItemClientEvent | 客户端 | 玩家使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出 |
StopUsingItemClientEvent | 客户端 | 玩家停止使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出 |
UIContainerItemChangedServerEvent | 服务端 | 合成容器物品发生变化时触发 |
# 物品
# ActorAcquiredItemClientEvent
客户端
描述
触发时机:玩家获得物品时客户端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。)
参数
参数名 数据类型说明 actor str 获得物品玩家实体id secondaryActor str 物品给予者玩家实体id,如果不存在给予者的话,这里为空字符串 itemDict dict 获取到的物品的物品信息字典 acquireMethod int 获得物品的方法,详见ItemAcquisitionMethod 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
# ActorAcquiredItemServerEvent
服务端
描述
触发时机:玩家获得物品时服务端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。)
参数
参数名 数据类型说明 actor str 获得物品玩家实体id secondaryActor str 物品给予者玩家实体id,如果不存在给予者的话,这里为空字符串 itemDict dict 获得的物品的物品信息字典 acquireMethod int 获得物品的方法,详见ItemAcquisitionMethod枚举 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
# ActorUseItemClientEvent
客户端
描述
触发时机:玩家使用物品时客户端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲);3)喝牛奶
参数
参数名 数据类型说明 playerId str 玩家实体id itemDict dict 使用的物品的物品信息字典 useMethod int 使用物品的方法,详见ItemUseMethodEnum枚举 返回值
无
备注
- 注意,喝牛奶不会触发该事件,但是会触发ActorUseItemServerEvent
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
# ActorUseItemServerEvent
服务端
描述
触发时机:玩家使用物品生效之前服务端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲)
参数
参数名 数据类型说明 playerId str 玩家实体id itemDict dict 使用的物品的物品信息字典 useMethod int 使用物品的方法,详见ItemUseMethodEnum枚举 返回值
无
备注
- 注意,喝牛奶会触发该事件,但是不会触发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枚举 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 容器类型,类型含义见:容器类型枚举 slot int 容器槽位 dimensionId int 维度id oldItemDict dict 旧物品,格式参考物品信息字典 newItemDict dict 新物品物品,格式参考物品信息字典 返回值
无
备注
- 储物容器(箱子,潜影箱),熔炉,酿造台,发射器,投掷器,漏斗,炼药锅,唱片机,高炉,烟熏炉中物品发生变化会触发此事件
- 工作台、铁砧、附魔台、织布机、砂轮、切石机、制图台、锻造台为合成容器,不会触发此事件,此类容器可通过UIContainerItemChangedServerEvent监听具体生成容器物品变化
- 炼药锅只在使用染料时触发本事件,且slot为2
- 唱片机只在从漏斗放入唱片触发此事件
示例
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 当前界面类型,类型含义见:容器类型枚举 cancel bool 是否取消生成物品 返回值
无
备注
- 支持工作台,铁砧,砂轮等工作方块
- screenContainerType = serverApi.GetMinecraftEnum().ContainerType.INVENTORY时,表示从创造模式物品栏中拿出物品,或者从合成栏中拿出合成物品
- 通过cancel参数取消生成物品,可用于禁止外挂刷物品
- cancel=True时无法从创造模式物品栏拿物品
- cancel=True时铁砧无法修复或重命名物品,但仍会扣除经验值
示例
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 合成后的物品的[物品信息字典] 返回值
无
备注
- 该事件在打开3X3工作台界面,2X2工作台界面,向工作台放入物品,预览配方时触发。
- 如果无可合成的物品,或预览的配方因材料不足而无法合成,则传递的物品参数为 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
服务端
描述
触发时机:释放正在使用的物品时
参数
参数名 数据类型说明 playerId str 玩家id durationLeft float 蓄力剩余时间(当物品缺少"minecraft:maxduration"组件时,蓄力剩余时间为负数) itemDict dict 使用的物品的物品信息字典 maxUseDuration int 最大蓄力时长 cancel bool 设置为True可以取消,需要同时取消客户端事件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枚举 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接口,会导致事件循环触发造成堆栈溢出。
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
# 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 返回值
无
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件
# 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枚举 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 容器槽位,含义见:容器类型枚举 oldItemDict dict 旧物品,格式参考物品信息字典 newItemDict dict 生成的物品,格式参考物品信息字典 返回值
无
备注
- 合成容器包括工作台、铁砧、附魔台、织布机、砂轮、切石机、制图台、锻造台,输入物品发生变化时会触发本事件
- 可通过容器槽位区分不同的生成容器类型
- 合成容器的生成槽位生成物品时不触发本事件,生成物品可通过CraftItemOutputChangeServerEvent监听
- 储物容器(箱子,潜影箱),熔炉,酿造台,发射器,投掷器,漏斗,炼药锅,唱片机,高炉,烟熏炉中物品发生变化不会触发此事件,此类容器可通过ContainerItemChangedServerEvent监听
示例
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 '砂轮输入位发生变化'
在零件中直接声明一个同名函数,即可完成监听,详情参考零件事件