# coding=utf-8 from ..MolangTools import molangNames from ..OtherTools import mounts from ..ScreenTools import ScreenTools, RegisterScreenFastly from ..SystemTools import SystemTools from ..ToolsConfig import MOD_NAME, serverCompFactory, serverApi from ..ToolsConfig import clientBaseSystem, serverBaseSystem, clientCompFactory, LevelId class BlueFoxClientSystem(clientBaseSystem): SystemTool = SystemTools.GetTools('BlueFoxClientSystem') BlueFoxServerListener = SystemTool.ListenForEvent(namespace=MOD_NAME, systemName='BlueFoxServerSystem') def __init__(self, namespace, systemName): super(BlueFoxClientSystem, self).__init__(namespace, systemName) molangComp = clientCompFactory.CreateQueryVariable(LevelId) self.blockMolangComp = clientCompFactory.CreateBlockInfo(LevelId) if self.__class__ == BlueFoxClientSystem: self.SystemTool.Binding(self) for mountCls in mounts['c']: mountCls.blueFoxSystem = self print "{}类已挂载{}!".format(mountCls.__name__, systemName) for molangNV in molangNames.items(): molangComp.Register(*molangNV) print "Molang:{}已注册, 默认值:{}".format(*molangNV) print "{}系统已注册!".format(systemName) @BlueFoxServerListener def ChangeBlockEntityMolang(self, args): if args['posDim'][3] == clientCompFactory.CreateGame(LevelId).GetCurrentDimension(): self.blockMolangComp.SetBlockEntityMolangValue( args['posDim'][:3], args['molangName'], args['value'] ) @SystemTool.ListenForEvent() def UiInitFinished(self, args): """ UI引擎加载完毕时触发,本函数继承重写需要执行父类函数 """ if self.__class__ == BlueFoxClientSystem: for screenDef, cls in ScreenTools.autoRegister: cls.blueFoxClient = self RegisterScreenFastly(cls, screenDef) print "{}界面已注册!".format(screenDef) self.NotifyToServer('SetBlockBlockOffset', {}) def _setBlockBlockMobelOffset(self, blockPos, originalPos): """ 方块块尝试偏移模型时触发,不建议修改 """ offsets = [0, 0, 0] for _ in range(3): offsets[_] = (blockPos[_] - originalPos[_]) * -1 if not clientCompFactory.CreateBlockInfo(LevelId).SetBlockEntityModelPosOffset( blockPos, tuple(offsets) ): clientCompFactory.CreateGame(LevelId).AddTimer( 0.0, self._setBlockBlockMobelOffset, blockPos, originalPos ) @BlueFoxServerListener def SetBlockBlockMobelOffset(self, args): """ 方块块尝试偏移模型时触发,不建议修改 """ clientCompFactory.CreateGame(LevelId).AddTimer( 0.0, self._setBlockBlockMobelOffset, args['SetPos'][:3], args['originalPos'][:3] ) def AddEntityClientEvent(self, args): """ 客户端侧创建新实体时触发 """ pass def AddPlayerAOIClientEvent(self, args): """ 玩家加入游戏或者其余玩家进入当前玩家视野时触发的事件,替换AddPlayerEvent """ pass def AddPlayerCreatedClientEvent(self, args): """ 玩家进入当前玩家所在的区块AOI后,玩家皮肤数据异步加载完成后触发的事件 """ pass def ChunkAcquireDiscardedClientEvent(self, args): """ 触发时机:客户端区块即将被卸载时 """ pass def ChunkLoadedClientEvent(self, args): """ 触发时机:客户端区块加载完成时 """ pass def GameRenderTickEvent(self, args): """ 客户端渲染帧开始时触发该事件,一秒触发次数为当前的帧数 """ pass def LoadClientAddonScriptsAfter(self, args): """ 客户端加载mod完成事件 """ pass def OnCommandOutputClientEvent(self, args): """ 当command命令有成功消息输出时触发 """ pass def OnLocalPlayerStopLoading(self, args): """ 触发时机:玩家进入存档,出生点地形加载完成时触发。该事件触发时可以进行切换维度的操作。 """ pass def OnScriptTickClient(self, args): """ 客户端tick事件,1秒30次 """ pass def RemoveEntityClientEvent(self, args): """ 客户端侧实体被移除时触发 """ pass def RemovePlayerAOIClientEvent(self, args): """ 玩家离开当前玩家视野时触发的事件 """ pass def UnLoadClientAddonScriptsBefore(self, args): """ 客户端卸载mod之前触发 """ pass def ApproachEntityClientEvent(self, args): """ 玩家靠近生物时触发 """ pass def EntityModelChangedClientEvent(self, args): """ 触发时机:实体模型切换时触发 """ pass def EntityStopRidingEvent(self, args): """ 触发时机:当实体停止骑乘时 """ pass def HealthChangeClientEvent(self, args): """ 生物生命值发生变化时触发 """ pass def LeaveEntityClientEvent(self, args): """ 玩家远离生物时触发 """ pass def OnGroundClientEvent(self, args): """ 实体着地事件。玩家,沙子,铁砧,掉落的物品,点燃的TNT掉落地面时触发,其余实体着地不触发。 """ pass def OnMobHitMobClientEvent(self, args): """ 触发时机:通过OpenPlayerHitMobDetection打开生物碰撞检测后,当生物间(包含玩家)碰撞时触发该事件。注:客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。 """ pass def StartRidingClientEvent(self, args): """ 触发时机:一个实体即将骑乘另外一个实体 """ pass def CameraMotionStartClientEvent(self, args): """ 相机运动器开始事件。相机添加运动器后,运动器开始运行时触发 """ pass def CameraMotionStopClientEvent(self, args): """ 相机运动器停止事件。相机添加运动器并开始运行后,运动器自动停止时触发 """ pass def DimensionChangeClientEvent(self, args): """ 玩家维度改变时客户端抛出 """ pass def DimensionChangeFinishClientEvent(self, args): """ 玩家维度改变完成后客户端抛出 """ pass def ExtinguishFireClientEvent(self, args): """ 玩家扑灭火焰时触发。下雨,倒水等方式熄灭火焰不会触发。 """ pass def GameTypeChangedClientEvent(self, args): """ 个人游戏模式发生变化时客户端触发。 """ pass def OnLocalPlayerActionClientEvent(self, args): """ 玩家动作事件,当本地玩家开始/停止某些动作时触发该事件 """ pass def OnLocalPlayerStartJumpClientEvent(self, args): """ 本地玩家开始跳跃时触发 """ pass def OnPlayerHitBlockClientEvent(self, args): """ 触发时机:通过OpenPlayerHitBlockDetection打开方块碰撞检测后,当玩家碰撞到方块时触发该事件。玩家着地时会触发OnGroundClientEvent,而不是该事件。客户端和服务端分别作碰撞检测,可能两个事件返回的结果略有差异。 """ pass def PerspChangeClientEvent(self, args): """ 视角切换时会触发的事件 """ pass def PlayerAttackEntityEvent(self, args): """ 触发时机:当本地玩家攻击时触发该事件。 """ pass def BlockAnimateRandomTickEvent(self, args): """ 触发时机:以摄像机为中心,随机选取周围的方块触发Tick,触发的数量取决于设备性能。只有添加了netease:block_animate_random_tick的自定义方块才会触发此事件 """ pass def ClientBlockUseEvent(self, args): """ 触发时机:玩家右键点击新版自定义方块(或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块)时客户端抛出该事件(该事件tick执行,需要注意效率问题)。 """ pass def FallingBlockCauseDamageBeforeClientEvent(self, args): """ 触发时机:当下落的方块开始计算砸到实体的伤害时,客户端触发该事件 """ pass def ModBlockEntityLoadedClientEvent(self, args): """ 客户端自定义方块实体初始化完成时触发 """ pass def ModBlockEntityRemoveClientEvent(self, args): """ 客户端自定义方块实体卸载时触发 """ pass def ModBlockEntityTickClientEvent(self, args): """ 客户端自定义方块实体tick事件 """ pass def OnAfterFallOnBlockClientEvent(self, args): """ 触发时机:当实体降落到方块后客户端触发,主要用于力的计算 """ pass def OnEntityInsideBlockClientEvent(self, args): """ 触发时机:当实体碰撞盒所在区域有方块时,客户端持续触发 """ pass def OnModBlockNeteaseEffectCreatedClientEvent(self, args): """ 自定义方块实体绑定的特效创建成功事件,在自定义方块实体中绑定的特效创建成功时触发以及使用接口CreateFrameEffectForBlockEntity或CreateParticleEffectForBlockEntity为自定义方块实体添加特效成功时触发。 """ pass def OnStandOnBlockClientEvent(self, args): """ 触发时机:当实体站立到方块上时客户端持续触发 """ pass def PlayerTryDestroyBlockClientEvent(self, args): """ 当玩家即将破坏方块时,客户端线程触发该事件。主要用于床,旗帜,箱子这些根据方块实体数据进行渲染的方块,一般情况下请使用ServerPlayerTryDestroyBlockEvent """ pass def ShearsDestoryBlockBeforeClientEvent(self, args): """ 触发时机:玩家手持剪刀破坏方块时,有剪刀特殊效果的方块会在客户端线程触发该事件 """ pass def StartDestroyBlockClientEvent(self, args): """ 玩家开始挖方块时触发。创造模式下不触发。 """ pass def StepOffBlockClientEvent(self, args): """ 触发时机:实体移动离开一个实心方块时触发 """ pass def StepOnBlockClientEvent(self, args): """ 触发时机:实体刚移动至一个新实心方块时触发。 """ pass def ActorAcquiredItemClientEvent(self, args): """ 触发时机:玩家获得物品时客户端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。) """ pass def ActorUseItemClientEvent(self, args): """ 触发时机:玩家使用物品时客户端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲);3)喝牛奶 """ pass def AnvilCreateResultItemAfterClientEvent(self, args): """ 玩家点击铁砧合成得到的物品时抛出的事件。 """ pass def ClientItemTryUseEvent(self, args): """ 玩家点击右键尝试使用物品时客户端抛出的事件,可以通过设置cancel为True取消使用物品。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 """ pass def ClientItemUseOnEvent(self, args): """ 玩家在对方块使用物品时客户端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 """ pass def ClientShapedRecipeTriggeredEvent(self, args): """ 玩家合成物品时触发 """ pass def CraftUpdateResultItemClientEvent(self, args): """ 玩家工作台界面更新显示可合成物品时抛出的事件。 """ pass def GrindStoneRemovedEnchantClientEvent(self, args): """ 玩家点击砂轮合成得到的物品时抛出的事件 """ pass def InventoryItemChangedClientEvent(self, args): """ 玩家背包物品变化时客户端抛出的事件。 """ pass def ItemReleaseUsingClientEvent(self, args): """ 触发时机:释放正在使用的物品 """ pass def OnCarriedNewItemChangedClientEvent(self, args): """ 手持物品发生变化时,触发该事件;数量改变不会通知 """ pass def PlayerTryDropItemClientEvent(self, args): """ 触发时机:玩家丢弃物品时触发 """ pass def StartUsingItemClientEvent(self, args): """ 玩家使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出 """ pass def StopUsingItemClientEvent(self, args): """ 玩家停止使用物品(目前仅支持Bucket(奶桶)、Trident(三叉戟)、RangedWeapon(弓)、Food(食物)、Potion(药水)、Crossbow(弩))时抛出 """ pass def AttackAnimBeginClientEvent(self, args): """ 攻击动作开始时触发 """ pass def AttackAnimEndClientEvent(self, args): """ 攻击动作结束时触发 """ pass def WalkAnimBeginClientEvent(self, args): """ 走路动作开始时触发 """ pass def WalkAnimEndClientEvent(self, args): """ 走路动作结束时触发 """ pass def AchievementButtonMovedClientEvent(self, args): """ 触发时机:使用自定义成就系统的时,拖动成就入口结束时触发 """ pass def ClientChestCloseEvent(self, args): """ 关闭箱子界面时触发,包括小箱子,合并后大箱子和末影箱(实体容器不属于方块,不会触发该事件) """ pass def ClientChestOpenEvent(self, args): """ 打开箱子界面时触发,包括小箱子,合并后大箱子和末影箱(实体容器不属于方块,不会触发该事件) """ pass def ClientPlayerInventoryCloseEvent(self, args): """ 关闭物品背包界面时触发 """ pass def ClientPlayerInventoryOpenEvent(self, args): """ 打开物品背包界面时触发 """ pass def CloseNeteaseShopEvent(self, args): """ 关闭商城界面时触发,包括脚本商城和Apollo插件商城 """ pass def GridComponentSizeChangedClientEvent(self, args): """ 触发时机:UI grid组件里格子数目发生变化时触发 """ pass def HudButtonChangedClientEvent(self, args): """ 当原生HUD按钮位置或大小发生改变时触发,例如玩家使用了自定义控件功能会触发,可在该事件中修改mod按钮的位置防止重叠 """ pass def OnItemSlotButtonClickedEvent(self, args): """ 点击快捷栏、背包栏、盔甲栏、副手栏的物品槽时触发 """ pass def PlayerChatButtonClickClientEvent(self, args): """ 玩家点击聊天按钮或回车键触发呼出聊天窗口时客户端抛出的事件 """ pass def PopScreenAfterClientEvent(self, args): """ screen移除触发 """ pass def PopScreenEvent(self, args): """ screen移除触发 """ pass def PushScreenEvent(self, args): """ screen创建触发 """ pass def ScreenSizeChangedClientEvent(self, args): """ 改变屏幕大小时会触发的事件 """ pass def OnMusicStopClientEvent(self, args): """ 音乐停止时,当玩家调用StopCustomMusic来停止自定义背景音乐时,会触发该事件 """ pass def PlayMusicClientEvent(self, args): """ 播放背景音乐时触发 """ pass def PlaySoundClientEvent(self, args): """ 播放场景音效或UI音效时触发 """ pass def ClientJumpButtonPressDownEvent(self, args): """ 跳跃按钮按下事件,返回值设置参数只对当次按下事件起作用 """ pass def ClientJumpButtonReleaseEvent(self, args): """ 跳跃按钮按下释放事件 """ pass def GetEntityByCoordEvent(self, args): """ 玩家点击屏幕时触发,多个手指点在屏幕上时,只有第一个会触发。 """ pass def GetEntityByCoordReleaseClientEvent(self, args): """ 玩家点击屏幕后松开时触发,多个手指点在屏幕上时,只有最后一个手指松开时触发。 """ pass def GyroSensorChangedClientEvent(self, args): """ 触发时机:陀螺仪传感器姿态发生变化时 """ pass def HoldBeforeClientEvent(self, args): """ 玩家长按屏幕,即将响应到游戏内时触发。仅在移动端或pc的F11模式下触发。pc的非F11模式可以监听RightClickBeforeClientEvent事件 """ pass def LeftClickBeforeClientEvent(self, args): """ 玩家按下攻击/摧毁键时触发,例如鼠标左键、新触控攻击键、手柄右扳机键。鼠标左键仅在pc的普通控制模式(即非F11模式)下触发 """ pass def LeftClickReleaseClientEvent(self, args): """ 玩家松开攻击/摧毁键时触发,例如鼠标左键、新触控攻击键、手柄右扳机键。鼠标左键仅在pc的普通控制模式(即非F11模式)下触发 """ pass def MouseWheelClientEvent(self, args): """ 鼠标滚轮滚动时触发 """ pass def OnBackButtonReleaseClientEvent(self, args): """ 返回按钮(目前特指安卓系统导航中的返回按钮)松开时触发 """ pass def OnClientPlayerStartMove(self, args): """ 移动按钮按下触发事件,在按住一个方向键的同时,去按另外一个方向键,不会触发第二次 """ pass def OnClientPlayerStopMove(self, args): """ 移动按钮按下释放时触发事件,同时按下多个方向键,需要释放所有的方向键才会触发事件 """ pass def OnGamepadControllerLayoutChangeClientEvent(self, args): """ 游戏手柄按键映射改变事件 """ pass def OnGamepadKeyPressClientEvent(self, args): """ 游戏手柄按键事件 """ pass def OnGamepadStickClientEvent(self, args): """ 游戏手柄摇杆事件 """ pass def OnGamepadTriggerClientEvent(self, args): """ 游戏手柄扳机事件 """ pass def OnKeyPressInGame(self, args): """ 按键按下或按键释放时触发 """ pass def OnKeyboardControllerLayoutChangeClientEvent(self, args): """ 键盘按键映射改变事件 """ pass def OnMouseMiddleDownClientEvent(self, args): """ 鼠标按下中键时触发 """ pass def RightClickBeforeClientEvent(self, args): """ 玩家按下使用物品/放置方块键时触发,例如鼠标右键、新触控交互键、手柄左扳机键 """ pass def RightClickReleaseClientEvent(self, args): """ 玩家松开使用物品/放置方块键时触发,例如鼠标右键、新触控交互键、手柄左扳机键 """ pass def TapBeforeClientEvent(self, args): """ 玩家点击屏幕并松手,即将响应到游戏内时触发。仅在移动端或pc的F11模式下触发。pc的非F11模式可以监听LeftClickBeforeClientEvent事件 """ pass def TapOrHoldReleaseClientEvent(self, args): """ 玩家点击屏幕后松手时触发。仅在移动端或pc的F11模式下触发。pc的非F11模式可以使用LeftClickReleaseClientEvent与RightClickReleaseClientEvent事件监听鼠标松开 """ pass def Destroy(self): """ 销毁系统实例时触发 """ pass class BlueFoxServerSystem(serverBaseSystem): SystemTool = SystemTools.GetTools('BlueFoxServerSystem') BlueFoxClientListener = SystemTool.ListenForEvent(namespace=MOD_NAME, systemName='BlueFoxClientSystem') def __init__(self, namespace, systemName): from .. import MolangTools super(BlueFoxServerSystem, self).__init__(namespace, systemName) if self.__class__ == BlueFoxServerSystem: self.SystemTool.Binding(self) MolangTools.blueFoxServerSystem = self for mountCls in mounts['s']: mountCls.blueFoxSystem = self print "{}类已挂载{}!".format(mountCls.__name__, systemName) print "{}系统已注册!".format(systemName) self.ChangedSlot = set() def InventoryItemChangedServerEvent(self, args): """ 玩家背包物品变化时服务端抛出的事件 """ pass @BlueFoxClientListener def SetBlockBlockOffset(self, args): """ 客户端UI加载完成,尝试请求设置方块块模型偏移时触发,已编辑好逻辑 """ pass @BlueFoxClientListener def ChangeItem(self, args): """ 背包引擎界面尝试修改背包物品时触发 已编辑好玩家背包物品栏的处理逻辑,即slot<36 """ pass @BlueFoxClientListener def SpawnItemEntity(self, args): """ 背包引擎界面尝试关闭时,若具有跟手物品,需要生成物品实体时触发 """ self.SpawnItemEntityByPlayer(args['__id__'], args['item']) def SpawnItemEntityByPlayer(self, playerId, itemDict): """ 背包引擎界面尝试关闭时,若具有跟手物品,需要生成物品实体时触发 """ x, y, z = serverCompFactory.CreatePos(playerId).GetFootPos() d = serverCompFactory.CreateDimension(playerId).GetEntityDimensionId() posDim = (x, y + 1.2, z, d) rot = serverCompFactory.CreateRot(playerId).GetRot() dropItemEntityId = self.CreateEngineItemEntity( itemDict, posDim[3], posDim[:3] ) x, y, z = serverApi.GetDirFromRot(rot) serverCompFactory.CreateActorMotion(dropItemEntityId).SetMotion((x * 0.3, y * 0.5, z * 0.3)) return dropItemEntityId def getCarriedItem(self, playerId): """获取玩家主手物品(统一实现)。子服务可覆写, 缺省走这里""" itemComp = serverCompFactory.CreateItem(playerId) return itemComp.GetPlayerItem( serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True) # ============================================================================ # 统一"主动获得物品"接口(任务一): # 所有给玩家的物品一律按优先级分发, 而非直接掉落: # 1) 背包(非主手)存在同类可叠加 -> +1 合并 # 2) 主手为空 -> 放到主手 # 3) 主手有物 -> 放入背包(同类叠加/空位) # 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成) # 死亡生物屠宰 / 稻谷 需要保持"纯掉落"时请勿调用本方法(仍用 CreateEngineItemEntity)。 # ============================================================================ def giveItemToPlayer(self, playerId, itemName, count=1, pos=None, dim=None, aux=0, userData=None): """按统一优先级把物品给玩家。pos/dim 只在最终"掉落物"兜底时用(可为空)。 返回 True = 已成功放入(合并/主手/背包); False = 最终只能掉落或调用方无上下文。""" itemDict = {"itemName": itemName, "count": count, "auxValue": aux} if userData: itemDict["userData"] = userData try: # 1) 背包同类合并(带 userData 的物品不合并, 避免附魔/药水数据被并错) if not userData and self._mergeSameStackInv(playerId, itemName, count): return True # 2) 主手为空 -> 放主手 cur = self.getCarriedItem(playerId) hand = (cur or {}).get("newItemName") if not hand or hand == "minecraft:air": try: if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerCarried( itemDict, playerId): return True except Exception: pass # 3) 放入背包(同类叠加/空位) try: if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerInv( itemDict, playerId): return True except Exception: pass except Exception: pass # 4) 掉落物兜底 if pos and dim: try: self.CreateEngineItemEntity( itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) except Exception: pass return False def _mergeSameStackInv(self, playerId, itemName, count=1): """背包(主手除外)存在可叠加同种物品 -> 数量+count 合并。 返回 True=已合并; False=没有可合并的同种堆叠(不新增物品)。""" itemComp = serverCompFactory.CreateItem(playerId) enum = serverApi.GetMinecraftEnum().ItemPosType try: for i in range(0, 36): d = itemComp.GetPlayerItem(enum.INVENTORY, i, True) if not d: continue if d.get("newItemName") == itemName and (d.get("count") or 0) < 64: newCount = (d.get("count") or 0) + count itemComp.SetEntityItem( enum.INVENTORY, i, {"itemName": itemName, "count": newCount, "auxValue": d.get("newAuxValue", 0), "userData": d.get("userData", {})}) return True except Exception: return False return False @BlueFoxClientListener def RucksackScreenClosed(self, args): """ 背包引擎界面尝试关闭时触发 """ pass def AchievementCompleteEvent(self, args): """ 玩家完成自定义成就时触发该事件 """ pass def AddEntityServerEvent(self, args): """ 服务端侧创建新实体,或实体从存档加载时触发 """ pass def AddServerPlayerEvent(self, args): """ 触发时机:玩家加入时触发该事件。 """ pass def ChunkAcquireDiscardedServerEvent(self, args): """ 服务端区块即将被卸载时触发 """ pass def ChunkGeneratedServerEvent(self, args): """ 触发时机:区块创建完成时触发 """ pass def ChunkLoadedServerEvent(self, args): """ 触发时机:服务端区块加载完成时 """ pass def ClientLoadAddonsFinishServerEvent(self, args): """ 触发时机:客户端mod加载完成时,服务端触发此事件。服务器可以使用此事件,往客户端发送数据给其初始化。 """ pass def CommandEvent(self, args): """ 玩家请求执行指令时触发 """ pass def CustomCommandTriggerServerEvent(self, args): """ 自定义命令触发事件 """ pass def DelServerPlayerEvent(self, args): """ 触发时机:删除玩家时触发该事件。 """ pass def EntityRemoveEvent(self, args): """ 实体被删除时触发 """ pass def ExplosionServerEvent(self, args): """ 当发生爆炸时触发。 """ pass def GlobalCommandServerEvent(self, args): """ 服务端全局命令事件,包括聊天栏发送、SetCommand接口、命令方块(矿车)、行为包动画执行命令 """ pass def LoadServerAddonScriptsAfter(self, args): """ 服务器加载完mod时触发 """ pass def NewOnEntityAreaEvent(self, args): """ 触发时机:通过RegisterEntityAOIEvent注册过AOI事件后,当有实体进入或离开注册感应区域时触发该事件。 """ pass def OnCommandOutputServerEvent(self, args): """ Command命令执行成功事件 """ pass def OnContainerFillLoottableServerEvent(self, args): """ 触发时机:随机奖励箱第一次打开根据loottable生成物品时 """ pass def OnLightningLevelChangeServerEvent(self, args): """ 打雷强度发生改变 """ pass def OnLocalLightningLevelChangeServerEvent(self, args): """ 独立维度天气打雷强度发生改变时触发 """ pass def OnLocalRainLevelChangeServerEvent(self, args): """ 独立维度天气下雨强度发生改变时触发 """ pass def OnRainLevelChangeServerEvent(self, args): """ 下雨强度发生改变 """ pass def OnScriptTickServer(self, args): """ 服务器tick时触发,1秒有30个tick """ pass def PlaceNeteaseLargeFeatureServerEvent(self, args): """ 触发时机:网易版大型结构即将生成时服务端抛出该事件。 """ pass def PlaceNeteaseStructureFeatureEvent(self, args): """ 触发时机:首次生成地形时,结构特征即将生成时服务端抛出该事件。 """ pass def PlayerIntendLeaveServerEvent(self, args): """ 触发时机:即将删除玩家时触发该事件,此时可以通过各种API获取玩家的当前状态。 """ pass def PlayerJoinMessageEvent(self, args): """ 触发时机:准备显示“xxx加入游戏”的玩家登录提示文字时服务端抛出的事件。 """ pass def PlayerLeftMessageServerEvent(self, args): """ 触发时机:准备显示“xxx离开游戏”的玩家离开提示文字时服务端抛出的事件。 """ pass def ServerChatEvent(self, args): """ 玩家发送聊天信息时触发 """ pass def ServerPostBlockPatternEvent(self, args): """ 触发时机:用方块组合生成生物,生成生物之后触发该事件。 """ pass def ServerPreBlockPatternEvent(self, args): """ 触发时机:用方块组合生成生物,在放置最后一个组成方块时触发该事件。 """ pass def ServerSpawnMobEvent(self, args): """ 游戏内自动生成生物,以及使用api生成生物时触发 """ pass def ActorHurtServerEvent(self, args): """ 触发时机:生物(包括玩家)受伤时触发 """ pass def ActuallyHurtServerEvent(self, args): """ 实体实际受到伤害时触发,相比于DamageEvent,该伤害为经过护甲及buff计算后,实际的扣血量 """ pass def AddEffectServerEvent(self, args): """ 触发时机:实体获得状态效果时 """ pass def ChangeSwimStateServerEvent(self, args): """ 触发时机:实体开始或者结束游泳时 """ pass def DamageEvent(self, args): """ 实体受到伤害时触发 """ pass def EntityChangeDimensionServerEvent(self, args): """ 实体维度改变时服务端抛出 """ pass def EntityDefinitionsEventServerEvent(self, args): """ 触发时机:生物定义json文件中设置的event触发时同时触发。生物行为变更事件 """ pass def EntityDieLoottableAfterServerEvent(self, args): """ 触发时机:生物死亡掉落物品之后 """ pass def EntityDieLoottableServerEvent(self, args): """ 触发时机:生物死亡掉落物品时 """ pass def EntityDroppedItemServerEvent(self, args): """ 触发时机:生物扔出物品时触发 """ pass def EntityEffectDamageServerEvent(self, args): """ 生物受到状态伤害/回复事件。 """ pass def EntityLoadScriptEvent(self, args): """ 数据库加载实体自定义数据时触发 """ pass def EntityMotionStartServerEvent(self, args): """ 实体运动器开始事件。实体(包含玩家)添加运动器后,运动器开始运行时触发 """ pass def EntityMotionStopServerEvent(self, args): """ 实体运动器停止事件。实体(包含玩家)添加运动器并开始运行后,运动器自动停止时触发 """ pass def EntityPickupItemServerEvent(self, args): """ 有minecraft:behavior.pickup_items行为的生物拾取物品时触发该事件,例如村民拾取面包、猪灵拾取金锭 """ pass def EntityStartRidingEvent(self, args): """ 当实体骑乘上另一个实体时触发 """ pass def EntityStopRidingEvent(self, args): """ 触发时机:当实体停止骑乘时 """ pass def EntityTickServerEvent(self, args): """ 实体tick时触发。该事件为20帧每秒。需要使用AddEntityTickEventWhiteList添加触发该事件的实体类型白名单。 """ pass def HealthChangeBeforeServerEvent(self, args): """ 生物生命值发生变化之前触发 """ pass def HealthChangeServerEvent(self, args): """ 生物生命值发生变化时触发 """ pass def MobDieEvent(self, args): """ 实体死亡时触发 """ pass def MobGriefingBlockServerEvent(self, args): """ 环境生物改变方块时触发,触发的时机与mobgriefing游戏规则影响的行为相同 """ pass def OnFireHurtEvent(self, args): """ 生物受到火焰伤害时触发 """ pass def OnGroundServerEvent(self, args): """ 实体着地事件。实体,掉落的物品,点燃的TNT掉落地面时触发 """ pass def OnKnockBackServerEvent(self, args): """ 实体被击退时触发 """ pass def OnMobHitBlockServerEvent(self, args): """ 触发时机:通过OpenMobHitBlockDetection打开方块碰撞检测后,当生物(不包括玩家)碰撞到方块时触发该事件。 """ pass def OnMobHitMobServerEvent(self, args): """ 触发时机:通过OpenPlayerHitMobDetection打开生物碰撞检测后,当生物间(包含玩家)碰撞时触发该事件。注:客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。 """ pass def ProjectileCritHitEvent(self, args): """ 触发时机:当抛射物与头部碰撞时触发该事件。注:需调用OpenPlayerCritBox开启玩家爆头后才能触发。 """ pass def ProjectileDoHitEffectEvent(self, args): """ 触发时机:当抛射物碰撞时触发该事件 """ pass def RefreshEffectServerEvent(self, args): """ 触发时机:实体身上状态效果更新时触发,更新条件1、新增状态等级较高,更新状态等级及时间;2、新增状态等级不变,时间较长,更新状态持续时间 """ pass def RemoveEffectServerEvent(self, args): """ 触发时机:实体身上状态效果被移除时 """ pass def SpawnProjectileServerEvent(self, args): """ 触发时机:抛射物生成时触发 """ pass def StartRidingServerEvent(self, args): """ 触发时机:一个实体即将骑乘另外一个实体 """ pass def WillAddEffectServerEvent(self, args): """ 触发时机:实体即将获得状态效果前 """ pass def WillTeleportToServerEvent(self, args): """ 实体即将传送或切换维度 """ pass def AddExpEvent(self, args): """ 触发时机:当玩家增加经验时触发该事件。 """ pass def AddLevelEvent(self, args): """ 触发时机:当玩家升级时触发该事件。 """ pass def ChangeLevelUpCostServerEvent(self, args): """ 触发时机:获取玩家下一个等级升级经验时,用于重载玩家的升级经验,每个等级在重置之前都只会触发一次 """ pass def DimensionChangeFinishServerEvent(self, args): """ 玩家维度改变完成后服务端抛出 """ pass def DimensionChangeServerEvent(self, args): """ 玩家维度改变时服务端抛出 """ pass def ExtinguishFireServerEvent(self, args): """ 玩家扑灭火焰时触发。下雨,倒水等方式熄灭火焰不会触发。 """ pass def GameTypeChangedServerEvent(self, args): """ 当默认游戏模式或个人游戏模式发生变化时服务端触发,如果个人游戏模式不为默认时,修改默认游戏模式也会同时修改个人游戏模式,此时会触发两次该事件 """ pass def MountTamingEvent(self, args): """ 玩家通过骑乘驯服生物后触发该事件 """ pass def OnPlayerActionServerEvent(self, args): """ 玩家动作事件,当玩家开始/停止某些动作时触发该事件 """ pass def OnPlayerHitBlockServerEvent(self, args): """ 触发时机:通过OpenPlayerHitBlockDetection打开方块碰撞检测后,当玩家碰撞到方块时触发该事件。监听玩家着地请使用客户端的OnGroundClientEvent。客户端和服务端分别作碰撞检测,可能两个事件返回的略有差异。 """ pass def PlayerAttackEntityEvent(self, args): """ 触发时机:当玩家攻击时触发该事件。 """ pass def PlayerDieEvent(self, args): """ 触发时机:当玩家死亡时触发该事件。 """ pass def PlayerDoInteractServerEvent(self, args): """ 玩家与有minecraft:interact组件的生物交互时触发该事件,例如玩家手持空桶对牛挤奶、玩家手持打火石点燃苦力怕 """ pass def PlayerEatFoodServerEvent(self, args): """ 触发时机:玩家吃下食物时触发 """ pass def PlayerFeedEntityServerEvent(self, args): """ 玩家喂养生物时触发,例如玩家手持小麦喂养牛、玩家手持胡萝卜喂养幼年猪。 """ pass def PlayerHungerChangeServerEvent(self, args): """ 玩家饥饿度变化时触发该事件 """ pass def PlayerHurtEvent(self, args): """ 触发时机:当玩家受伤害前触发该事件。 """ pass def PlayerInteractServerEvent(self, args): """ 触发时机:玩家可以与实体交互时。如果是鼠标控制模式,则当准心对着实体时触发。如果是触屏模式,则触发时机与屏幕下方的交互按钮显示的时机相同。玩家真正与实体发生交互的事件见PlayerDoInteractServerEvent """ pass def PlayerNamedEntityServerEvent(self, args): """ 玩家用命名牌重命名实体时触发,例如玩家手持命名牌对羊修改名字、玩家手持命名牌对盔甲架修改名字。 """ pass def PlayerRespawnEvent(self, args): """ 触发时机:玩家复活时触发该事件。 """ pass def PlayerRespawnFinishServerEvent(self, args): """ 触发时机:玩家复活完毕时触发 """ pass def PlayerSleepServerEvent(self, args): """ 玩家使用床睡觉成功 """ pass def PlayerStopSleepServerEvent(self, args): """ 玩家停止睡觉 """ pass def PlayerTeleportEvent(self, args): """ 触发时机:当玩家传送时触发该事件,如:玩家使用末影珍珠或tp指令时。 """ pass def PlayerTrySleepServerEvent(self, args): """ 玩家尝试使用床睡觉 """ pass def ServerPlayerGetExperienceOrbEvent(self, args): """ 触发时机:玩家获取经验球时触发的事件 """ pass def StoreBuySuccServerEvent(self, args): """ 触发时机:玩家游戏内购买商品时服务端抛出的事件 """ pass def BlockDestroyByLiquidServerEvent(self, args): """ 触发时机:方块被水流破坏的事件 """ pass def BlockLiquidStateChangeAfterServerEvent(self, args): """ 触发时机:方块转为含水或者脱离含水(流体)后触发 """ pass def BlockLiquidStateChangeServerEvent(self, args): """ 触发时机:方块转为含水或者脱离含水(流体)前触发 """ pass def BlockNeighborChangedServerEvent(self, args): """ 触发时机:自定义方块周围的方块发生变化时,需要配置netease:neighborchanged_sendto_script,详情请查阅《自定义农作物》文档 """ pass def BlockRandomTickServerEvent(self, args): """ 触发时机:自定义方块配置netease:random_tick随机tick时 """ pass def BlockRemoveServerEvent(self, args): """ 触发时机:监听该事件的方块在销毁时触发,可以通过ListenOnBlockRemoveEvent方法进行监听,或者通过json组件netease:listen_block_remove进行配置 """ pass def BlockSnowStateChangeAfterServerEvent(self, args): """ 触发时机:方块转为含雪或者脱离含雪后触发 """ pass def BlockSnowStateChangeServerEvent(self, args): """ 触发时机:方块转为含雪或者脱离含雪前触发 """ pass def BlockStrengthChangedServerEvent(self, args): """ 触发时机:自定义机械元件方块红石信号量发生变化时触发 """ pass def ChestBlockTryPairWithServerEvent(self, args): """ 触发时机:两个并排的小箱子方块准备组合为一个大箱子方块时 """ pass def CommandBlockContainerOpenEvent(self, args): """ 触发时机:玩家点击命令方块,尝试打开命令方块的设置界面 """ pass def CommandBlockUpdateEvent(self, args): """ 触发时机:玩家尝试修改命令方块的内置命令时 """ pass def DestroyBlockEvent(self, args): """ 触发时机:当方块已经被玩家破坏时触发该事件。 """ pass def DirtBlockToGrassBlockServerEvent(self, args): """ 触发时机:泥土方块变成草方块时触发 """ pass def EntityPlaceBlockAfterServerEvent(self, args): """ 触发时机:当生物成功放置方块后触发 """ pass def FallingBlockBreakServerEvent(self, args): """ 触发时机:当下落的方块实体被破坏时,服务端触发该事件 """ pass def FallingBlockCauseDamageBeforeServerEvent(self, args): """ 触发时机:当下落的方块开始计算砸到实体的伤害时,服务端触发该事件 """ pass def FallingBlockReturnHeavyBlockServerEvent(self, args): """ 触发时机:当下落的方块实体变回普通重力方块时,服务端触发该事件 """ pass def FarmBlockToDirtBlockServerEvent(self, args): """ 触发时机:耕地退化为泥土时触发 """ pass def GrassBlockToDirtBlockServerEvent(self, args): """ 触发时机:草方块变成泥土方块时触发 """ pass def HeavyBlockStartFallingServerEvent(self, args): """ 触发时机:当重力方块变为下落的方块实体后,服务端触发该事件 """ pass def HopperTryPullInServerEvent(self, args): """ 触发时机:当漏斗上方连接容器后,容器往漏斗开始输入物品时触发,事件仅触发一次 """ pass def HopperTryPullOutServerEvent(self, args): """ 触发时机:当漏斗以毗邻的方式连接容器时,即从旁边连接容器时,漏斗向容器开始输出物品时触发,事件仅触发一次 """ pass def OnAfterFallOnBlockServerEvent(self, args): """ 触发时机:当实体降落到方块后服务端触发,主要用于力的计算 """ pass def OnBeforeFallOnBlockServerEvent(self, args): """ 触发时机:当实体刚降落到方块上时服务端触发,主要用于伤害计算 """ pass def OnEntityInsideBlockServerEvent(self, args): """ 触发时机:当实体碰撞盒所在区域有方块时,服务端持续触发 """ pass def OnStandOnBlockServerEvent(self, args): """ 触发时机:当实体站立到方块上时服务端持续触发 """ pass def PistonActionServerEvent(self, args): """ 触发时机:活塞或者粘性活塞推送/缩回影响附近方块时 """ pass def ServerBlockEntityTickEvent(self, args): """ 触发时机:自定义方块配置了netease:block_entity组件并设tick为true,方块在玩家的模拟距离(新建存档时可以设置,默认为4个区块)内,或者在tickingarea内的时候触发 """ pass def ServerBlockUseEvent(self, args): """ 触发时机:玩家右键点击新版自定义方块(或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块)时服务端抛出该事件(该事件tick执行,需要注意效率问题)。 """ pass def ServerEntityTryPlaceBlockEvent(self, args): """ 触发时机:当生物试图放置方块时触发该事件。 """ pass def ServerPlaceBlockEntityEvent(self, args): """ 触发时机:手动放置或通过接口创建含自定义方块实体的方块时触发,此时可向该方块实体中存放数据 """ pass def ServerPlayerTryDestroyBlockEvent(self, args): """ 当玩家即将破坏方块时,服务端线程触发该事件。 """ pass def ShearsDestoryBlockBeforeServerEvent(self, args): """ 触发时机:玩家手持剪刀破坏方块时,有剪刀特殊效果的方块会在服务端线程触发该事件 """ pass def StartDestroyBlockServerEvent(self, args): """ 玩家开始挖方块时触发。创造模式下不触发。 """ pass def StepOffBlockServerEvent(self, args): """ 触发时机:实体移动离开一个实心方块时触发 """ pass def StepOnBlockServerEvent(self, args): """ 触发时机:实体刚移动至一个新实心方块时触发。 """ pass def ActorAcquiredItemServerEvent(self, args): """ 触发时机:玩家获得物品时服务端抛出的事件(有些获取物品方式只会触发客户端事件,有些获取物品方式只会触发服务端事件,在使用时注意一点。) """ pass def ActorUseItemServerEvent(self, args): """ 触发时机:玩家使用物品生效之前服务端抛出的事件(比较特殊不走该事件的例子:1)染料对有水的炼药锅使用;2)盔甲架装备盔甲) """ pass def ContainerItemChangedServerEvent(self, args): """ 容器物品变化事件 """ pass def CraftItemOutputChangeServerEvent(self, args): """ 玩家从容器拿出生成物品时触发 """ pass def FurnaceBurnFinishedServerEvent(self, args): """ 服务端熔炉烧制触发事件。熔炉, 高炉,烟熏炉烧出物品时触发 """ pass def ItemDurabilityChangedServerEvent(self, args): """ 物品耐久度变化事件 """ pass def ItemReleaseUsingServerEvent(self, args): """ 触发时机:释放正在使用的物品时 """ pass def ItemUseAfterServerEvent(self, args): """ 玩家在使用物品之后服务端抛出的事件。 """ pass def ItemUseOnAfterServerEvent(self, args): """ 玩家在对方块使用物品之后服务端抛出的事件。 """ pass def OnCarriedNewItemChangedServerEvent(self, args): """ 触发时机:玩家切换主手物品时触发该事件 """ pass def OnItemPutInEnchantingModelServerEvent(self, args): """ 触发时机:玩家将可附魔物品放到附魔台上时 """ pass def OnNewArmorExchangeServerEvent(self, args): """ 触发时机:玩家切换盔甲时触发该事件 """ pass def OnOffhandItemChangedServerEvent(self, args): """ 触发时机:玩家切换副手物品时触发该事件 """ pass def OnPlayerActiveShieldServerEvent(self, args): """ 触发时机:玩家激活/取消激活盾牌触发的事件。包括玩家持盾进入潜行状态,以及在潜行状态切换盾牌(切换耐久度不同的相同盾牌不会触发) """ pass def OnPlayerBlockedByShieldAfterServerEvent(self, args): """ 触发时机:玩家使用盾牌抵挡伤害之后触发 """ pass def OnPlayerBlockedByShieldBeforeServerEvent(self, args): """ 触发时机:玩家使用盾牌抵挡伤害之前触发 """ pass def PlayerDropItemServerEvent(self, args): """ 触发时机:玩家丢弃物品时触发 """ pass def PlayerPickupArrowServerEvent(self, args): """ 玩家即将捡起抛射物时触发,包括使用"netease:pick_up"的自定义抛射物 """ pass def ServerItemTryUseEvent(self, args): """ 玩家点击右键尝试使用物品时服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 """ pass def ServerItemUseOnEvent(self, args): """ 玩家在对方块使用物品之前服务端抛出的事件。注:如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 """ pass def ServerPlayerTryTouchEvent(self, args): """ 玩家即将捡起物品时触发 """ pass def ShearsUseToBlockBeforeServerEvent(self, args): """ 触发时机:实体手持剪刀对方块使用时,有剪刀特殊效果的方块会在服务端线程触发该事件 """ pass def UIContainerItemChangedServerEvent(self, args): """ 合成容器物品发生变化时触发 """ pass def AttackAnimBeginServerEvent(self, args): """ 当攻击动作开始时触发 """ pass def AttackAnimEndServerEvent(self, args): """ 当攻击动作结束时触发 """ pass def JumpAnimBeginServerEvent(self, args): """ 当跳跃动作开始时触发 """ pass def WalkAnimBeginServerEvent(self, args): """ 当走路动作开始时触发 """ pass def WalkAnimEndServerEvent(self, args): """ 当走路动作结束时触发 """ pass def PlayerInventoryOpenScriptServerEvent(self, args): """ 某个客户端打开物品背包界面时触发 """ pass def UrgeShipEvent(self, args): """ 玩家点击商城催促发货按钮时触发该事件 """ pass def lobbyGoodBuySucServerEvent(self, args): """ 玩家登录联机大厅服务器,或者联机大厅游戏内购买商品时触发。如果是玩家登录,触发时玩家客户端已经触发了UiInitFinished事件 """ pass def Destroy(self): """ 销毁系统实例时触发 """ pass