Files
rtdd/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/BlueFoxTools/FastComp.py
T
2026-03-21 17:10:22 +08:00

89 lines
2.5 KiB
Python

# coding=utf-8
from ToolsConfig import serverCompFactory, clientCompFactory, serverApi, clientApi, LevelId
from ItemTools import IsSameItem
def DictFromBlockEntityData(blockEntityData, posDim):
"""
从方块实体中获取全部数据
:param blockEntityData:方块实体自定义数据
:param posDim:坐标维度
:return:dict
"""
data = getattr(getattr(blockEntityData, '_BlockEntityData__exDataMgr'), 'mBlockEntityData')
return data[posDim[3]][posDim[:3]]
def SetBlockAir(posDim):
"""
设置某位置的方块为空,仅服务端可用
"""
return serverCompFactory.CreateBlockInfo(LevelId).SetBlockNew(
posDim[:3], {'name': 'minecraft:air'}, dimensionId=posDim[3]
)
def GetEntityDim(entityId):
"""
获取实体维度,仅服务端可用
"""
return serverCompFactory.CreateDimension(entityId).GetEntityDimensionId()
def DeclarePlayerInvItem(playerId, itemDict1, count=1):
"""
减少玩家背包内特定物品
:param playerId:玩家ID
:param count:减少数量
:param itemDict1:需要检测的物品字典,必须包含newItemName字段
:return:是否成功减少
"""
itemComp = serverCompFactory.CreateItem(playerId)
itemDicts = itemComp.GetPlayerAllItems(0)
for index in range(itemDicts.__len__()):
itemDict = itemDicts[index]
if itemDict and IsSameItem(itemDict, itemDict1):
itemComp.SetInvItemNum(index, itemDict['count'] - count)
return True
return False
def GetEntityCarriedItem(entityId):
"""
获取玩家右手物品
"""
return serverCompFactory.CreateItem(entityId).GetEntityItem(2, 0, True)
def GetEntityTypeComp(entityId):
"""
获取实体类型组件
"""
return serverCompFactory.CreateEngineType(entityId) or clientCompFactory.CreateEngineType(entityId)
def IsPlayer(entityId):
"""
判断一个实体是否为玩家
"""
player = serverApi.GetMinecraftEnum().EntityType.Player
return GetEntityTypeComp(entityId).GetEngineType() & player == player
def GetEntityItemComp(entityId):
"""
获取实体类型组件
"""
return serverCompFactory.CreateItem(entityId) or clientCompFactory.CreateItem(entityId)
def DeclarePlayerCarriedItem(playerId):
"""
减少玩家右手物品一个,仅服务端有效
"""
itemComp = GetEntityItemComp(playerId)
itemDict = itemComp.GetPlayerItem(2, 0, True)
if itemDict:
itemDict['count'] -= 1
return itemComp.SpawnItemToPlayerCarried(itemDict, playerId)