# 服务端组件
# 传送门
# portal
# DetectStructure
描述
检测自定义门的结构
参数
参数名 数据类型 说明 playerId str 玩家Id pattern list(str) 传送门形状 defines dict 传送门定义 touchPos list(tuple(int,int)) 传送门可激活的位置(相对参数pattern中定义的位置) pos tuple(int,int,int) 使用物品坐标 返回值
数据类型 说明 tuple(bool,tuple(int,int,int),tuple(int,int,int)) 检测结果,传送门起始位置,方向 示例
#传送门定义
defines = {
'#': 'minecraft:glowstone',
'*': 'minecraft:air'
}
#传送门形状
pattern = [
'####',
'#**#',
'#**#',
'####',
]
# 最下面中间的两个位置点击激活
touchPos =[(3,1),(3,2)]
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePortal(entityId)
ret = comp.DetectStructure(playerId, pattern, defines, touchPos, (12, 1, 5))
if ret[0]:
logger.info('自定义传送门构建成功')
else:
logger.info('自定义传送门构建失败')
# 方块
# block
# RegisterBlockPatterns
描述
注册特殊方块组合
参数
参数名 数据类型 说明 pattern list(str) 方块组合位置 defines dict 方块组合类型 result_actor_name str 合成结果 返回值
数据类型 说明 bool 设置结果 示例
comp = serverApi.GetEngineCompFactory().CreateBlock(levelId)
pattern = [
' # ',
'XXX',
' X '
]
defines ={
'#': 'minecraft:gold_block',
'X': 'minecraft:iron_block'
}
comp.RegisterBlockPatterns(pattern,defines,'minecraft:chicken')
#该例子左中右下放铁块,上面放金块,会生成一只鸡
# blockEntityData
管理自定义方块的自定义方块实体数据,若该自定义方块实体所在区块并未加载(附近没有玩家),可能无法成功修改。
# GetBlockEntityData
描述
用于获取可操作某个自定义方块实体数据的对象,操作方式与dict类似
参数
参数名 数据类型 说明 dimension int 维度 pos tuple(int,int,int) 方块所在位置 返回值
数据类型 说明 BlockEntityData或None 可操作该方块实体内数据的对象 备注
- GetBlockEntityData返回None通常是由于该方块所在区块未加载、正在退出游戏、该方块不是自定义方块或该自定义方块的json中并未配置netease:block_entity组件。
在对GetBlockEntityData返回对象进行操作前,请先判断它是否为空,否则会导致'NoneType' object has no attribute '__getitem__'
错误。 - 支持python基本数据类型(int/float/string/bool/dict/list),不支持tuple且dict的key必须为字符串
- 存储list时,list内各项的数据类型应相同,否则将存储失败。如[True, False]可成功存储,[True, 1, 0.5]会存储失败
- 虽然返回的对象操作与dict相似,但并不支持嵌套存储,只允许形如blockEntityData['key'] = value的直接赋值。如blockEntityData["value5"] ["v1"] = 9或blockEntityData["value6"].append(True)的操作将无法成功存储数据。
- 存储整数时,若数值范围超过int所能表示的最大范围,将无法成功存储。建议将此类数值转为字符串进行存储。
- GetBlockEntityData返回None通常是由于该方块所在区块未加载、正在退出游戏、该方块不是自定义方块或该自定义方块的json中并未配置netease:block_entity组件。
示例
import mod.server.extraServerApi as serverApi
# 设置
blockEntitycomp = serverApi.GetEngineCompFactory().CreateBlockEntityData(levelId)
dimension = 0
pos = (4, 3, 2)
# GetBlockEntityData在某些情况下会返回None,对返回结果进行操作前务必先判断它是否为空
blockEntityData = blockEntitycomp.GetBlockEntityData(dimension, pos)
# 存储数据
# 支持存储python基本数据类型(int/float/string/bool/dict/list),不支持tuple,并且key必须为字符串
# 存储list时,list内各项的数据类型应相同,否则将存储失败
if blockEntityData:
blockEntityData['value1'] = 10
blockEntityData['value2'] = 3.5
blockEntityData['value3'] = True
blockEntityData['value4'] = "hello"
blockEntityData['value5'] = {"v1": 10, "v2": 3.5, "v3": [0,1,2]}
blockEntityData['value6'] = [True, False]
# 读取数据
if blockEntityData:
value1 = blockEntityData['value1']
value5 = blockEntityData['value5']
# 不存在于方块实体中的数据将返回None
valueNone = blockEntityData['valueNone']
# blockInfo
# CheckBlockToPos
描述
判断位置之间是否有方块
参数
参数名 数据类型 说明 fromPos tuple(float,float,float) 起始位置 toPos tuple(float,float,float) 终止位置 dimensionId int 位置所在维度,默认值为-1,传入非负值时不依赖playerId,CreateBlockInfo可传入levelId,否则CreateBlockInfo需传入playerId来获取玩家当前维度 返回值
数据类型 说明 int result -1:获取失败 0:没有方块 1:有方块 备注
- 支持判断对应维度的常加载区块内位置之间是否有方块
- 返回-1通常是由于传入维度不存在、传入错误参数、传入位置所在区块并未加载等
示例
import mod.server.extraServerApi as serverApi
from mod_log import logger as logger
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
if comp.CheckBlockToPos((0, 0, 0), (1, 1, 1)):
logger.info("(0, 0, 0)与(1, 1, 1)之间有方块")
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
if comp.CheckBlockToPos((0, 0, 0), (1, 1, 1), 0):
logger.info("(0, 0, 0)与(1, 1, 1)之间有方块")
# CleanBlockTileEntityCustomData
描述
清空指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据。
参数
参数名 数据类型 说明 pos tuple(int,int,int) 绑定TileEntity的特殊方块的位置坐标 返回值
数据类型 说明 bool 清空结果,假如对应位置的block不存在或者没有绑定的TileEntity,就会失败 备注
- 该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
suc = comp.CleanBlockTileEntityCustomData(pos)
print "CleanBlockTileEntityCustomData pos=%s suc=%s" % (str(pos), suc)
# GetBedColor
描述
获取床(方块)的颜色
参数
参数名 数据类型 说明 pos tuple(int,int,int) 床的位置坐标(床占地两格,任意一个格子都可以) 返回值
数据类型 说明 int ItemColor枚举 备注
- 当输入的坐标位置的方块不是床的时候,返回-1
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
color = comp.GetBedColor(pos)
print "GetBedColor color={}".format(color)
# GetBlockEntityData
描述
用于获取方块(包括自定义方块)的数据,数据只读不可写
参数
参数名 数据类型 说明 dimension int 维度 pos tuple(int,int,int) 方块所在位置 返回值
数据类型 说明 dict或None 方块实体内数据的对象 备注
- **随着版本更迭,方块中包含的数据结构可能被微软团队调整,并且不会公告,使用该接口的开发者需注意版本更新时做好测试和兼容。数据编码为UTF-8 适用于:方块实体 特殊情况:末影箱的物品信息不能通过该接口获取
示例
import mod.server.extraServerApi as serverApi
blockEntitycomp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
blockEntityData = blockEntitycomp.GetBlockEntityData(0, (4, 3, 2))
# GetBlockLightLevel
描述
获取方块位置的光照等级
参数
参数名 数据类型 说明 pos tuple(int,int,int) 方块位置 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,CreateBlockInfo可传入levelId,否则CreateBlockInfo需传入playerId来获取玩家当前维度 返回值
数据类型 说明 int 光照等级 备注
- 仅能获取到已加载区块内方块位置的光照等级,支持获取对应维度的常加载区块内光照等级
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
lightlevel = comp.GetBlockLightLevel((x,y,z))
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
lightlevel = comp.GetBlockLightLevel((x,y,z), 0)
# GetBlockNew
描述
获取某一位置的block
参数
参数名 数据类型 说明 pos tuple(int,int,int) 方块位置 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,CreateBlockInfo可传入levelId,否则CreateBlockInfo需传入playerId来获取玩家当前维度 返回值
数据类型 说明 dict 方块信息字典,详见SetBlockNew的备注 备注
- 已经加载的地形才能获取方块信息,支持获取对应维度的常加载区块内方块信息
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
blockDict = comp.GetBlockNew((0, 5, 0))
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
blockDict = comp.GetBlockNew((0, 5, 0), 0)
# GetBlockTileEntityCustomData
描述
读取指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据
参数
参数名 数据类型 说明 pos tuple(int,int,int) 绑定TileEntity的特殊方块的位置坐标 key str 自定义key 返回值
数据类型 说明 any 设定的value值,假如对应的数据不存在,则会返回None 备注
- 该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
key = "owner"
val = comp.GetBlockTileEntityCustomData(pos, key)
print "GetBlockTileEntityCustomData pos=%s key=%s value=%s" % (str(pos), key, val)
# GetBlockTileEntityWholeCustomData
描述
读取指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据字典。
参数
参数名 数据类型 说明 pos tuple(int,int,int) 绑定TileEntity的特殊方块的位置坐标 返回值
数据类型 说明 dict或None TileEntity自定义存储数据字典,假如没有任何额外存储数据,那么返回None或者空字典 备注
- 该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
data = comp.GetBlockTileEntityWholeCustomData(pos)
if not data:
print "GetBlockTileEntityWholeCustomData pos=%s return empty" % (str(pos), )
else:
print "GetBlockTileEntityWholeCustomData pos=%s return success" % (str(pos), )
if data:
for key, val in data.iteritems():
print "key=%s val=%s" % (key, str(val))
# GetChestPairedPosition
描述
获取与箱子A合并成一个大箱子的箱子B的坐标
参数
参数名 数据类型 说明 pos tuple(int,int,int) 箱子A的位置坐标 返回值
数据类型 说明 tuple(int,int,int)或None 箱子B的位置坐标,假如输入的箱子A坐标上的方块不是箱子类方块或者没有和其他箱子方块组合成一个大箱子,就会返回None 备注
- 该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
otherPos = comp.GetChestPairedPosition(pos)
if otherPos:
print "GetChestPairedPosition success pos=%s otherPos=%s" % (str(pos), str(otherPos))
else:
print "GetChestPairedPosition failed pos=%s" % (str(pos), )
# GetSignBlockText
描述
获取告示牌(方块)的文本内容
参数
参数名 数据类型 说明 pos tuple(int,int,int) 告示牌的位置坐标 返回值
数据类型 说明 str 告示牌上的文本内容 备注
- 当输入的坐标位置的方块不是告示牌的时候,返回None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
text = comp.GetSignBlockText(pos)
print "GetSignBlockText text={}".format(text)
# GetTopBlockHeight
描述
获取某一位置最高的非空气方块的高度
参数
参数名 数据类型 说明 pos tuple(int,int) x轴与z轴位置 dimension int 维度id,默认为0,可在获取常加载区块内最高非空气方块高度 返回值
数据类型 说明 int 高度 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
height = comp.GetTopBlockHeight((5, 5), 0)
# ListenOnBlockRemoveEvent
描述
是否监听方块BlockRemoveServerEvent事件,可以动态修改json组件netease:listen_block_remove的值
参数
参数名 数据类型 说明 identifier str 方块identifier,如minecraft:wheat listen bool 是否监听 返回值
数据类型 说明 bool 是否设置成功 备注
- 对于一些特殊的方块,注意要使用对应的方块Id参数(如砖块楼梯,监听的方块Id应该为minecraft:brick_block)
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.ListenOnBlockRemoveEvent("minecraft:wheat", True)
# MayPlace
描述
判断方块是否可以放置
参数
参数名 数据类型 说明 identifier str 方块identifier,如minecraft:wheat blockPos tuple(int,int,int) 方块将要放置的坐标 facing int 朝向,详见Facing枚举 dimensionId int 维度,默认为主世界0 返回值
数据类型 说明 bool 方块是否可以放置 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
pos = (-1, 4, 34)
canPlace = comp.MayPlace("minecraft:wheat", pos, serverApi.GetMinecraftEnum().Facing.Up, 0)
# PlayerDestoryBlock
描述
使用手上工具破坏方块
参数
参数名 数据类型 说明 pos tuple(int,int,int) 方块位置 返回值
数据类型 说明 bool 设置结果 备注
- 手上工具的附魔效果会生效,同时扣除耐久度
- 会触发ServerPlayerTryDestroyBlockEvent事件,并且可以被这个事件cancel
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId) # 此处playerId为block的破坏者
comp.PlayerDestoryBlock((0, 5, 0))
# SetBedColor
描述
设置床(方块)的颜色
参数
参数名 数据类型 说明 pos tuple(int,int,int) 床的位置坐标(床占地两格,任意一个格子都可以) color int ItemColor枚举 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
suc = comp.SetBedColor(pos, serverApi.GetMinecraftEnum().ItemColor.Blue)
print "SetBedColor suc={}".format(suc)
# SetBlockNew
描述
设置某一位置的方块
参数
参数名 数据类型 说明 pos tuple(int,int,int) 方块位置 blockDict dict 方块信息字典 oldBlockHandling int 0:替换,1:销毁,2:保留,默认为0 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,CreateBlockInfo可传入levelId,否则CreateBlockInfo需传入playerId来获取玩家当前维度 返回值
数据类型 说明 bool 设置结果 备注
已经加载的地形才能设置方块,支持在对应维度的常加载区块内设置方块 方块信息字典 blockDict
关键字 数据类型 说明 name str 必须设置,方块identifier,包含命名空间及名称,如minecraft:air aux int 方块附加值,可缺省,默认为0 原版方块的identifier可以查看官方wiki
若使用SetBlockNew接口替换含方块实体的方块,除自定义方块实体外,当替换前后方块实体类型相同时,其方块实体内数据不会发生改变。 例如在箱子中放置了物品,使用SetBlockNew接口将箱子方块替换为箱子方块后,新的箱子中依然保留旧箱子内的物品。
要避免这种情况,中间添加一次不同方块实体类型(或不含方块实体)的方块替换即可。比如先将箱子替换为空气,再将空气替换为箱子。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId) # 此处playerId为block的设置者
blockDict = {
'name': 'minecraft:wool',
'aux': 5
}
comp.SetBlockNew((0, 5, 0), blockDict)
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.SetBlockNew((0, 5, 0), blockDict, 0, 0)
# SetBlockTileEntityCustomData
描述
设置指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据。
参数
参数名 数据类型 说明 pos tuple(int,int,int) 绑定TileEntity的特殊方块的位置坐标 key str 自定义key value any 支持python基本数据类型,tuple不支持 返回值
数据类型 说明 bool 设置结果,假如对应位置的block不存在或者没有绑定的TileEntity,就会设置失败 备注
- 该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
suc = comp.SetBlockTileEntityCustomData(pos, "owner", "Jack")
print "SetBlockTileEntityCustomData pos=%s suc=%s" % (str(pos), suc)
# SetSignBlockText
描述
设置告示牌(方块)的文本内容
参数
参数名 数据类型 说明 pos tuple(int,int,int) 告示牌的位置坐标 text str 想要设置的文本内容 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId)
pos = (-1, 4, 34)
suc = comp.SetSignBlockText(pos, "文本内容")
print "SetSignBlockText suc={}".format(suc)
# SpawnResources
描述
产生方块随机掉落(该方法不适用于实体方块)
参数
参数名 数据类型 说明 identifier str 方块的identifier,如minecraft:wool pos tuple(int,int,int) 掉落位置 aux int 方块的附加值 probability float 掉落概率,范围为[0, 1],0为不掉落,1为100%掉落 bonusLootLevel int 时运等级,默认为0 dimensionId int 掉落方块的维度,默认值为-1,传入非负值时用于获取产生方块掉落的维度;否则将随机挑选一个存在玩家的维度产生掉落 返回值
数据类型 说明 bool 是否成功 备注
- 时运等级只对部分方块生效 概率对部分农作物树叶不生效
- 可在对应维度的常加载区块产生掉落
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
# 金矿石掉落
result = comp.SpawnResources('minecraft:gold_ore', (1,1,1), 7, 1.0, 10)
# 指定维度产生掉落
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
result = comp.SpawnResources('minecraft:gold_ore', (1,1,1), 7, 1.0, 10, 0)
# blockState
# GetBlockAuxValueFromStates
描述
根据方块名称和方块状态获取方块附加值AuxValue
参数
参数名 数据类型 说明 blockName str 方块名称 states dict 方块状态 返回值
数据类型 说明 int 方块附加值AuxValue,异常时为-1 示例
comp = serverApi.GetEngineCompFactory().CreateBlockState(levelId)
states = comp.GetBlockAuxValueFromStates("minecraft:hopper", {"facing_direction": 0, "toggle_bit": 0})
# GetBlockStates
描述
获取方块状态
参数
参数名 数据类型 说明 pos tuple(float,float,float) 方块位置 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,CreateBlockState可传入levelId,否则CreateBlockState需传入playerId来获取玩家当前维度 返回值
数据类型 说明 dict 方块状态,异常时为None 备注
- 仅可获取到已加载区块内的方块状态,支持获取对应维度的常加载区块内方块状态
示例
comp = serverApi.GetEngineCompFactory().CreateBlockState(playerId)
comp.GetBlockStates((4,4,3))
# 不依赖playerId举例,支持常加载区块
.comp = serverApi.GetEngineCompFactory().CreateBlockState(levelId)
comp.GetBlockStates((4,4,3), 0)
# GetBlockStatesFromAuxValue
描述
根据方块名称和方块附加值AuxValue获取方块状态
参数
参数名 数据类型 说明 blockName str 方块名称 auxValue int 方块附加值AuxValue 返回值
数据类型 说明 dict 方块状态,异常时为None 示例
comp = serverApi.GetEngineCompFactory().CreateBlockState(levelId)
states = comp.GetBlockStatesFromAuxValue('minecraft:sapling', 9)
# SetBlockStates
描述
设置方块状态
参数
参数名 数据类型 说明 pos tuple(float,float,float) 方块位置 data dict 方块状态 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,CreateBlockState可传入levelId,否则CreateBlockState需传入playerId来获取玩家当前维度 返回值
数据类型 说明 bool 设置是否成功 备注
- 仅可设置已加载区块内的方块状态,支持设置对应维度的常加载区块内方块状态
示例
# 将白色羊毛设置为橙色羊毛
pos = (4,4,3)
comp = serverApi.GetEngineCompFactory().CreateBlockState(playerId)
state = comp.GetBlockStates(pos) # state = { 'color': 'white' }
state['color'] = 'orange'
comp.SetBlockStates(pos, state)
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateBlockState(levelId)
state = comp.GetBlockStates(pos, 0) # state = { 'color': 'white' }
state['color'] = 'orange'
comp.SetBlockStates(pos, state, 0)
# blockUseEventWhiteList
管理方块对ServerBlockUseEvent事件在脚本层的监听
# AddBlockItemListenForUseEvent
描述
增加blockName方块对ServerBlockUseEvent事件的脚本层监听
参数
参数名 数据类型 说明 blockName str 方块名称,格式:namespace:name:auxvalue,其中namespace:name:*匹配所有的auxvalue 返回值
数据类型 说明 bool 是否增加成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(levelId)
comp.AddBlockItemListenForUseEvent("minecraft:nether_brick_stairs:2")
# 注意blockName格式为namespace:name:auxvalue,如果不填auxvalue,则默认为0
# auxValue详细值详见官方wiki,如https://minecraft-zh.gamepedia.com/楼梯 中的‘方块数据值’
# ClearAllListenForBlockUseEventItems
描述
清空所有已添加方块对ServerBlockUseEvent事件的脚本层监听
参数
无
返回值
数据类型 说明 bool 是否清空成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(levelId)
comp.ClearAllListenForBlockUseEventItems()
# RemoveBlockItemListenForUseEvent
描述
移除blockName方块对ServerBlockUseEvent事件的脚本层监听
参数
参数名 数据类型 说明 blockName str 方块名称,格式:namespace:name:auxvalue,其中namespace:name:*匹配所有的auxvalue 返回值
数据类型 说明 bool 是否移除成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(levelId)
comp.RemoveBlockItemListenForUseEvent("minecraft:nether_brick_stairs:2")
# 注意blockName格式为namespace:name:auxvalue,如果不填auxvalue,则默认为0
# auxValue详细值详见官方wiki,如https://minecraft-zh.gamepedia.com/楼梯 中的‘方块数据值’
# redStone
# GetBlockPoweredState
描述
获取某个坐标方块的充能状态
参数
参数名 数据类型 说明 pos tuple(float,float,float) 方块坐标位置 dimensionId int 目标维度 返回值
数据类型 说明 int 充能状态 0:未充能;1:弱充能;2:强充能 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRedStone(levelId)
comp.GetBlockPoweredState((1,1,1), 0)
# GetStrength
描述
获取某个坐标的红石信号强度
参数
参数名 数据类型 说明 pos tuple(float,float,float) 坐标位置 dimensionId int 目标维度,默认值为-1,传入非负值时不依赖playerId,CreateRedStone可传入levelId,否则CreateRedStone需传入playerId来获取玩家当前维度 返回值
数据类型 说明 int 红石信号强度[0, 15] 备注
- 可获取对应维度的常加载区块内红石信号强度
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRedStone(playerId)
comp.GetStrength((1,1,1))
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateRedStone(levelId)
comp.GetStrength((1,1,1), 0)
# 官方伙伴
# pet
# Disable
描述
关闭官方伙伴功能,单人游戏以及本地联机不支持该接口
参数
无
返回值
数据类型 说明 bool 关闭结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePet(levelId)
comp.Disable()
# Enable
描述
启用官方伙伴功能,单人游戏以及本地联机不支持该接口
参数
无
返回值
数据类型 说明 bool 启用结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePet(levelId)
comp.Enable()
# 控制
# actorMotion
玩家的移动方向和大小
# GetMotion
描述
获取生物(含玩家)的瞬时移动方向向量
参数
无
返回值
数据类型 说明 tuple(int,int,int) 瞬时移动方向向量,异常时返回None 示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.GetMotion()
# SetMotion
描述
设置生物(不含玩家)的瞬时移动方向向量
参数
参数名 数据类型 说明 motion tuple(float,float,float) 世界坐标系下的向量,该方向为世界坐标系下的向量,以x,z,y三个轴的正方向为正值,可以通过当前生物的rot组件判断目前玩家面向的方向,可在开发模式下打开F3观察数值变化。 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
# 使生物向准星的方向突进一段距离
rotComp = serverApi.GetEngineCompFactory().CreateRot(entityId)
rot = rotComp.GetRot()
x, y, z = serverApi.GetDirFromRot(rot)
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.SetMotion((x * 5, y * 5, z * 5))
# rot 和 世界坐标系关系
# ^ x -90°
# |
# 180°/-180 ----------> z 0°
# | 90°
# 模型
# model
# GetModelName
描述
获取实体的模型名称
参数
无
返回值
数据类型 说明 str 模型名称 备注
- 在服务端获取,客户端不生效
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
modelName = comp.GetModelName()
# SetModel
描述
设置骨骼模型
参数
参数名 数据类型 说明 modelName str 模型名称,值为""时重置模型 返回值
数据类型 说明 bool 设置结果 示例
#设置名称
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModel("xuenv")
# SetModelOffset
描述
设置骨骼模型相对于局部坐标系的偏移量,初始值为(0, 0, 0)
参数
参数名 数据类型 说明 offset tuple(float,float,float) 偏移量 返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModelOffset((0, 3, 0))
# SetModelTexture
描述
设置骨骼模型贴图
参数
参数名 数据类型 说明 texture str 模型纹理 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModelTexture("Osteve")
# ShowCommonHurtColor
描述
设置挂接骨骼模型的实体是否显示通用的受伤变红效果(广播)
参数
参数名 数据类型 说明 show bool 是否显示 返回值
数据类型 说明 bool 设置是否成功 备注
- 引擎默认打开该选项,需要改变受伤效果可以关闭之后再进行定制
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.ShowCommonHurtColor(True)
# scale
# GetEntityScale
描述
获取实体的放缩比例大小
参数
无
返回值
数据类型 说明 float 比例因子 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateScale(entityId)
result = comp.GetEntityScale()
# SetEntityScale
描述
设置实体的放缩比例大小,设置比例过大会导致游戏卡顿,建议控制在20倍以内
参数
参数名 数据类型 说明 entityId str 要设置的实体 scale float 比例因子 返回值
数据类型 说明 int 成功返回1,失败返回-1 备注
- 目前此功能只支持设置生物的骨骼模型,游戏原生实体(包括手持物品)的暂不做支持与维护
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateScale(entityId)
result = comp.SetEntityScale(entityId, scale)
# 抛射物
# bulletAttributes
# GetSourceEntityId
描述
获取抛射物发射者实体id
参数
无
返回值
数据类型 说明 str 抛射物发射者实体id 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBulletAttributes(entityId)
comp.GetSourceEntityId()
# projectile
# CreateProjectileEntity
描述
创建抛射物(直接发射)
参数
参数名 数据类型 说明 spawnerId str 创建者Id entityIdentifier str 创建抛射物的类别,如minecraft:snowball param dict 默认为None,详细说明请见备注 返回值
数据类型 说明 str 创建抛射物的Id,失败时为“-1” 备注
- param参数解释如下:
参数 类型 解释 position tuple(float,float,float) 初始位置 direction tuple(float,float,float) 初始朝向 power float 投掷的力量值 gravity float 抛射物重力因子,默认为json配置中的值 damage float 抛射物伤害值,默认为json配置中的值 targetId str 抛射物目标(指定了target之后,会和潜影贝生物发射的跟踪导弹的那个投掷物是一个效果),默认不指定 isDamageOwner bool 对创建者是否造成伤害,默认不造成伤害
- param参数解释如下:
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateProjectile(levelId)
param = {
'position': (1,1,1),
'direction': (1,1,1)
}
comp.CreateProjectileEntity(playerId, "minecraft:snowball", param)
# 世界
# chunkSource
# AddChunkPosWhiteList
描述
为某区块加载完成、准备卸载事件添加监听
参数
参数名 数据类型 说明 dimension int 区块所在维度 pos tuple(int,int) 指定区块的坐标 返回值
数据类型 说明 bool 是否添加成功 备注
- 方块坐标(x, y, z)所在的区块坐标为(math.floor(x / 16), math.floor(z / 16))
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.AddChunkPosWhiteList(0, (0, 0))
# CheckChunkState
描述
判断指定位置的chunk是否加载完成
参数
参数名 数据类型 说明 dimension int chunk所在维度 pos tuple(int,int,int) 指定位置的坐标 返回值
数据类型 说明 bool 加载是否完成 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.CheckChunkState(0, (0, 0, 0))
# DeleteAllArea
描述
删除所有常加载区域
参数
无
返回值
数据类型 说明 int 删除的区域数目,错误时为None 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.DeleteAllArea()
# DeleteArea
描述
删除一个常加载区域
参数
参数名 数据类型 说明 key str 常加载区域的名称 返回值
数据类型 说明 bool 删除是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.DeleteArea('Area0')
# GetAllAreaKeys
描述
获取所有常加载区域名称列表
参数
无
返回值
数据类型 说明 list(str) 名称列表list 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.GetAllAreaKeys()
# GetChunkMaxPos
描述
获取某区块最大点的坐标
参数
参数名 数据类型 说明 chunkPos tuple(int,int) 指定区块的坐标 返回值
数据类型 说明 None或tuple(int,int,int) 该区块最大点的坐标 备注
- 当传入的chunkPos类型不是tuple或者长度不为2时,返回值为None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
maxPos = comp.GetChunkMaxPos((1, 3))
# GetChunkMinPos
描述
获取某区块最小点的坐标
参数
参数名 数据类型 说明 chunkPos tuple(int,int) 指定区块的坐标 返回值
数据类型 说明 None或tuple(int,int,int) 该区块最小点的坐标 备注
- 当传入的chunkPos类型不是tuple或者长度不为2时,返回值为None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
minPos = comp.GetChunkMinPos((1, 3))
# GetChunkMobNum
描述
获取某区块中的生物数量(不包括玩家,但包括盔甲架)
参数
参数名 数据类型 说明 dimension int 区块所在维度 chunkPos tuple(int,int) 指定区块的坐标 返回值
数据类型 说明 int 该区块中的生物数量 备注
- 返回值为-1通常是由于该维度未加载、该区块未加载
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
mobNum = comp.GetChunkMobNum(0, (1, 3))
# GetChunkPosFromBlockPos
描述
通过方块坐标获得该方块所在区块坐标
参数
参数名 数据类型 说明 blockPos tuple(int,int,int) 方块的坐标 返回值
数据类型 说明 None或tuple(int,int) 该方块所在区块的坐标 备注
- 当传入的blockPos类型不是tuple或者长度不为3时,返回值为None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
chunkPos = comp.GetChunkPosFromBlockPos((90, 40, -4))
# IsChunkGenerated
描述
获取某个区块是否生成过。
参数
参数名 数据类型 说明 dimensionId int 区块所在维度 chunkPos tuple(int,int) 指定区块的坐标 返回值
数据类型 说明 bool 该区块是否生成过 备注
- 玩家探索过(以玩家为中心,模拟距离(在游戏的设置页面内)为半径内的区块),或者使用SetAddArea设置常加载区块附近的区块,都是生成过的区块。这些区块会保存到存档里,再次探索时会从存档读取,不会重新生成。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
# 获取主世界(10000,0,10000)坐标所在的区块是否生成过
result = comp.IsChunkGenerated(0, comp.GetChunkPosFromBlockPos((10000, 0, 10000)))
# RemoveChunkPosWhiteList
描述
移除对某区块加载完成、准备卸载事件的监听
参数
参数名 数据类型 说明 dimension int 区块所在维度 pos tuple(int,int) 指定区块的坐标 返回值
数据类型 说明 bool 是否移除成功 备注
- 方块坐标(x, y, z)所在的区块坐标为(math.floor(x / 16), math.floor(z / 16))
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.RemoveChunkPosWhiteList(0, (0, 0))
# SetAddArea
描述
设置区块的常加载
参数
参数名 数据类型 说明 key str 常加载区域的名称 dimensionId int 区块所在的维度 minPos tuple(int,int,int) 加载区域的最小坐标 maxPos tuple(int,int,int) 加载区域的最大坐标 返回值
数据类型 说明 bool 设置是否成功 备注
- key必须唯一,若添加区域时key已存在将添加失败。
- 该方式创建的常加载区域不会tick,即实体,方块实体,随机刻都不会进行更新。若需要区域被tick,请使用原版tickingarea指令。
- 将当前未加载的区块设置为常加载区块时,不会从存档加载生物。但如果是当前已加载的区块,则玩家远离时区块后,区块内的实体会一直保持加载。
- 常加载区块内可以使用api创建实体、放置方块、放置结构、修改方块实体数据。但由于区块加载的特性,需要将操作位置的四周外延80格的区域都设置为常加载,例如需要在(0,5,0)的位置生成生物/放置方块,需要将(-80,0,-80)到(80,0,80)的区域设置为常加载。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.SetAddArea('Area0', 0, (0,0,0), (60,0,60))
# explosion
# CreateExplosion
描述
用于生成爆炸
参数
参数名 数据类型 说明 pos tuple(float,float,float) 爆炸位置 radius int 爆炸威力,具体含义可参考wiki对爆炸的解释 fire bool 是否带火 breaks bool 是否破坏方块 sourceId str 爆炸伤害源的实体id playerId str 爆炸创造的实体id 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExplosion(levelId)
comp.CreateExplosion((50,50,50),10,True,True,sourceId,playerId)
# feature
管理PlaceNeteaseStructureFeatureEvent事件在脚本层的监听并提供定位网易自定义结构及部分原版结构的接口
# AddNeteaseFeatureWhiteList
描述
添加结构对PlaceNeteaseStructureFeatureEvent事件的脚本层监听
参数
参数名 数据类型 说明 structureName str 结构的identifier 返回值
数据类型 说明 bool 是否增加成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
# 注意structureName格式为floderName:structureName
comp.AddNeteaseFeatureWhiteList("test:pumpkins")
# ClearAllNeteaseFeatureWhiteList
描述
清空所有已添加Netease Structure Feature对PlaceNeteaseStructureFeatureEvent事件的脚本层监听
参数
无
返回值
数据类型 说明 bool 是否清空成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
comp.ClearAllNeteaseFeatureWhiteList()
# LocateNeteaseFeature
描述
与/locate指令相似,用于定位由网易自定义特征放置的结构,通过PlaceStructure接口、/placestructure指令或结构方块手动放置的结构无法被定位到。如有需要,建议开发者自行记录这些手动放置的结构位置
参数
参数名 数据类型 说明 featureName str 结构名称,形式为namespace:featureName,如test:pumpkins dimensionId int 结构所在维度,要求该维度已加载 pos tuple(int,int,int) 以该位置为中心来查找最近的结构 返回值
数据类型 说明 tuple(float,float,float)或None 最近的结构位置,定位失败则返回None 备注
- 定位失败通常是由于该维度不存在、该维度未加载、该维度中不存在该结构、该结构距离传入位置过远(以该位置为中心,半径100个区块内无法找到)
- 若在feature rules中"conditions"内的"minecraft:biome_filter"中填写了判断维度以外的过滤规则,将有概率无法定位到距离最近的特征。建议开发者在"distribution"的"iterations"中使用query.is_biome代替
- 定位原理是根据放置条件寻找可能放置结构的位置,因此**有可能会定位到在PlaceNeteaseStructureFeatureEvent事件中被取消生成的结构。**开发者应注意甄别,尽量避免对可能在PlaceNeteaseStructureFeatureEvent事件中被取消放置的结构调用定位函数
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
pos = comp.LocateNeteaseFeature("test:pumpkins", 0, (0, 64, 0))
# LocateStructureFeature
描述
与/locate指令相似,用于定位原版的部分结构,如海底神殿、末地城等。
参数
参数名 数据类型 说明 featureType int 原版的结构类型,StructureFeatureType枚举 dimensionId int 结构所在维度,要求该维度已加载 pos tuple(int,int,int) 以该位置为中心来查找最近的结构 返回值
数据类型 说明 tuple(float,float)或None 最近的结构所在区块位置(x坐标,z坐标),y坐标不定,若定位失败则返回None 备注
- 定位失败通常是由于该维度不存在、该维度未加载、该维度中不存在该结构、该结构距离传入位置过远等
- 该接口返回值为对应结构所在区块的坐标,与结构实际生成位置可能相距一定距离
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
pos = comp.LocateStructureFeature(serverApi.GetMinecraftEnum().StructureFeatureType.Village, 0, (0, 64, 0))
# RemoveNeteaseFeatureWhiteList
描述
移除structureName对PlaceNeteaseStructureFeatureEvent事件的脚本层监听
参数
参数名 数据类型 说明 structureName str 结构名称 返回值
数据类型 说明 bool 是否移除成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
# 注意structureName格式为floderName:structureName
comp.RemoveNeteaseFeatureWhiteList("test:pumpkins")
# game
# AddRepeatedTimer
描述
添加服务端触发的定时器,重复执行
参数
参数名 数据类型 说明 delay float 延迟时间,单位秒 func function 定时器触发函数 *args any 变长参数,可以不设置 **kwargs any 字典变长参数,可以不设置 返回值
数据类型 说明 CallLater 返回触发的定时器实例 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.AddRepeatedTimer(3.0,func,args,kwargs)
# AddTimer
描述
添加服务端触发的定时器,非重复
参数
参数名 数据类型 说明 delay float 延迟时间,单位秒 func function 定时器触发函数 *args any 变长参数,可以不设置 **kwargs any 字典变长参数,可以不设置 返回值
数据类型 说明 CallLater 返回单次触发的定时器实例 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.AddTimer(3.0,func,args,kwargs)
# CanSee
描述
判断起始对象是否可看见目标对象,基于对象的Head位置判断
参数
参数名 数据类型 说明 fromId str 起始对象ID targetId str 目标对象ID viewRange float 视野距离,默认值8.0 onlySolid bool 只判断固体方块遮挡,默认True; False则液体方块也会遮挡 angleX float 视野X轴角度,默认值180.0度 angleY float 视野Y轴角度,默认值180.0度 返回值
数据类型 说明 bool 是否可见 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.CanSee(entityId,targetId,20.0,True,180.0,180.0)
# CancelTimer
描述
取消定时器
参数
参数名 数据类型 说明 timer CallLater AddTimer和AddRepeatedTimer时返回的定时器实例 返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.CancelTimer(timer)
# CheckNameValid
描述
检查昵称是否合法,即不包含敏感词
参数
参数名 数据类型 说明 name str 昵称 返回值
数据类型 说明 bool True:昵称合法 False:昵称非法 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
isValid = comp.CheckNameValid("史蒂夫")
# CheckWordsValid
描述
检查语句是否合法,即不包含敏感词
参数
参数名 数据类型 说明 words str 语句 返回值
数据类型 说明 bool True:语句合法 False:语句非法 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
isValid = comp.CheckWordsValid("creeper? Aww man")
# DisableVineBlockSpread
描述
设置是否禁用藤曼蔓延生长
参数
参数名 数据类型 说明 disable bool True:禁用 False:非禁用 返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.DisableBineBlockSpread(disable)
# ForbidLiquidFlow
描述
禁止/允许地图中的流体流动;备注:在禁止流体流动后方式的水/岩浆,重新允许流动之后立刻不会触发向四周流动的逻辑,直到再次触发流动判定为止(如周围的方块发生了变化)。仅Apollo可用。
参数
参数名 数据类型 说明 forbid bool True为禁止流体流动 False为允许流体流动 返回值
数据类型 说明 bool success True为设置成功,False为设置失败 示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
success = gameComp.ForbidLiquidFlow(True)
# GetEntitiesAround
描述
获取区域内的entity列表
参数
参数名 数据类型 说明 entityId str 某个entityId radius int 正方体区域半径 filters dict 过滤设置字典 返回值
数据类型 说明 list(str) 返回entityId的list 示例
#利用过滤器获取玩家身边的entity
#样例中的过滤器表示满足“是玩家”或者“没有头戴南瓜帽”的entity
filters = {
"any_of": [
{
"subject" : "other",
"test" : "is_family",
"value" : "player"
},
{
"test" : "has_equipment",
"domain": "head",
"subject" : "other",
"operator" : "not",
"value" : "carved_pumpkin"
}
]
}
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.GetEntitiesAround(entityId, 100, filters)
# GetEntitiesAroundByType
描述
获取区域内的某类型的entity列表
参数
参数名 数据类型 说明 entityId str 区域中心的entityId,如某个玩家的entityid radius int 区域半径 entityType int 实体类型参见枚举EntityType 返回值
数据类型 说明 list(str) 返回entityId的list 示例
import mod.server.extraServerApi as serverApi
# ItemEntity的类型EngineType是64,获取身边的ItemEntity列表
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetEntitiesAroundByType(entityId, 100, 64)
# GetEntitiesInSquareArea
描述
获取区域内的entity列表
参数
参数名 数据类型 说明 entityId str或None 某个entityId/None startPos tuple(int,int,int) 初始位置 endPos tuple(int,int,int) 结束位置 dimensionId int 区域所在维度,默认值为-1,传入非负值时不依赖entityId,entityId可传入None,可获取对应维度的常加载区块内的实体列表 返回值
数据类型 说明 list(str) 返回entityId的list 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.GetEntitiesInSquareArea(entityId, (0,0,0), (100,100,100))
# 不依赖entityId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetEntitiesInSquareArea(None, (0,0,0), (100,100,100), 0)
# GetEntityIdentifier
描述
获取实体entity的identifier标识名称
参数
参数名 数据类型 说明 entityId str 要获取的目标的entityId 返回值
数据类型 说明 str identifier标识符,例如:"minecraft:item" 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetEntityIdentifier(entityId)
# GetGameDiffculty
描述
获取游戏难度
参数
无
返回值
数据类型 说明 int GetMinecraftEnum().GameDiffculty.*:Peaceful,Easy,Normal,Hard分别为0~3 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
diffculty = comp.GetGameDiffculty()
# GetGameRulesInfoServer
描述
获取游戏规则
参数
无
返回值
数据类型 说明 dict 游戏规则字典 备注
- 游戏规则字典 gameRule见代码注释
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
type = comp.GetGameRulesInfoServer()
#返回值如下
{
'create_info': {
'bonus_item': bool,
'init_with_map': bool,
'generator_type': int,
'seed': str,
},
'option_info': {
'pvp': bool,
'show_coordinates': bool,
'fire_spreads': bool,
'tnt_explodes': bool,
'mob_loot': bool,
'natural_regeneration': bool,
'tile_drops': bool,
'experimental_gameplay': bool,
},
'cheat_info': {
'enable': bool,
'always_day': bool,
'mob_griefing': bool,
'keep_inventory': bool,
'weather_cycle': bool,
'mob_spawn': bool,
'entities_drop_loot': bool,
'daylight_cycle': bool,
'command_blocks_enabled': bool,
'random_tick_speed': int,
}
}
# GetGameType
描述
获取游戏类型
参数
无
返回值
数据类型 说明 int GetMinecraftEnum().GameType.*:Survival,Creative,Adventure分别为0~2 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
type = comp.GetGameType()
# GetItemEntityItemIdentifier
描述
获取ItemEntity的Item的identifier标识名称
参数
参数名 数据类型 说明 entityId str 要获取的目标的entityId 返回值
数据类型 说明 str identifier标识符,例如:"minecraft:apple" 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetItemEntityItemIdentifier(entityId)
# GetLevelGravity
描述
获取重力因子
参数
无
返回值
数据类型 说明 float 重力因子 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetLevelGravity()
# GetPlayerGameType
描述
获取指定玩家的游戏模式
参数
参数名 数据类型 说明 playerId str 玩家id 返回值
数据类型 说明 int GameType类型 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
gameType = comp.GetPlayerGameType(playerId)
# GetSpawnPosition
描述
获取世界出生点坐标
参数
无
返回值
数据类型 说明 tuple(int,int,int) 出生点坐标 备注
- 返回的坐标不一定是精确的出生点坐标,也不一定是安全的出生点,玩家出生时会在该坐标附近随机选取一个满足出生条件的坐标。
- 未使用setworldspawn指令设置过出生点位置时,返回坐标的y轴是32767
示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
spawnPos = gameComp.GetSpawnPosition()
# IsLockDifficulty
描述
获取当前世界的游戏难度是否被锁定
参数
无
返回值
数据类型 说明 bool isLock True为已锁定,False为未锁定 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
isLock = comp.IsLockDifficulty()
# KillEntity
描述
杀死某个Entity
参数
参数名 数据类型 说明 entityId str 要杀死的目标的entityId 返回值
数据类型 说明 bool 是否杀死成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.KillEntity(entityId)
# LockDifficulty
描述
锁定当前世界游戏难度(仅本次游戏有效),锁定后任何玩家在游戏内都无法通过指令或暂停菜单修改游戏难度
参数
参数名 数据类型 说明 lock bool True:锁定 False:解锁 返回值
数据类型 说明 bool result是否操作成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.LockDifficulty(True)
# LookupItemByName
描述
判定指定identifier的物品是否存在
参数
参数名 数据类型 说明 itemName str 物品的identifier。类似"minecraft:bed",支持自定义物品 返回值
数据类型 说明 bool exist True为对应的物品存在,False为对应物品不存在 示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
exist = gameComp.LookupItemByName("minecraft:bed")
# OpenCityProtect
描述
开启城市保护,包括禁止破坏方块,禁止对方块使用物品,禁止怪物攻击玩家,禁止玩家之间互相攻击,禁止日夜切换,禁止天气变化,禁止怪物群落刷新。仅Apollo可用。
参数
无
返回值
数据类型 说明 bool success True为设置成功,False为设置失败 示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
success = gameComp.OpenCityProtect()
# PickUpItemEntity
描述
某个Player拾取物品ItemEntity
参数
参数名 数据类型 说明 playerEntityId str 拾取者的playerEntityId itemEntityId str 要拾取的物品itemEntityId 返回值
数据类型 说明 bool 是否拾取成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.PickUpItemEntity(playerEntityId, itemEntityId)
# PlaceStructure
描述
放置结构
参数
参数名 数据类型 说明 playerId str或None 放置该结构的玩家id/None pos tuple(float,float,float) 放置结构的位置 structureName str 结构名称 dimensionId int 希望放置结构的维度,默认为-1,传入非负值时不依赖playerId,playerId可传入None,可在对应维度的常加载区块放置结构 返回值
数据类型 说明 bool 是否放置成功,True为放置成功,False为放置失败 备注
- 放置时需要确保所放置的区块都已加载,否则会放置失败或者部分缺失
- 该接口是同步执行的,请勿在一帧内放置大量结构,会造成游戏卡顿
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.PlaceStructure(playerId, (100, 70, 100), "test:structureName")
# 不依赖playerId放置结构,支持在常加载区块放置
comp.PlaceStructure(None, (100, 70, 100), "test:structureName", 0)
# SetCanActorSetOnFireByLightning
描述
禁止/允许闪电点燃实体
参数
参数名 数据类型 说明 enable bool True为允许闪电点燃实体 False为禁止闪电点燃实体 返回值
数据类型 说明 bool success True为设置成功,False为设置失败 示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
success = gameComp.SetCanActorSetOnFireByLightning(False)
# SetCanBlockSetOnFireByLightning
描述
禁止/允许闪电点燃方块。
参数
参数名 数据类型 说明 enable bool True为允许闪电点燃方块 False为禁止闪电点燃方块 返回值
数据类型 说明 bool success True为设置成功,False为设置失败 示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
success = gameComp.SetCanBlockSetOnFireByLightning(False)
# SetDefaultGameType
描述
设置默认游戏模式
参数
参数名 数据类型 说明 gameType int GetMinecraftEnum().GameType.*:Survival,Creative,Adventure分别为0~2 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(playerId)
# 设置创造模式为默认游戏模式
comp.SetDefaultGameType(1)
# SetDisableContainers
描述
设置是否屏蔽容器交互(不包括背包),不包括纯客户端逻辑控制的容器:纱布机,切石机,制图台等
参数
参数名 数据类型 说明 isDisable bool 是否屏蔽容器交互 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetDisableContainers(True)
# SetDisableDropItem
描述
设置禁止丢弃物品
参数
参数名 数据类型 说明 isDisable bool 是否禁止丢弃物品 返回值
数据类型 说明 bool 设置是否成功 示例
# 1、开启开关后,玩家死亡会所有物品消失;如需保证物品不掉落,可以配合/gamerule keepInventory true 使用
# 2、创造模式下物品依然能丢弃。
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetDisableDropItem(True)
# SetDisableGravityInLiquid
描述
是否屏蔽所有实体在液体(水、岩浆)中的重力
参数
参数名 数据类型 说明 isDisable bool True:屏蔽 False:取消屏蔽 返回值
数据类型 说明 bool 是否设置成功 备注
- 设置屏蔽实体在液体中的重力后,实体将不能上浮也不能下潜。对玩家而言,当水/岩浆淹没腰部及以上时(约在水面/岩浆表面0.7格及以下),将无法上岸。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.SetDisableGravityInLiquid(True)
# SetDisableHunger
描述
设置是否屏蔽饥饿度
参数
参数名 数据类型 说明 isDisable bool 是否屏蔽饥饿度 返回值
数据类型 说明 bool 设置是否成功 备注
- 如需隐藏饥饿度请使用extraClientApi的HideHungerGui
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetDisableHunger(True)
# SetGameDifficulty
描述
设置游戏难度
参数
参数名 数据类型 说明 difficulty int GetMinecraftEnum().GameDiffculty.*:Peaceful,Easy,Normal,Hard分别为0~3 返回值
数据类型 说明 bool 是否设置成功,True为成功,False为失败 备注
- 若已经锁定了游戏难度,除非调用解锁游戏难度,否则将无法成功修改游戏难度
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
result = comp.SetGameDifficulty(0)
# SetGameRulesInfoServer
描述
设置游戏规则。所有参数均可选。
参数
参数名 数据类型 说明 gameRuleDict dict 游戏规则字典 返回值
数据类型 说明 bool 是否设置成功 备注
- 其中游戏规则字典中每一项都为可选参数,但是设置option_info或者cheat_info其中一项子项后,必须加上option_info或者cheat_info
示例
###游戏规则字典说明
gameRuleDict ={
'option_info': {
'pvp': bool, #玩家伤害
'show_coordinates': bool, #显示坐标
'fire_spreads': bool, #火焰蔓延
'tnt_explodes': bool, #tnt爆炸
'mob_loot': bool, #生物战利品
'natural_regeneration': bool, #自然生命恢复
'tile_drops': bool, #方块掉落
'immediate_respawn':bool #作弊开启
},
'cheat_info': {
'enable': bool, #是否开启作弊
'always_day': bool, #终为白日
'mob_griefing': bool, #生物破坏方块
'keep_inventory': bool, #保留物品栏
'weather_cycle': bool, #天气更替
'mob_spawn': bool, #生物生成
'entities_drop_loot': bool, #实体掉落
'daylight_cycle': bool, #开启昼夜交替
'command_blocks_enabled': bool, #启用方块命令
'random_tick_speed': int,#随机方块tick速度
}
}
###
ruleDict ={
'cheat_info': {
'enable': True,
'always_day': True,
}
}
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.SetGameRulesInfoServer(ruleDict)
# SetHurtCD
描述
设置伤害CD
参数
参数名 数据类型 说明 cdTime int 单位帧数 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetHurtCD(1)
# SetLevelGravity
描述
设置重力因子
参数
参数名 数据类型 说明 data float 重力因子 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
#生物可单独设置重力因子,当生物的重力因子非0时则该生物单独有自己的重力因子,具体参见实体重力组件
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.SetLevelGravity(-0.08)
# SetNotifyMsg
描述
设置消息通知
参数
参数名 数据类型 说明 msg str 消息内容 color str 使用GenerateColor接口获取的颜色,默认为白色 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetNotifyMsg("消息通知", serverApi.GenerateColor('BLUE'))
# SetOnePopupNotice
描述
在具体某个玩家的物品栏上方弹出popup类型通知,位置位于tip类型消息下方,此功能更建议客户端使用game组件的对应接口SetPopupNotice
参数
参数名 数据类型 说明 playerId str 具体玩家Id message str 消息内容,可以在消息前增加extraServerApi.GenerateColor("RED")字符来设置颜色,具体参考样例 subtitle str 消息子标题内容,效果同message,也可设置颜色,位置位于message上方 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(playerId)
# playerId 变量改为具体的玩家Id
comp.SetOnePopupNotice(playerId, serverApi.GenerateColor("RED") + "消息通知", "消息子标题")
# SetOneTipMessage
描述
在具体某个玩家的物品栏上方弹出tip类型通知,位置位于popup类型通知上方,此功能更建议在客户端使用game组件的对应接口SetTipMessage
参数
参数名 数据类型 说明 playerId str 具体玩家Id message str 消息内容,可以在消息前增加extraServerApi.GenerateColor("RED")字符来设置颜色,具体参考样例 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(playerId)
# playerId 变量改为具体的玩家Id
comp.SetOneTipMessage(playerId, serverApi.GenerateColor("RED") + "tip提示")
# SetPopupNotice
描述
在所有玩家物品栏上方弹出popup类型通知,位置位于tip类型消息下方
参数
参数名 数据类型 说明 message str 消息内容,可以在消息前增加extraServerApi.GenerateColor("RED")字符来设置颜色,具体参考样例 subtitle str 消息子标题内容,效果同message,也可设置颜色,位置位于message上方 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetPopupNotice(serverApi.GenerateColor("RED") + "消息通知", "消息子标题")
# SetTipMessage
描述
在所有玩家物品栏上方弹出tip类型通知,位置位于popup类型通知上方
参数
参数名 数据类型 说明 message str 消息内容,可以在消息前增加extraServerApi.GenerateColor("RED")字符来设置颜色,具体参考样例 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.SetTipMessage(serverApi.GenerateColor("RED") + "tip提示")
# UpgradeMapDimensionVersion
描述
提升指定地图维度的版本号,版本号不符的维度,地图存档信息将被废弃
参数
参数名 数据类型 说明 dimension int 维度的数字ID,0代表主世界 version int 维度地图的版本号,取值范围为1-999 返回值
数据类型 说明 bool success True为设置成功,False为设置失败 示例
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
success = gameComp.UpgradeMapDimensionVersion(0, 10)
# time
# GetTime
描述
获取当前世界时间
参数
无
返回值
数据类型 说明 int 当前时间,帧数 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTime(levelId)
comp.GetTime()
# SetTime
描述
设置当前世界时间
参数
参数名 数据类型 说明 time int 时间,单位帧数,游戏一天24000帧,可以通过设置时间来改变天亮和天黑以及其他 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTime(levelId)
comp.SetTime(10000)
# weather
# IsRaining
描述
获取是否下雨
参数
无
返回值
数据类型 说明 bool 是否下雨 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateWeather(levelId)
comp.IsRaining()
# IsThunder
描述
获取是否打雷
参数
无
返回值
数据类型 说明 bool 是否打雷 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateWeather(levelId)
comp.IsThunder()
# SetRaining
描述
设置是否下雨
参数
参数名 数据类型 说明 level float 下雨强度 time int 下雨时间单位为帧 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateWeather(levelId)
comp.SetRaining(0.5,1000)
# SetThunder
描述
设置是否打雷
参数
参数名 数据类型 说明 level float 打雷强度 time int 打雷时间单位为帧 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateWeather(levelId)
comp.SetThunder(0.5,1000)set_lightning
# 实体
# action
# GetAttackTarget
描述
获取仇恨目标
参数
无
返回值
数据类型 说明 str 仇恨目标的实体id 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.GetAttackTarget()
# GetHurtBy
描述
获取上一次攻击自己的实体
参数
无
返回值
数据类型 说明 str 攻击自己的对象实体id 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.GetHurtBy()
# ResetAttackTarget
描述
清除仇恨目标
参数
无
返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.ResetAttackTarget()
# ResetHurtBy
描述
清除上一次攻击自己的实体的标记
参数
无
返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.ResetHurtBy()
# SetAttackTarget
描述
设置仇恨目标
参数
参数名 数据类型 说明 targetId str 目标实体id 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.SetAttackTarget(targetId)
# SetHurtBy
描述
设置上一次攻击自己的实体。即让他认为某个实体刚才对他发起了攻击(虽然实际上没有),主要用于原版的minecraft:damage_sensor等行为。
参数
参数名 数据类型 说明 attackerId str 攻击自己的实体id 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(zombieEntityId)
# 让某个僵尸认为这个玩家刚才A了它一下
comp.SetHurtBy(playerId)
# SetMobKnockback
描述
设置击退的初始速度,需要考虑阻力的影响
参数
参数名 数据类型 说明 xd float x轴方向,用來控制角度 zd float z轴方向,用來控制角度 power float 用来控制水平方向的初速度 height float 竖直方向的初速度 heightCap float 向上速度阈值,当实体本身已经有向上的速度时需要考虑这个值,用来确保最终向上的速度不会超过heightCap 返回值
数据类型 说明 None 无返回值 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.SetMobKnockback(0.1, 0.1, 1.0, 1.0, 1.0)
# actorLoot
实体掉落物
# SpawnLootTable
描述
使用生物类型模拟一次随机掉落,生成的物品与json定义的概率有关
参数
参数名 数据类型 说明 pos tuple(int,int,int) 掉落位置 identifier str 实体identifier,如minecraft:guardian playerKillerId str 玩家杀手(只能是玩家),默认None damageCauseEntityId str 伤害来源实体Id(掉落与该实体手持物品的抢夺附魔等级有关),默认None 返回值
数据类型 说明 bool 是否成功生成掉落 备注
- 需要在对应的player实体附近生成,否则会生成失败。对于某些特殊的生物,如minecraft:sheep,需要使用SpawnLootTableWithActor接口来模拟随机掉落。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateActorLoot(playerId)
result = comp.SpawnLootTable((1, 4, 5), 'minecraft:guardian')
# SpawnLootTableWithActor
描述
使用生物实例模拟一次随机掉落,生成的物品与json定义的概率有关
参数
参数名 数据类型 说明 pos tuple(int,int,int) 掉落位置 entityId str 模拟生物的生物Id playerKillerId str 玩家杀手(只能是玩家),默认None damageCauseEntityId str 伤害来源实体Id(掉落与该实体手持物品的抢夺附魔等级有关),默认None 返回值
数据类型 说明 bool 是否成功生成掉落 备注
- 需要在对应的player实体附近生成,否则会生成失败
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateActorLoot(playerId)
result = comp.SpawnLootTableWithActor((1, 4, 5), '-335007449086')
# actorPushable
服务端用来控制玩家是否可推动
# SetActorPushable
描述
设置实体是否可推动
参数
参数名 数据类型 说明 isPushable int 0:不可推动 1:可推动 返回值
数据类型 说明 bool True表示设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateActorPushable(entityId)
success = comp.SetActorPushable(1)
# attr
# GetAttrMaxValue
描述
获取属性最大值
参数
参数名 数据类型 说明 type int AttrType枚举 返回值
数据类型 说明 float 属性值结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.GetAttrMaxValue(serverApi.GetMinecraftEnum().AttrType.HEALTH)
# GetAttrValue
描述
获取属性值
参数
参数名 数据类型 说明 type int AttrType枚举 返回值
数据类型 说明 float 属性结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.GetAttrValue(serverApi.GetMinecraftEnum().AttrType.HEALTH)
# GetStepHeight
描述
返回玩家前进非跳跃状态下能上的最大台阶高度
参数
无
返回值
数据类型 说明 float 台阶高度 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
print(comp.GetStepHeight())
# IsEntityOnFire
描述
获取实体是否着火
参数
无
返回值
数据类型 说明 bool 是否着火 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
isOnFire = comp.IsEntityOnFire()
# ResetStepHeight
描述
恢复引擎默认玩家前进非跳跃状态下能上的最大台阶高度
参数
无
返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.ResetStepHeight()
# SetAttrMaxValue
描述
设置属性最大值
参数
参数名 数据类型 说明 type int AttrType枚举 value float 属性值 返回值
数据类型 说明 bool 设置结果 备注
- 设置的最大饱和度不能超过当前的饥饿值; 食用食物后,最大饱和度会被原版游戏机制修改
- 设置接口暂不支持 ABSORPTION
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.SetAttrMaxValue(serverApi.GetMinecraftEnum().AttrType.SPEED,0.2)
# SetAttrValue
描述
设置属性值
参数
参数名 数据类型 说明 attrType int AttrType枚举 value float 属性值 返回值
数据类型 说明 bool 设置结果 备注
- 设置接口暂不支持 ABSORPTION
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.SetAttrValue(serverApi.GetMinecraftEnum().AttrType.HEALTH, 20)
# SetEntityOnFire
描述
设置实体着火
参数
参数名 数据类型 说明 seconds int 着火时间(单位:秒) 返回值
数据类型 说明 bool 是否设置成功 备注
- 在水中或者雨中不会生效,着火时间受生物装备、生物的状态影响。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.SetEntityOnFire(8)
# SetStepHeight
描述
设置玩家前进非跳跃状态下能上的最大台阶高度, 默认值为0.5625,1的话表示能上一个台阶
参数
参数名 数据类型 说明 stepHeight float 最大高度,需要大于0 返回值
数据类型 说明 bool 是否设置成功 备注
- 为了避免因浮点数误差导致错误,设置的时候通常会增加1/16个方块大小,即0.0625。所以此处我们设置2.0625。游戏中默认值是0.5625,即半格高度。
- 只对玩家生效,无法修改其它实体该属性
- 修改后不影响跳跃逻辑及跳跃高度,并不会因此而跳到更高,因此在某些特定情况下,你可以走上方块但跳不上去。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
#如果前面放置有两格高的方块,玩家按前进能直接上去,无须跳跃
comp.SetStepHeight(2.0625)
# auxValue
# GetAuxValue
描述
获取射出的弓箭或投掷出的药水的附加值
参数
无
返回值
数据类型 说明 int auxValue 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAuxValue(entityId)
comp.GetAuxValue()
# collisionBox
# GetSize
描述
获取实体的包围盒
参数
无
返回值
数据类型 说明 tuple(int,int) 包围盒大小 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateCollisionBox(entityId)
comp.GetSize()
# SetSize
描述
设置实体的包围盒
参数
参数名 数据类型 说明 size tuple(int,int) 第一位表示宽度和长度,第二位表示高度 返回值
数据类型 说明 bool 设置结果 备注
- 对新生产的实体需要经过5帧之后再设置包围盒的大小才会生效
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateCollisionBox(entityId)
comp.SetSize((2,3))
# dimension
# ChangeEntityDimension
描述
传送实体
参数
参数名 数据类型 说明 dimensionId int 维度,0-overWorld; 1-nether; 2-theEnd pos tuple(int,int,int) 传送的坐标,假如输入None,那么就优先选择目标维度的传送门作为目的地,其次使用维度坐标映射逻辑确定目的地 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(playerId)
comp.ChangeEntityDimension(0, (0,4,0))
# ChangePlayerDimension
描述
传送玩家
参数
参数名 数据类型 说明 dimensionId int 维度,0-overWorld; 1-nether; 2-theEnd pos tuple(int,int,int) 传送的坐标 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(playerId)
comp.ChangePlayerDimension(0, (0,4,0))
# CreateDimension
描述
创建新的dimension
参数
参数名 数据类型 说明 dimensionId int 维度,0/1/2维度是不需要创建的。dimensionId取值范围为[0, 20] 返回值
数据类型 说明 bool 是否创建成功 备注
- 要求在初始化mod时调用
示例
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.CreateDimension(3)
# GetEntityDimensionId
描述
获取实体dimension
参数
无
返回值
数据类型 说明 int 实体维度 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(playerId)
comp.GetEntityDimensionId()
# MirrorDimension
描述
复制不同dimension的地形
参数
参数名 数据类型 说明 fromId int 原dimensionId toId int 目标dimensionId 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(playerId)
comp.MirrorDimension(0, 1)
# RegisterEntityAOIEvent
描述
注册感应区域,有生物进入时和离开时会有消息通知
参数
参数名 数据类型 说明 dimension int 维度id name str 注册的感应区域名 aabb tuple(float,float,float,float,float,float) 感应区域的坐标范围,依次为minX, minY, minZ, maxX, maxY, maxZ ignoredEntities list(str) 忽略的实体id列表 返回值
数据类型 说明 bool 是否注册成功 备注
- 注册完感应区域后,需通过监听OnEntityAreaEvent事件来获取感应事件
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(playerId)
comp.RegisterEntityAOIEvent(0, "test", (0, 0, 0, 1, 1, 1), None)
# UnRegisterEntityAOIEvent
描述
反注册感应区域
参数
参数名 数据类型 说明 dimension int 维度id name str 需要反注册的感应区域名 返回值
数据类型 说明 bool 是否注册成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(playerId)
comp.UnRegisterEntityAOIEvent(0, "test")
# effect
实体状态效果相关接口,包括添加、删除、查询状态等
# AddEffectToEntity
描述
为实体添加指定状态效果,如果添加的状态已存在则有以下集中情况:1、等级大于已存在则更新状态等级及持续时间;2、状态等级相等且剩余时间duration大于已存在则刷新剩余时间;3、等级小于已存在则不做修改;4、粒子效果以新的为准
参数
参数名 数据类型 说明 effectName str 状态效果名称字符串,包括自定义状态效果和原版状态效果,原版状态效果可在wiki查询 duration int 状态效果持续时间,单位秒 amplifier int 状态效果的额外等级。必须在0至255之间(含)。若未指定,默认为0。注意,状态效果的第一级(如生命恢复 I)对应为0,因此第二级状态效果,如生命回复 II,应指定强度为1。部分效果及自定义状态效果没有强度之分,如夜视 showParticles bool 是否显示粒子效果,True显示,False不显示 返回值
数据类型 说明 bool True表示设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateEffect(entityId)
res = comp.AddEffectToEntity("speed", 30, 2, True)
# GetAllEffects
描述
获取实体当前所有状态效果
参数
无
返回值
数据类型 说明 list(dict) 状态效果信息字典的list 备注
- 状态效果信息字典 effectDict
关键字 数据类型 说明 effectName str 状态效果名称 duration int 状态效果剩余持续时间,单位秒 amplifier int 状态效果额外等级
- 状态效果信息字典 effectDict
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateEffect(entityId)
effectDictList = comp.GetAllEffects()
# RemoveEffectFromEntity
描述
为实体删除指定状态效果
参数
参数名 数据类型 说明 effectName str 状态效果名称字符串,包括自定义状态效果和原版状态效果,原版状态效果可在wiki查询 返回值
数据类型 说明 bool True表示删除成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateEffect(entityId)
res = comp.RemoveEffectFromEntity("speed")
# engineType
获取实体的类型
# GetEngineType
描述
获取实体类型
参数
无
返回值
数据类型 说明 int 详见EntityType 示例
import mod.server.extraServerApi as serverApi
from mod_log import logger as logger
comp = serverApi.GetEngineCompFactory().CreateEngineType(entityId)
entityType = comp.GetEngineType()
# 以判断是否是 Mob 为例,如果要判断是否为弹射物,找到对应的类型Projectile修改即可
if entityType & serverApi.GetMinecraftEnum().EntityType.Mob == serverApi.GetMinecraftEnum().EntityType.Mob:
logger.info("{} is Mod".format(comp.GetEngineTypeStr()))
# 或者通过Minecraft枚举值文档找到 Mob 的值为 0x00000100 即 256
if entityType & 0x0000010 == 0x0000010:
logger.info("{} is Mod".format(comp.GetEngineTypeStr()))
if entityType & 256 == 256:
logger.info("{} is Mod".format(comp.GetEngineTypeStr()))
# GetEngineTypeStr
描述
获取实体的类型名称
参数
无
返回值
数据类型 说明 str 实体类型名称,如minecraft:husk 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateEngineType(entityId)
comp.GetEngineTypeStr()
# extraData
# CleanExtraData
描述
清除实体的自定义数据或者世界的自定义数据,清除实体数据时使用对应实体id创建组件,设置世界数据时使用levelId创建组件
参数
参数名 数据类型 说明 key str 自定义key 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
# 清除实体数据
entitycomp = serverApi.GetEngineCompFactory().CreateExtraData(entityId)
suc = entitycomp.CleanExtraData("nickname")
print "CleanExtraData entity=%s suc=%s" % (entityId, suc)
# 清除全局数据
levelcomp = serverApi.GetEngineCompFactory().CreateExtraData(levelId)
suc = levelcomp.CleanExtraData("globalMsg")
print "CleanExtraData for level suc=%s" % suc
# GetExtraData
描述
获取实体的自定义数据或者世界的自定义数据,某个键所对应的值。获取实体数据时使用对应实体id创建组件,获取世界数据时使用levelId创建组件
参数
参数名 数据类型 说明 key str 自定义key 返回值
数据类型 说明 any key对应的值 示例
# 获取全局数据
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExtraData(levelId)
levelExData = comp.GetExtraData("globalMsg")
# 获取
# GetWholeExtraData
描述
获取完整的实体的自定义数据或者世界的自定义数据,获取实体数据时使用对应实体id创建组件,获取世界数据时使用levelId创建组件
参数
无
返回值
数据类型 说明 dict或None 获取指定实体或者全局的额外存储数据字典,假如没有任何额外存储数据,那么返回None或者空字典 示例
#获取实体数据字典
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExtraData(entityId)
dataDict = comp.GetWholeExtraData()
if dataDict:
for key, value in dataDict.iteritems():
print "key=%s value=%s" % (key, str(value))
#获取全局数据字典
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExtraData(levelId)
dataDict = comp.GetWholeExtraData()
if dataDict:
for key, value in dataDict.iteritems():
print "key=%s value=%s" % (key, str(value))
# SetExtraData
描述
用于设置实体的自定义数据或者世界的自定义数据,数据以键值对的形式保存。设置实体数据时使用对应实体id创建组件,设置世界数据时使用levelId创建组件
参数
参数名 数据类型 说明 key str 自定义key value any key对应的值,支持python基本数据类型 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
# 设置实体的自定义数据
entitycomp = serverApi.GetEngineCompFactory().CreateExtraData(entityId)
entitycomp.SetExtraData("nickname","steve")
entitycomp.SetExtraData("score",256)
# 设置世界的自定义数据
levelcomp = serverApi.GetEngineCompFactory().CreateExtraData(levelId)
levelcomp.SetExtraData("globalMsg","helloWorld")
# gravity
# GetGravity
描述
获取实体的重力因子,当生物重力因子为0时则应用世界的重力因子
参数
无
返回值
数据类型 说明 float 重力因子 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGravity(entityId)
comp.GetGravity()
# SetGravity
描述
设置实体的重力因子,当生物重力因子为0时则应用世界的重力因子
参数
参数名 数据类型 说明 gravity float 负数,表示每帧向下的速度 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGravity(entityId)
comp.SetGravity(-0.08)
# hurt
# Hurt
描述
设置实体伤害
参数
参数名 数据类型 说明 damage int 伤害值 cause str 伤害来源,详见Minecraft枚举值文档的ActorDamageCause attackerId str 伤害来源的实体id,默认为None childAttackerId str 伤害来源的子实体id,默认为None,比如玩家使用抛射物对实体造成伤害,该值应为抛射物Id knocked bool 实体是否被击退,默认值为True 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHurt(playerId)
comp.Hurt(10, serverApi.GetMinecraftEnum().ActorDamageCause.EntityAttack, attackerId, None, False)
# ImmuneDamage
描述
设置实体是否免疫伤害(该属性存档)
参数
参数名 数据类型 说明 immune bool 是否免疫伤害 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHurt(entityId)
comp.ImmuneDamage(True)
# modAttr
用于支持脚本层的属性管理
# GetAttr
描述
获取属性值
参数
参数名 数据类型 说明 paramName str 属性名称,str的名称建议以mod命名为前缀,避免多个mod之间冲突 defaultValue any 属性默认值,属性不存在时返回该默认值,此时属性值依然未设置 返回值
数据类型 说明 any 返回属性值 备注
- defaultValue不传的时候默认为None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModAttr(entityId)
comp.GetAttr('health')
# 如果直接修改GetAttr出来的集合类型,需要重新调用一遍SetAttr确保有进行更新
testDict = comp.GetAttr('testDict')
testDict['key'] = 'newValue'
comp.SetAttr('testDict', testDict)
# SetAttr
描述
设置属性值
参数
参数名 数据类型 说明 paramName str 属性名称,str的名称建议以mod命名为前缀,避免多个mod之间冲突 paramValue any 属性值,支持python基础数据 返回值
无
备注
- 注意:tuple、set在同步时会转成list。建议优先使用数字和字符串等非集合类型。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModAttr(entityId)
comp.SetAttr('health', 1)
comp.SetAttr('testDict', {'key':'value'})
# persistence
# SetPersistence
描述
设置实体是否存盘
参数
参数名 数据类型 说明 isPersistent bool True为存盘,False为不存盘 返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePersistence(entityId)
comp.SetPersistence(True)
# pos
# GetFootPos
描述
获取实体脚所在的位置
参数
无
返回值
数据类型 说明 tuple(float,float,float) 位置信息 备注
- 获取实体脚底的位置(除了睡觉时)
- 类似接口参见获取实体位置
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePos(entityId)
entityFootPos = comp.GetFootPos()
# GetPos
描述
获取实体位置
参数
无
返回值
数据类型 说明 tuple(float,float,float) 位置信息 备注
- 对于非玩家,获取到的是脚底部位的位置
- 对于玩家,如果处于行走,站立,游泳,潜行,滑翔状态,获得的位置比脚底位置高1.62,如果处于睡觉状态,获得的位置比最低位置高0.2
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePos(entityId)
comp.GetPos()
# SetFootPos
描述
设置实体脚所在的位置
参数
参数名 数据类型 说明 footPos tuple(float,float,float) 实体脚所在的位置 返回值
数据类型 说明 bool 是否设置成功 备注
- 实体行为与使用tp命令一致
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePos(entityId)
comp.SetFootPos((0, 4, 0))
# SetPos
描述
设置实体位置
参数
参数名 数据类型 说明 pos tuple(int,int,int) xyz值 返回值
数据类型 说明 bool 设置结果 备注
- 实体行为与使用tp命令一致
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePos(entityId)
comp.SetPos((1,2,3))
# rot
# GetRot
描述
获取实体角度
参数
无
返回值
数据类型 说明 tuple(float,float) (上下角度,左右角度)单位是角度而不是弧度 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRot(entityId)
comp.GetRot()
# SetRot
描述
设置体角度
参数
参数名 数据类型 说明 rot tuple(float,float) (上下角度,左右角度)单位是角度而不是弧度 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRot(entityId)
comp.SetRot((30,0))
# 生物
# breath
# GetCurrentAirSupply
描述
生物当前氧气储备值
参数
无
返回值
数据类型 说明 int 生物当前氧气储备值 备注
- 注意:该值返回的是当前氧气储备的支持的逻辑帧数 = 氧气储备值 * 逻辑帧数(每秒20帧数)
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(entityId)
comp.GetCurrentAirSupply()
# GetMaxAirSupply
描述
获取生物最大氧气储备值
参数
无
返回值
数据类型 说明 int 最大氧气储备值 备注
- 注意:该值返回的是最大氧气储备的支持的逻辑帧数 = 氧气储备值 * 逻辑帧数(每秒20帧数)
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(entityId)
comp.GetMaxAirSupply()
# GetUnitBubbleAirSupply
描述
单位气泡数对应的氧气储备值
参数
无
返回值
数据类型 说明 int 单位气泡数对应的氧气储备值 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(levelId)
comp.GetUnitBubbleAirSupply()
# IsConsumingAirSupply
描述
获取生物当前是否在消耗氧气
参数
无
返回值
数据类型 说明 bool 是否消耗氧气 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(entityId)
comp.IsConsumingAirSupply()
# SetCurrentAirSupply
描述
设置生物氧气储备值
参数
参数名 数据类型 说明 data int 设置生物当前氧气值 返回值
数据类型 说明 bool 设置结果 备注
- 注意:该值设置的是当前氧气储备的支持的逻辑帧数 = 氧气储备值 * 逻辑帧数(每秒20帧数)
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(entityId)
comp.SetCurrentAirSupply(300)
# SetMaxAirSupply
描述
设置生物最大氧气储备值
参数
参数名 数据类型 说明 data int 设置生物最大氧气值 返回值
数据类型 说明 bool 设置结果 备注
- 注意:该值设置的是最大氧气储备的支持的逻辑帧数 = 氧气储备值 * 逻辑帧数(每秒20帧数)
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(entityId)
comp.SetMaxAirSupply(400)
# SetRecoverTotalAirSupplyTime
描述
设置恢复最大氧气量的时间,单位秒
参数
参数名 数据类型 说明 timeSec float 恢复生物最大氧气值 返回值
数据类型 说明 bool 是否设置成功 备注
- 注意:当设置的最大氧气值小于(timeSec*10)时,生物每帧恢复氧气量的值为0
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBreath(entityId)
comp.SetRecoverTotalAirSupplyTime(10)
# controlAi
# SetBlockControlAi
描述
设置屏蔽生物原生AI
参数
参数名 数据类型 说明 isBlock bool 是否保留AI,False为屏蔽 返回值
数据类型 说明 bool 设置结果 备注
- 屏蔽AI后的生物无法行动,不受重力且不会被推动。但是可以受到伤害,也可以被玩家交互(例如马被骑或村民被交易)
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateControlAi(entityId)
comp.SetBlockControlAi(False)
# entityEvent
# TriggerCustomEvent
描述
触发生物自定义事件
参数
参数名 数据类型 说明 entityId str 生物Id eventName str 事件名称 返回值
数据类型 说明 bool 设置结果 备注
- 触发苦力怕爆炸
在苦力怕的entity json文件中
events
字段下增加如下事件,然后在mod中运行示例代码:"netease:custom_exploading":{ "sequence": [ { "filters": { "test": "has_component", "operator": "!=", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:forced_exploding" ] } }, { "filters": { "test": "has_component", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:forced_charged_exploding" ] } } ] }
- 触发苦力怕爆炸
在苦力怕的entity json文件中
示例
import mod.server.extraServerApi as serverApi
#触发entity自定义event
eventName = "netease:custom_exploading"
comp = serverApi.GetEngineCompFactory().CreateEntityEvent(entityId)
comp.TriggerCustomEvent(entityId,eventName)
# mobSpawn
# SpawnCustomModule
描述
设置自定义刷怪
参数
参数名 数据类型 说明 biomeType int BiomeType枚举 change int Change枚举 entityType int EntityType枚举 probability int 生成的权重[1, 10] minCount int 最小生成数量[0, 10] maxCount int 最大生成数量[0, 10] environment int 1:生成在表面;2:生成在水里 minBrightness int 生成该生物时的最小光照[1, 15],不设置时使用默认值 maxBrightness int 生成该生物时的最大光照[1, 15],不设置时使用默认值 minHeight int 生成该生物时最小的海拔高度[0, 256],不设置时使用默认值 maxHeight int 生成该生物时最大的海拔高度[0, 256],不设置时使用默认值 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateMobSpawn(levelId)
comp.SpawnCustomModule(BiomeType.river,Change.Add,EntityType.Dolphin,10,1,10,2)
# moveTo
# SetMoveSetting
描述
寻路组件
参数
参数名 数据类型 说明 pos tuple(float,float,float) 寻路目标位置 speed float 移动速度 maxIteration int 寻路算法最大迭代次数 默认200 callback function 寻路结束回调函数 返回值
无
备注
使用该接口时,需要在生物中配置有寻路的json组件。配置寻路json组件后,该接口会自动选择相应类型的寻路 目前支持的寻路json组件包括:
- minecraft:navigation.walk 陆地寻路,与原版僵尸的寻路相同
- minecraft:navigation.generic 水陆寻路,支持陆地与水中,与原版溺尸的寻路相同
- minecraft:navigation.climb 陆地寻路,但是支持爬墙,与原版蜘蛛的寻路相同。这种寻路可能会被头顶方块阻挡,一直无法抵达目的地
- minecraft:navigation.fly 空中寻路,与原版鹦鹉的寻路相同 以上的寻路都需要搭配一些其他json组件(例如movement)使用,具体可以参考NavigationMod的示例 上面没有提到的navigation类型暂不支持,例如minecraft:navigation.float(如原版恶魂),minecraft:navigation.hover(如原版蜜蜂)
不同的生物拥有不同的默认最大跟随距离,若要寻路的目标点距离大于此值引擎会拒绝寻路,要修改该距离可以通过在entity的json中配置.
{ "format_version": "1.8.0", "minecraft:entity": { "components": { "minecraft:follow_range": { "value": 48, "max": 48 } } } }
关于maxIteration参数 该参数会影响实际寻到路径的长度。若寻路算法迭代一定次数后,未寻到目标点,会返回局部最优解,即生物只会走到半路。 在无大型障碍物的情况下,参数对应的参考寻路距离如下:该参数默认值200,最大值2000,请开发者根据实际情况选择。
maxIteration 与目标点直线距离 200 13 500 20 1000 30 2000 43 关于callback函数 该函数需要接受两个参数,第一个参数为寻路的entityId,类型str,第二个参数为寻路结果,类型int (玩家获取到的位置比地面会高1.62格,若以玩家位置为目标点需要先把y轴减去1.62,否则callback会一直返回1)
结果 说明 -3 寻路失败,大于跟随距离,或者对正在寻路的飞行系生物使用 -2 寻路失败,生物没有寻路组件(指minecraft:navigation) -1 寻路失败,参数错误,或生物不存在 0 寻路完成。到达设定的目标点 1 寻路完成,但未到达目标点(可能由于maxIteration参数偏小) 2 寻路中断。中途遇到障碍物被阻碍 3 寻路中断。被生物原版寻路行为覆盖,或寻路未结束时重复调用moveTo组件 demo简介: 聊天栏输入walk/generic/climb/fly会原地生成一个使用对应navigation json组件的生物,然后跑到其他位置,再输入go,会将刚才生成的生物导航到玩家当前位置。 这4种示例生物的行为json可以在NavigationMod_behavior/entities目录查看。 4种示例生物的最大寻路距离都设置为了48格。
示例
from mod_log import logger as logger
def myCallback(entityId, result):
if result in (-1,-2,-3):
logger.info('[error] [SetMoveSetting] failed')
elif result==0:
logger.info('[info] [SetMoveSetting] success')
elif result in (1,2,3):
logger.info('[warn] [SetMoveSetting] terminated')
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateMoveTo(entityId)
comp.SetMoveSetting((x,y,z),2.0,200,myCallback)
# name
# GetName
描述
获取生物的自定义名称,即使用命名牌或者SetName接口设置的名称
参数
无
返回值
数据类型 说明 str 生物的自定义名称 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateName(entityId)
comp.GetName()
# SetName
描述
用于设置生物的自定义名称,跟原版命名牌作用相同,玩家和新版流浪商人暂不支持
参数
参数名 数据类型 说明 name str 名称 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateName(entityId)
comp.SetName("new Name")
# SetPlayerPrefixAndSuffixName
描述
设置玩家前缀和后缀名字
参数
参数名 数据类型 说明 prefix str 前缀内容 prefixColor str 前缀内容颜色描述,可以使用GenerateColor接口传入参数 suffix str 后缀内容 suffixColor str 后缀内容颜色描述,可以使用GenerateColor接口传入参数 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateName(playerId)
comp.SetPlayerPrefixAndSuffixName("红队",serverApi.GenerateColor('RED'),'肉盾',serverApi.GenerateColor('RED'))
# ride
# GetEntityRider
描述
获取玩家的直接骑乘对象。
参数
无
返回值
数据类型 说明 str 玩家直接骑乘对象的唯一ID,假如玩家没有骑乘则返回“-1” 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
riderId = comp.GetEntityRider()
# IsEntityRiding
描述
检查玩家是否骑乘。
参数
无
返回值
数据类型 说明 bool 是否骑乘 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
isRiding = comp.IsEntityRiding()
# SetCanOtherPlayerRide
描述
设置其他玩家受否有权限骑乘,True表示每个玩家都能骑乘,False只有驯服者才能骑乘
参数
参数名 数据类型 说明 tamedEntityId str 可骑乘生物id canRide bool 是否控制 返回值
数据类型 说明 bool 设置结果 示例
# 驯服生物
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetCanOtherPlayerRide(entityId,False)
# SetControl
描述
设置该生物无需装备鞍就可以控制行走跳跃
参数
参数名 数据类型 说明 tamedEntityId str 可骑乘生物id isControl bool 是否控制 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetIsControl(entityId,True)
# SetEntityRide
描述
驯服可骑乘生物
参数
参数名 数据类型 说明 playerId str 玩家id tamedEntityId str 要驯服的可骑乘生物id 返回值
数据类型 说明 bool 设置结果 备注
- 驯服信息会被存盘
示例
# 驯服生物
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetEntityRide(playerId,entityId)
# SetPlayerRideEntity
描述
设置玩家骑乘生物
参数
参数名 数据类型 说明 playerId str 玩家id rideEntityId str 被骑乘生物id 返回值
数据类型 说明 bool 设置结果 备注
- 通常需要配合SetEntityRide、SetControl一起使用 当被控制的entity有多个位置时且开发者想要添加多个玩家时,第一个被添加的玩家会被引擎默认设置为控制者
示例
# 骑上坐骑
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetPlayerRideEntity(playerId,rideEntityId)
# SetRidePos
描述
设置生物骑乘位置
参数
参数名 数据类型 说明 tamedEntityId str 可骑乘生物id pos tuple(float,float,float) 骑乘时挂接点 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetRidePos(entityId,(1,1,1))
# SetRiderRideEntity
描述
设置实体骑乘生物
参数
参数名 数据类型 说明 riderId str 骑乘生物id riddenEntityId str 被骑乘生物id 返回值
数据类型 说明 bool 设置结果 备注
- 通常需要配合SetEntityRide、SetControl一起使用,需要被骑乘生物json中骑乘组件支持骑车者的生物类型 当被控制的entity有多个位置时且开发者想要添加多个玩家时,第一个被添加的玩家会被引擎默认设置为控制者
示例
# 骑上坐骑
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetPlayerRideEntity(playerId,rideEntityId)
# SetShowRideUI
描述
设置是否显示马匹的UI界面,建议不显示
参数
参数名 数据类型 说明 tamedEntityId str 可骑乘生物id isShowUI bool 是否显示UI 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetShowRideUI(entityId,False)
# StopEntityRiding
描述
强制玩家下坐骑。
参数
无
返回值
数据类型 说明 bool 当玩家当前正在骑乘并成功下坐骑返回True,否则返回False 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
success = comp.StopEntityRiding()
# tame
# GetOwnerId
描述
获取驯服生物的主人id
参数
无
返回值
数据类型 说明 str 主人id,不存在时返回None 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTame(entityId)
oid = comp.GetOwnerId()
# SetEntityTamed
描述
设置生物驯服,需要配合 entityEvent组件使用。该类驯服不包含骑乘功能。
参数
参数名 数据类型 说明 playerId str 驯服玩家Id tamedId str 被驯服的生物Id 返回值
数据类型 说明 bool 设置结果 备注
- 设置生物json文件能够被驯服
- 修改生物entity json文件:
- 增加 minecraft:tameable 组件
- 增加 tame 组件集合描述,其中minecraft:behavior.follow_owner优先级要高于已有搜寻状态的优先级
- event事件增加对应的on_tame事件,事件执行移除不想管的组件集合,添加刚刚设置的新tame组件集合
- 设置驯服主体和被驯服主体entityId,通过设置
tameSetting
属性 - 设置触发对应的驯服事件
- 驯服苦力怕 json做如下修改
{ "format_version": "1.8.0", "minecraft:entity": { "description": { "identifier": "minecraft:creeper", "is_spawnable": true, "is_summonable": true, "is_experimental": false }, "component_groups": { "minecraft:exploding": { "minecraft:explode": { "fuseLength": 1.5, "fuseLit": true, "power": 3, "causesFire": false, "destroyAffectedByGriefing": true } }, "minecraft:charged_creeper": { "minecraft:is_charged": { } }, "minecraft:charged_exploding": { "minecraft:explode": { "fuseLength": 1.5, "fuseLit": true, "power": 6, "causesFire": false, "destroyAffectedByGriefing": true } }, "minecraft:forced_exploding": { "minecraft:target_nearby_sensor": { }, "minecraft:explode": { "fuseLength": 1.5, "fuseLit": true, "power": 3, "causesFire": false, "destroyAffectedByGriefing": true }, "minecraft:on_target_escape": { } }, "minecraft:forced_charged_exploding": { "minecraft:target_nearby_sensor": { }, "minecraft:explode": { "fuseLength": 1.5, "fuseLit": true, "power": 6, "causesFire": false, "destroyAffectedByGriefing": true }, "minecraft:on_target_escape": { } }, //增加驯服状态 "netease:creeper_tame":{ "minecraft:is_tamed": { }, "minecraft:behavior.follow_owner": { "priority": 4, "speed_multiplier": 1.0, "start_distance": 10, "stop_distance": 2 }, "minecraft:behavior.breed": { "priority": 7 }, "minecraft:behavior.owner_hurt_by_target": { "priority": 1 }, "minecraft:behavior.owner_hurt_target": { "priority": 2 } } }, "components": { "minecraft:type_family": { "family": [ "creeper", "monster" ] }, "minecraft:breathable": { "totalSupply": 15, "suffocateTime": 0 }, "minecraft:nameable": { }, "minecraft:collision_box": { "width": 0.6, "height": 1.8 }, "minecraft:movement": { "value": 0.2 }, "minecraft:navigation.walk": { "can_path_over_water": true }, "minecraft:movement.basic": { }, "minecraft:jump.static": { }, "minecraft:can_climb": { }, "minecraft:loot": { "table": "loot_tables/entities/creeper.json" }, "minecraft:health": { "value": 20, "max": 20 }, "minecraft:attack": { "damage": 3 }, "minecraft:damage_sensor": [ { "on_damage": { "filters": { "test": "is_family", "subject": "other", "value": "lightning" }, "event": "minecraft:become_charged" }, "deals_damage": false } ], "minecraft:target_nearby_sensor": { "inside_range": 2.5, "outside_range": 6.0, "on_inside_range": { "event": "minecraft:start_exploding", "target": "self" }, "on_outside_range": { "event": "minecraft:stop_exploding", "target": "self" } }, "minecraft:interact": { "on_interact": { "filters": { "all_of": [ { "test": "is_family", "subject": "other", "value": "player" }, { "test": "has_equipment", "domain": "hand", "subject": "other", "value": "flint_and_steel" }, { "test": "has_component", "operator": "!=", "value": "minecraft:explode" } ] }, "event": "minecraft:start_exploding_forced", "target": "self" }, "hurt_item": 1, "swing": true, "play_sounds": "ignite", "interact_text": "action.interact.creeper" }, "minecraft:behavior.float": { "priority": 0 }, "minecraft:behavior.swell": { "start_distance": 2.5, "stop_distance": 6.0, "priority": 2 }, "minecraft:behavior.melee_attack": { "priority": 4, "speed_multiplier": 1.25, "track_target": false }, "minecraft:behavior.avoid_mob_type": { "priority": 3, "entity_types": [ { "filters": { "any_of": [ { "test" : "is_family", "subject" : "other", "value" : "ocelot"}, { "test" : "is_family", "subject" : "other", "value" : "cat"} ] }, "max_dist": 6, "walk_speed_multiplier": 1, "sprint_speed_multiplier": 1.2 } ] }, "minecraft:behavior.random_stroll": { "priority": 5, "speed_multiplier": 1 }, "minecraft:behavior.look_at_player": { "priority": 6, "look_distance": 8 }, "minecraft:behavior.random_look_around": { "priority": 6 }, "minecraft:behavior.nearest_attackable_target": { "priority": 1, "entity_types": [ { "filters": { "test": "is_family", "subject": "other", "value": "player" }, "max_dist": 16 } ], "must_see": true, "must_see_forget_duration": 0.0 }, "minecraft:behavior.hurt_by_target": { "priority": 2 }, "minecraft:physics": { }, "minecraft:on_target_escape": { "event": "minecraft:stop_exploding", "target": "self" }, //增加驯服组件 "minecraft:tameable": { "probability": 0.33, "tameItems": "bone", "tame_event": { "event": "netease:on_tame", "target": "self" } } }, "events": { "minecraft:start_exploding_forced": { "sequence": [ { "filters": { "test": "has_component", "operator": "!=", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:forced_exploding" ] } }, { "filters": { "test": "has_component", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:forced_charged_exploding" ] } } ] }, "netease:custom_exploading":{ "sequence": [ { "filters": { "test": "has_component", "operator": "!=", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:forced_exploding" ] } }, { "filters": { "test": "has_component", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:forced_charged_exploding" ] } } ] }, "minecraft:start_exploding": { "sequence": [ { "filters": { "test": "has_component", "operator": "!=", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:exploding" ] } }, { "filters": { "test": "has_component", "value": "minecraft:is_charged" }, "add": { "component_groups": [ "minecraft:charged_exploding" ] } } ] }, "minecraft:stop_exploding": { "remove": { "component_groups": [ "minecraft:exploding" ] } }, "minecraft:become_charged": { "remove": { "component_groups": [ "minecraft:exploding" ] }, "add": { "component_groups": [ "minecraft:charged_creeper" ] } }, //增加驯服事件 "netease:on_tame": { "remove": { "component_groups": [ "minecraft:exploding", "minecraft:charged_exploding", "minecraft:forced_exploding", "minecraft:forced_charged_exploding", "minecraft:charged_creeper" ] }, "add": { "component_groups": [ "netease:creeper_tame" ] } } } } }
- 设置生物json文件能够被驯服
示例
import mod.server.extraServerApi as serverApi
#设置生物驯服
#entityId playerId eventName 为相关参数
tameComp = serverApi.GetEngineCompFactory().CreateTame(entityId)
tameComp.SetEntityTamed(playerId,tameId)
envComp = serverApi.GetEngineCompFactory().CreateEntityEvent(entityId)
envComp.TriggerCustomEvent(tamedId,'netease:on_tame')
# 生物群系
# biome
# GetBiomeName
描述
获取某一位置所属的生物群系信息
参数
参数名 数据类型 说明 pos tuple(int,int,int) 指定位置 dimId int 维度id 返回值
数据类型 说明 str 该位置所属生物群系name 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBiome(levelId)
biomeName = comp.GetBiomeName((0, 80, 0), )
# 文本
# msg
# NotifyOneMessage
描述
给指定玩家发送聊天框消息
参数
参数名 数据类型 说明 playerId str 指定玩家id msg str 消息内容 color str 颜色样式代码字符串,可参考wiki样式代码,默认为白色 返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateMsg(entityId)
comp.NotifyOneMessage(playerId, "test", "§c")
# SendMsg
描述
创建消息实体
参数
参数名 数据类型 说明 name str 发送者玩家的名字 msg str 消息内容 返回值
数据类型 说明 bool 设置结果 备注
- name参数需要设置玩家的名字(可通过name组件获取),如果设置的玩家名字不存在,则随机找一个玩家发出该消息
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateMsg(entityId)
comp.SendMsg("playerName","test")
# SendMsgToPlayer
描述
创建消息实体,然后发送给某个玩家
参数
参数名 数据类型 说明 fromEntityId str 发送者玩家ID toEntityId str 接受者玩家ID msg str 消息内容 返回值
无
示例
comp = serverApi.GetEngineCompFactory().CreateMsg(entityId)
comp.SendMsgToPlayer(fromEntityId, toEntityId, "test")
# 玩家
# exp
# AddPlayerExperience
描述
增加玩家经验值
参数
参数名 数据类型 说明 exp int 玩家经验值,可设置负数 返回值
数据类型 说明 bool 设置是否成功 备注
- 如果设置的exp值为负数,且超过当前等级已有的经验值,调用接口后,该玩家等级不会下降但是经验值会置为最小值
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
comp.AddPlayerExperience(25)
# CreateExperienceOrb
描述
创建专属经验球
参数
参数名 数据类型 说明 exp int 经验球经验 position tuple(float,float,float) 创建的位置 isSpecial bool 是否专属经验球 返回值
数据类型 说明 bool 设置是否成功 备注
- 设置经验球经验,entityId是人的entityId。专属的经验球只有entityId的人才能拾取
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
comp.CreateExperienceOrb(25,(10,10,10),False)
# GetOrbExperience
描述
获取经验球的经验
参数
无
返回值
数据类型 说明 int 经验值,正整数。获取失败的情况下返回-1。 备注
- 设置经验球经验,entityId是经验球的entityId,如果经验小于等于0,拾取后不再加经验
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
print(comp.GetOrbExperience())
# GetPlayerExp
描述
获取玩家当前等级下的经验值
参数
参数名 数据类型 说明 isPercent bool 是否为百分比 返回值
数据类型 说明 float 玩家经验值 备注
- 如果设置返回百分比为False,则返回玩家当前等级下经验的绝对值(非当前玩家总经验值)。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
print(comp.GetPlayerExp(False))
# GetPlayerTotalExp
描述
获取玩家的总经验值
参数
无
返回值
数据类型 说明 int 总经验值,正整数。获取失败的情况下返回-1。 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
print(comp.GetPlayerTotalExp())
# SetOrbExperience
描述
设置经验球经验
参数
参数名 数据类型 说明 exp int 经验球经验 返回值
数据类型 说明 bool 设置是否成功 备注
- 设置经验球经验,entityId是经验球的entityId,如果经验小于等于0,拾取后不再加经验
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
comp.SetOrbExperience(25)
# SetPlayerTotalExp
描述
设置玩家的总经验值
参数
参数名 数据类型 说明 exp int 总经验值,正整数 返回值
数据类型 说明 bool 设置是否成功 备注
- 根据总经验值会重新计算等级,该接口可引起等级的变化
- 内部运算采用浮点数,数值较大时会出现误差
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
comp.SetPlayerTotalExp(25)
# fly
# ChangePlayerFlyState
描述
改变玩家的飞行状态
参数
参数名 数据类型 说明 isFly bool 飞行状态,True:飞行模式,False:正常行走模式 返回值
数据类型 说明 bool True:是 False:否 示例
comp = serverApi.GetEngineCompFactory().CreateFly(playerId)
comp.ChangePlayerFlyState(True)
# IsPlayerFlying
描述
获取玩家是否在飞行
参数
无
返回值
数据类型 说明 bool True:是 False:否 示例
comp = serverApi.GetEngineCompFactory().CreateFly(playerId)
comp.IsPlayerFlying()
# lv
# AddPlayerLevel
描述
修改玩家等级
参数
参数名 数据类型 说明 level int 玩家等级,可设置负数 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateLv(playerId)
comp.AddPlayerLevel(2)
# GetPlayerLevel
描述
获取玩家等级
参数
无
返回值
数据类型 说明 int 玩家等级 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateLv(playerId)
comp.GetPlayerLevel()
# player
# ChangeSelectSlot
描述
设置玩家当前选中快捷栏物品的index
参数
参数名 数据类型 说明 slot int 快捷栏物品的index,从0开始,最大为8 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
success = comp.ChangeSelectSlot(0)
# ClearDefinedLevelUpCost
描述
清理自定义的升级经验,清理后才有会再次回调ChangeLevelUpCostServerEvent事件并再次设置新的升级经验值。
参数
参数名 数据类型 说明 level int 指定清理的等级,加入传入的数值小于0,则清理所有等级的升级经验值缓存 返回值
数据类型 说明 bool 是否清理成功。 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
suc = comp.ClearDefinedLevelUpCost(1)
# ClosePlayerCritBox
描述
关闭玩家爆头,关闭后将无法触发ProjectileCritHitEvent事件。
参数
无
返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerCritBox()
# ClosePlayerHitBlockDetection
描述
关闭碰撞方块的检测,关闭后将不会触发OnPlayerHitBlockServerEvent事件
参数
无
返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerHitBlockDetection()
# ClosePlayerHitMobDetection
描述
关闭碰撞生物的检测,关闭后将不会触发OnPlayerHitMobServerEvent事件
参数
无
返回值
数据类型 说明 bool 是否关闭成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.ClosePlayerHitMobDetection()
# EnableKeepInventory
描述
设置玩家死亡不掉落物品
参数
参数名 数据类型 说明 enable bool 是否开启“保留物品栏” 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
succ = comp.EnableKeepInventory(True)
# GetPlayerAbilities
描述
获取玩家具体权限
参数
无
返回值
数据类型 说明 dict 具体权限,详见备注 备注
具体权限说明
权限字段 数据类型 说明 build bool 放置方块 mine bool 采集方块 doorsandswitches bool 使用门和开关 opencontainers bool 打开容器 attackplayers bool 攻击玩家 attackmobs bool 攻击生物 op bool 操作员命令 teleport bool 使用传送 返回值示例
{'teleport': True, 'opencontainers': True, 'mine': True, 'build': True, 'op': True, 'attackmobs': True, 'doorsandswitches': True, 'attackplayers': True}
示例
comp = self.CreateComponent(playerId, "Minecraft", "player")
operation = comp.GetPlayerAbilities()
# GetPlayerHunger
描述
获取玩家饥饿度,展示在UI饥饿度进度条上,初始值为20,即每一个鸡腿代表2个饥饿度。 饱和度(saturation) :玩家当前饱和度,初始值为5,最大值始终为玩家当前饥饿度(hunger),该值直接影响玩家饥饿度(hunger)。
1)增加方法:吃食物。
2)减少方法:每触发一次消耗事件,该值减少1,如果该值不大于0,直接把玩家 饥饿度(hunger) 减少1。参数
无
返回值
数据类型 说明 float 玩家饥饿度 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.GetPlayerHunger()
# GetPlayerMaxExhaustionValue
描述
获取玩家foodExhaustionLevel的归零值,常量值,默认为4。消耗度(exhaustion)是指玩家当前消耗度水平,初始值为0,该值会随着玩家一系列动作(如跳跃)的影响而增加,当该值大于最大消耗度(maxExhaustion)后归零,并且把饱和度(saturation)减少1(为了说明饥饿度机制,我们将此定义为消耗事件)
参数
无
返回值
数据类型 说明 float 玩家foodExhaustionLevel的归零值 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.GetPlayerMaxExhaustionValue()
# GetPlayerOperation
描述
获取玩家权限类型信息
参数
无
返回值
数据类型 说明 int 权限类型,Visitor为0,Member为1,Operator为2,Custom为3 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
operation = comp.GetPlayerOperation()
# IsSneaking
描述
获取玩家是否处于潜行状态
参数
无
返回值
数据类型 说明 bool 当前玩家是否处于潜行状态 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
is_sneaking = comp.IsSneaking()
# IsSwiming
描述
获取玩家是否处于游泳状态。
参数
无
返回值
数据类型 说明 bool 当前玩家是否处于游泳状态 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
is_swiming = comp.IsSwiming()
# OpenPlayerCritBox
描述
开启玩家爆头,开启后该玩家头部被击中后会触发ProjectileCritHitEvent事件。
参数
无
返回值
无
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerCritBox()
# OpenPlayerHitBlockDetection
描述
开启碰撞方块的检测,开启后碰撞时会触发OnPlayerHitBlockServerEvent事件
参数
参数名 数据类型 说明 precision float 碰撞检测精度,参数需要在区间[0, 1) 返回值
数据类型 说明 bool 是否设置成功 备注
- 注:该碰撞检测会屏蔽草、空气、火、高草四种方块
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerHitBlockDetection(0.0001)
# OpenPlayerHitMobDetection
描述
开启碰撞生物的检测,开启后碰撞时会触发OnPlayerHitMobServerEvent事件
参数
无
返回值
数据类型 说明 bool 是否开启成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.OpenPlayerHitMobDetection()
# SetPickUpArea
描述
设置玩家的拾取物品范围,设置后该玩家的拾取物品范围会在原版拾取范围的基础上进行改变。
参数
参数名 数据类型 说明 area tuple(float,float,float) 拾取物品范围,传入(0, 0, 0)时视作取消设置 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
# 玩家拾取物品范围在X轴正负方向各增加5格,在Z轴正负方向各增加3格,在Y轴保持不变
succ = comp.SetPickUpArea((5, 0, 3))
# SetPlayerGameType
描述
设置玩家个人游戏模式
参数
参数名 数据类型 说明 gameType int GetMinecraftEnum().GameType.*:Survival,Creative,Adventure分别为0~2 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.SetPlayerGameType(serverApi.GetMinecraftEnum().GameType.Survival)
# SetPlayerHunger
描述
设置玩家饥饿度。
参数
参数名 数据类型 说明 value float 饥饿度 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.SetPlayerHunger(10)
# SetPlayerJumpable
描述
设置玩家是否可跳跃
参数
参数名 数据类型 说明 isJumpable bool 是否可跳跃,True允许跳跃,False禁止跳跃 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.SetPlayerJumpable(False)
# SetPlayerMaxExhaustionValue
描述
设置玩家foodExhaustionLevel的归零值,通过调整 最大消耗度(maxExhaustion) 的大小,就可以加快或者减慢 饥饿度(hunger) 的消耗,当 最大消耗度(maxExhaustion) 很大时,饥饿度可以看似一直不下降
参数
参数名 数据类型 说明 value float foodExhaustionLevel的归零值 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.SetPlayerMaxExhaustionValue(10.0)
# SetPlayerMovable
描述
设置玩家是否可移动
参数
参数名 数据类型 说明 isMovable bool 是否可移动,True允许移动,False禁止移动 返回值
数据类型 说明 bool 是否设置成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.SetPlayerMovable(False)
# SetPlayerRespawnPos
描述
设置玩家复活的位置,当前玩家的复活点仅支持主世界
参数
参数名 数据类型 说明 pos tuple(int,int,int) 复活点的位置坐标 返回值
数据类型 说明 bool 是否设置成功 示例
comp = self.CreateComponent(playerId, "Minecraft", "player")
suc = comp.SetPlayerRespawnPos((0, 4, 0))
# 物品
# chestBlock
# GetChestBoxSize
描述
获取箱子容量大小
参数
参数名 数据类型 说明 playerId str或None 玩家id/None pos tuple(int,int,int) 箱子位置 dimensionId int 箱子所在维度,默认为-1,传入非负值时不依赖playerId,playerId可传入None,可获取对应维度的常加载区块内箱子容量 返回值
数据类型 说明 int 箱子大小,错误值-1 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChestBlock(playerId)
comp.GetChestBoxSize(playerId,(x,y,z))
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateChestBlock(levelId)
comp.GetChestBoxSize(None, (x, y, z), 0)
# SetChestBoxItemExchange
描述
交换箱子里物品的槽位
参数
参数名 数据类型 说明 playerId str 玩家id pos tuple(int,int,int) 箱子位置 slotPos1 int 箱子槽位1 slotPos2 int 箱子槽位2 返回值
数据类型 说明 bool 设置成功返回True,失败返回False 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChestBlock(playerId)
comp.SetChestBoxItemExchange(playerId, (x,y,z), 0, 1)
# SetChestBoxItemNum
描述
设置箱子槽位物品数目
参数
参数名 数据类型 说明 playerId str或None 玩家id/None pos tuple(int,int,int) 箱子位置 slotPos int 箱子槽位 num int 物品数目 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,playerId可传入None,可在对应维度的常加载区块设置方块 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChestBlock(playerId)
comp.SetChestBoxItemNum(playerId, (x,y,z), 0, 10)
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateChestBlock(levelId)
comp.SetChestBoxItemNum(None, (x,y,z), 0, 10, 0)
# itembanned
# AddBannedItem
描述
增加禁用物品
参数
参数名 数据类型 说明 itemName str 物品标识符,格式[namespace:name:auxvalue],auxvalue默认为0,auxvalue为*时候匹配任意auxvalue值。例如:minecraft:egg(也可以通过填写配置文件config/banned_items.json进行启动禁用) 返回值
数据类型 说明 bool 是否增加成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItemBanned(levelId)
comp.AddBannedItem("minecraft:egg")
# ClearBannedItems
描述
清空禁用物品
参数
无
返回值
数据类型 说明 bool 是否清空成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItemBanned(levelId)
comp.ClearBannedItems()
# GetBannedItemList
描述
获取禁用物品列表
参数
无
返回值
数据类型 说明 list(str)或None 禁用物品列表或者None(异常情况),list元素为物品标识符,格式[namespace:name:auxvalue],auxvalue默认为0,auxvalue为*时候匹配任意auxvalue值。 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItemBanned(levelId)
comp.GetBannedItemList()
# RemoveBannedItem
描述
移除禁用物品
参数
参数名 数据类型 说明 itemName str 物品标识符,格式[namespace:name:auxvalue],auxvalue默认为0,auxvalue为*时候匹配任意auxvalue值。 返回值
数据类型 说明 bool 是否移除成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItemBanned(levelId)
comp.RemoveBannedItem("minecraft:stained_glass:2")
# item
# AddEnchantToInvItem
描述
给物品栏的物品添加附魔信息
参数
参数名 数据类型 说明 slotPos int 物品栏槽位 enchantType int 附魔类型,可以查看枚举值文档 level int 附魔等级 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.AddEnchantToInvItem(0, serverApi.GetMinecraftEnum().EnchantType.BowDamage, 2)
# ChangePlayerItemTipsAndExtraId
描述
修改玩家物品的自定义tips和自定义标识符
参数
参数名 数据类型 说明 posType int ItemPosType枚举 slotPos int 箱子槽位 customTips str 物品的自定义tips extraId str 物品的自定义标识符 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.ChangePlayerItemTipsAndExtraId(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY, 0, "自定义tips", "自定义标识符")
# ClearPlayerOffHand
描述
清除玩家左手物品
参数
参数名 数据类型 说明 playerId str 玩家id 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.ClearPlayerOffHand(playerId)
# GetContainerItem
描述
获取容器物品
参数
参数名 数据类型 说明 pos tuple(int,int,int) 容器位置 slotPos int 容器槽位 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,CreateItem可传入levelId,否则CreateItem需传入playerId来获取玩家当前维度 getUserData bool 是否获取userData,默认为False 返回值
数据类型 说明 dict 物品信息字典,没有物品则返回None 备注
- 容器的具体类型包括:箱子,陷阱箱,潜影盒,漏斗,木桶,投掷器,发射器
- 此接口不支持末影箱。对应的末影箱接口请参考 GetEnderChestItem
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetContainerItem((x,y,z), 0)
# 不依赖playerId举例,支持常加载方块
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.GetContainerItem((x,y,z), 0, 2)
# GetContainerSize
描述
获取容器容量大小
参数
参数名 数据类型 说明 pos tuple(int,int,int) 箱子位置 dimensionId int 容器所在维度,默认值为-1,表示玩家所在维度,需要在CreateItem时传入playerId来获取玩家当前维度。传入非负值时不依赖playerId。 返回值
数据类型 说明 int 箱子大小,错误值-1 备注
- 此接口不支持末影箱,因为末影箱的size固定为27。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetContainerSize((x,y,z))
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.GetContainerSize((x, y, z), 0)
# GetCustomName
描述
获取物品的自定义名称,与铁砧修改的名称一致
参数
参数名 数据类型 说明 itemDict dict 物品信息字典。如果是接口获取的itemDict,应该包含userData,即getUserData应该为True 返回值
数据类型 说明 str 自定义名称 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemDict = comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
name = comp.GetCustomName(itemDict)
# GetDroppedItem
描述
获取掉落在世界的指定entityid的物品信息
参数
参数名 数据类型 说明 itemEntityId str itemActor的entityId getUserData bool 是否获取userData,默认为False 返回值
数据类型 说明 dict 信息 备注
- 如果物品不存在,返回值为None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.GetDroppedItem(entityId)
# GetEnderChestItem
描述
获取末影箱物品
参数
参数名 数据类型 说明 playerId str 玩家id slotPos int 容器槽位 getUserData bool 是否获取userData,默认为False 返回值
数据类型 说明 dict 物品信息字典,没有物品则返回None 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetEnderChestItem(playerId, 0)
# GetEntityItem
描述
获取生物物品,支持获取背包,盔甲栏,副手以及主手物品
参数
参数名 数据类型 说明 posType int ItemPosType枚举 slotPos int 槽位,获取INVENTORY及ARMOR时需要设置,其他情况写0即可 getUserData bool 是否获取userData,默认为False 返回值
数据类型 说明 dict 物品信息字典,没有物品则返回None 备注
- 左右手及装备可以替代GetPlayerItem接口获取玩家的物品,但背包不行。获取生物背包目前支持驴、骡、羊驼以及其他带背包的自定义生物
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(entityId)
comp.GetEntityItem(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY, 0)
# GetEquItemEnchant
描述
获取装备槽位中盔甲的附魔
参数
参数名 数据类型 说明 slotPos int ArmorSlotType枚举 返回值
数据类型 说明 list(tuple(int,int)) 盔甲的附魔 备注
- 如果物品不存在,或者没有附魔值,返回None。如果存在返回tuple数组,每个tuple由附魔类型(EnchantType枚举)和附魔等级组成
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetEquItemEnchant(serverApi.GetMinecraftEnum().ArmorSlotType.HEAD)
# GetInvItemEnchantData
描述
获取物品栏的物品附魔信息
参数
参数名 数据类型 说明 slotPos int 物品栏槽位 返回值
数据类型 说明 list(tuple(int,int)) list中每个tuple由附魔类型(EnchantType枚举)和附魔等级组成。没有附魔则为空list 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetInvItemEnchant(0)
# GetItemBasicInfo
描述
获取物品的基础信息
参数
参数名 数据类型 说明 itemName str item的identifier auxValue int 物品的附加值auxvalue,默认为0 isEnchanted bool 是否附魔,默认为False。用于返回的idAux 返回值
数据类型 说明 dict 基础信息,详见备注 备注
- auxValue默认值是0,可以不设置。如果物品不存在,返回值为None
关键字 数据类型 说明 itemName str 本地化的物品名字 maxStackSize int 物品最大堆叠数目 maxDurability int 物品最大耐久值 idAux int 主要用于客户端的ui绑定,详见客户端接口 tierDict dict 自定义方块定义的挖掘相关的属性 netease:tier,没有设置时返回None
- auxValue默认值是0,可以不设置。如果物品不存在,返回值为None
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.GetItemBasicInfo("minecraft:bow")
# GetItemDurability
描述
获取指定槽位的物品耐久
参数
参数名 数据类型 说明 posType int ItemPosType枚举 slotPos int 槽位,为-1时,获取左手物品的耐久值 返回值
数据类型 说明 int 物品的耐久值 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetItemDurability(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY, 1)
# GetPlayerAllItems
描述
获取玩家指定的槽位的批量物品信息
参数
参数名 数据类型 说明 posType int ItemPosType枚举 getUserData bool 是否获取userData,默认为False 返回值
数据类型 说明 list(dict) 物品信息字典的数组,没有物品的位置为None 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetPlayerAllItems(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY)
# GetPlayerItem
描述
获取玩家物品,支持获取背包,盔甲栏,副手以及主手物品
参数
参数名 数据类型 说明 posType int ItemPosType枚举 slotPos int 槽位,获取INVENTORY及ARMOR时需要设置,其他情况写0即可 getUserData bool 是否获取userData,默认为False 返回值
数据类型 说明 dict 物品信息字典,没有物品则返回None 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY, 0)
# GetSelectSlotId
描述
获取玩家当前选中槽位
参数
无
返回值
数据类型 说明 int 当前槽位,错误时返回-1 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.GetSelectSlotId()
# GetUserDataInEvent
描述
使物品相关服务端事件的物品信息字典参数带有userData。在mod初始化时调用即可
参数
参数名 数据类型 说明 eventName str 引擎事件名 返回值
数据类型 说明 bool 是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
# 这样调用之后,PlayerEatFoodServerEvent事件的itemDict参数会带有userData字段
comp.GetUserDataInEvent("PlayerEatFoodServerEvent")
# MayPlaceOn
描述
判断物品是否可以放到指定的位置上
参数
参数名 数据类型 说明 identifier str 物品标识,如minecraft:dye auxValue int 物品的附加值 blockPos tuple(int,int,int) 位置坐标 facing int 朝向,详见Facing枚举 返回值
数据类型 说明 bool 是否可以放置 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.MayPlaceOn("minecraft:dye", 3, (1,2,3), serverApi.GetMinecraftEnum().Facing.Up)
# SetAttackDamage
描述
设置物品的攻击伤害值
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 attackDamage int 攻击伤害值 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemDict = comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
success = comp.SetAttackDamage(itemDict, 5)
if success:
comp.SpawnItemToPlayerCarried(itemDict, playerId)
# SetCustomName
描述
设置物品的自定义名称,与使用铁砧重命名一致
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 name str 物品名称。支持unicode 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemDict = comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
comp.SetCustomName(itemDict, '史蒂夫')
comp.SpawnItemToPlayerCarried(itemDict, playerId)
# SetEntityItem
描述
设置生物物品,建议开发者根据生物特性来进行设置,部分生物设置装备后可能不显示但是死亡后仍然会掉落所设置的装备
参数
参数名 数据类型 说明 posType int ItemPosType枚举 itemDict dict 生物身上不同位置的物品信息字典列表,如果传入None将清除当前位置的物品/装备 slotPos int 容器槽位,如果ItemPosType为左右手可不传,如果ItemPosType为背包则对应背包槽位,如果ItemPosType为armor则对应装备位置,具体请看宏定义GetMinecraftEnum().ArmorSlotType.* 返回值
数据类型 说明 bool 设置成功返回True 备注
- 设置生物背包目前支持驴、骡、羊驼以及其他带背包的自定义生物。该接口与spawnTo系列接口相比多了槽位限制,只能设置对应槽位的装备、左手物品,并且右手不能设置装备。溺尸暂不支持设置自定义装备。如果传入的itemDict为None或{},itemName为minecraft:air,count为0,均可以达到清除物品的效果。玩家背包请使用SpawnItemToPlayerInv来生成物品,使用SetInvItemNum设置0来清除物品,其他部位也可以用该接口设置。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(entityId)
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': {},
}
comp.SetEntityItem(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY, itemDict, 0)
# SetInvItemExchange
描述
交换玩家背包物品
参数
参数名 数据类型 说明 pos1 int 物品位置 pos2 int 物品位置 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SetInvItemExchange(0, 2)
# SetInvItemNum
描述
设置玩家背包物品数目
参数
参数名 数据类型 说明 slotPos int 物品栏槽位 num int 物品数目,可以通过设置数量为0来达到清除背包物品的效果 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SetInvItemNum(0, 10)
# SetItemDurability
描述
设置物品的耐久值
参数
参数名 数据类型 说明 posType int ItemPosType枚举 slotPos int 槽位,为-1时,设置左手物品的耐久值 durability int 耐久值 返回值
数据类型 说明 bool 设置结果 备注
- 设置的耐久值超过物品的最大耐久值时,使用最大耐久值;最小耐久值为0。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SetItemDurability(serverApi.GetMinecraftEnum().ItemPosType.INVENTORY, 0, 5)
# SetItemTierLevel
描述
设置工具类物品的挖掘等级
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 level int 挖掘等级 返回值
数据类型 说明 bool 设置是否成功 备注
- 对于不总是可以破坏的方块(包括方块材质为Stone,Metal,TopSnow,Snow,Web),需要使用不同挖掘等级(level)的工具才能破坏并产生掉落物。
level 类型 0 木 1 石 2 铁 3 钻石 4 下界 - 剑和剪刀都可以对蜘蛛网进行破坏并产生掉落物; 铲可以对雪和顶层雪进行破坏并产生掉落物; 镐是否可以破坏判断: 1)对于黑曜石、下界类方块、远古残骸,需要Level大于等于3的镐才能破坏并产生掉落物; 2)对于钻石块、钻石矿石、绿宝石块、绿宝石矿石、金块、金矿石、红石矿石、发光的红石矿石,需要Level大于等于2的镐才能破坏并产生掉落物; 3)对于铁块、铁矿石、青金石块、青金石矿石,需要Level大于等于1的镐才能破坏并产生掉落物; 4)对于其他Stone和Metal材质的方块,需要Level大于等于0的镐才能破坏并产生掉落物。
- 对于不总是可以破坏的方块(包括方块材质为Stone,Metal,TopSnow,Snow,Web),需要使用不同挖掘等级(level)的工具才能破坏并产生掉落物。
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemDict = comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
success = comp.SetItemTierLevel(itemDict, 5)
if success:
comp.SpawnItemToPlayerCarried(itemDict, playerId)
# SetItemTierSpeed
描述
设置工具类物品的挖掘速度
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 speed float 挖掘速度 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemDict = comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
success = comp.SetItemTierSpeed(itemDict, 32)
if success:
comp.SpawnItemToPlayerCarried(itemDict, playerId)
# SetMaxStackSize
描述
设置物品的最大堆叠数量(存档)
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 maxStackSize int 最大堆叠数量,不能超过64,如果该值小于物品的堆叠数量,会返回失败 返回值
数据类型 说明 bool 设置是否成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemDict = comp.GetPlayerItem(serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
success = comp.SetMaxStackSize(itemDict, 32)
if success:
comp.SpawnItemToPlayerCarried(itemDict, playerId)
# SetPlayerAllItems
描述
添加批量物品信息到指定槽位
参数
参数名 数据类型 说明 itemsDictMap dict 需要添加的物品的字典,字典的key是tuple(ItemPosType, slotPos),value是需要添加的物品信息字典 返回值
数据类型 说明 dict 设置结果,字典的key是tuple(ItemPosType, slot),value为bool代表该槽位设置是否成功 备注
- posType ItemPosType ItemPosType枚举
示例
import mod.server.extraServerApi as serverApi
itemsDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
itemsDictMap = {}
for i in xrange(36):
if i % 3 == 0:
itemsDictMap[(minecraftEnum.ItemPosType.INVENTORY, i)] = itemsDict
itemsDictMap[(minecraftEnum.ItemPosType.CARRIED, 0)] = itemsDict
itemsDictMap[(minecraftEnum.ItemPosType.OFFHAND, 0)] = itemsDict
comp.SetPlayerAllItems(itemsDictMap)
# SpawnItemToArmor
描述
生成物品到玩家装备位
参数
参数名 数据类型 说明 itemDict dict 物品信息字典,如果传入None或空字典将清除当前位置的装备 playerId str 玩家id slotPos int ArmorSlotType,装备位置,具体请看宏定义GetMinecraftEnum().ArmorSlotType.* 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:diamond_helmet',
'count': 1,
'enchantData': [],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc'
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToArmor(itemDict, playerId, serverApi.GetMinecraftEnum().ArmorSlotType.HEAD)
# SpawnItemToChestBlock
描述
生成物品到箱子
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 playerId str或None 玩家id/None slotPos int 箱子槽位 blockPos tuple(int,int,int) 箱子位置 dimensionId int 方块所在维度,默认值为-1,传入非负值时不依赖playerId,playerId可传入None,可生成物品到对应维度的常加载区块内的箱子 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToChestBlock(itemDict, playerId, 0, (x,y,z))
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.SpawnItemToChestBlock(itemDict, None, 0, (x,y,z), 0)
# SpawnItemToContainer
描述
生成物品到容器
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 slotPos int 箱子槽位 blockPos tuple(int,int,int) 箱子位置 dimensionId int 容器所在维度,默认值为-1,表示玩家所在维度,需要在CreateItem时传入playerId来获取玩家当前维度。传入非负值时不依赖playerId。 返回值
数据类型 说明 bool 设置结果 备注
- 此接口不支持末影箱。对应的末影箱接口请参考 SpawnItemToEnderChest
示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
# 生成物品到容器的0号槽位,容器位于玩家所在维度,坐标为(x,y,z)
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToContainer(itemDict, 0, (x,y,z))
# SpawnItemToEnderChest
描述
生成物品到末影箱
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 playerId str 玩家id/None slotPos int 末影箱槽位 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToEnderChest(itemDict, 0)
# SpawnItemToLevel
描述
生成物品掉落物,如果需要获取物品的entityId,可以调用服务端系统接口CreateEngineItemEntity
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 dimensionId int 设置dimension pos tuple(float,float,float) 生成位置 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': {},
}
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.SpawnItemToLevel(itemDict, 0, (0,80,20))
# 当最大生成数量为 1 时,可以继续调用生成 2 个物品
comp.SpawnItemToLevel(itemDict, 0, (0,80,20))
# SpawnItemToPlayerCarried
描述
生成物品到玩家右手
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 playerId str 玩家id 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToPlayerCarried(itemDict, playerId)
# SpawnItemToPlayerInv
描述
生成物品到玩家背包
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 playerId str 玩家id slotPos int 背包槽位(可选) 返回值
数据类型 说明 bool 设置结果 备注
- 当slotPos不设置时,当设置的数量超过单个槽位堆叠的上限时,会将多余的物品设置到另外的空闲槽位.如果生成的物品与背包中有的槽位的物品种类一致,该接口也会将物品增加到这些槽位中。注意:如果背包中剩余的物品数目和增加的物品数目之和大于64,则会生成物品数目到64,但是接口返回失败。
示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToPlayerInv(itemDict, playerId, 0)
# SpawnItemToPlayerOffHand
描述
生成物品到玩家左手
参数
参数名 数据类型 说明 itemDict dict 物品信息字典 playerId str 玩家id 返回值
数据类型 说明 bool 设置结果 示例
import mod.server.extraServerApi as serverApi
itemDict = {
'itemName': 'minecraft:bow',
'count': 1,
'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),],
'auxValue': 0,
'customTips':'§c new item §r',
'extraId': 'abc',
'userData': { },
}
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.SpawnItemToPlayerOffHand(itemDict, playerId)
# recipe
# GetRecipeResult
描述
根据配方id获取配方结果。仅支持合成配方
参数
参数名 数据类型 说明 recipeId str 配方id,对应配方json文件中的identifier字段 返回值
数据类型 说明 list(dict) list的元素resultDict字典见备注 备注
- resultDict字典内容如下
关键字 数据类型 说明 itemName str 物品名称id auxValue int 物品附加值 num int 物品数目
- resultDict字典内容如下
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRecipe(serverApi.GetLevelId())
comp.GetRecipeResult(recipe1)
comp.GetRecipeResult(recipe2)·
#使用此配方后,可以使用一个铁锭放在上,一个木棍放在下,合成铁剑
# GetRecipesByResult
描述
通过输出物品查询配方所需要的输入材料
参数
参数名 数据类型 说明 resultIdentifier str 输出物品的标识符 tag str 对应配方json中的tags字段里面的值 aux int 输出物品的附加值, 不传参的话默认为0 返回值
数据类型 说明 list(dict) 返回符合条件的配方列表 备注
- 若配方为酿造台配方时,由于原版实现没有存储相应信息,不匹配tag标签与aux值
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRecipe(serverApi.GetLevelId())
print(comp.GetRecipesByResult("minecraft:boat", "crafting_table", 4))
# 音效
# systemAudio
# PlaySystemSound
描述
播放游戏内原有内容
参数
参数名 数据类型 说明 playerId str或None 玩家id/None soundId int 详见SysSoundType pos tuple(float,float,float) 音源位置 blockId int 详见BlockType entityType int 详见EntityType isBaby bool 是否为幼儿音效 isGlobal bool 是否为全局 dimensionId int 音源所在维度,默认值为-1,传入非负值时不依赖playerId,playerId可传入None,可在对应维度的常加载区块播放游戏音效 返回值
数据类型 说明 bool 设置结果 备注
- 由于游戏中音效是通过事件触发的。例如:鸡的死亡音效:因为死亡跟block无关,因此 soundId -- Death, entityType -- Chicken, blockId -- -1
- 着地音效:因为着地到不同的block,音效是不一样的, 因此 soundId -- Fall, entityType -- -1, blockId -- grass
示例
#播放鸡死亡音效
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateSystemAudio(entityId)
comp.PlaySystemSound(playerId,serverApi.GetMinecraftEnum().SysSoundType.Death, (x,y,z), serverApi.GetMinecraftEnum().BlockType.grass, serverApi.GetMinecraftEnum().EntityType.Chicken, False, False)
# 不依赖playerId举例,支持常加载区块
comp = serverApi.GetEngineCompFactory().CreateSystemAudio(levelId)
comp.PlaySystemSound(None, serverApi.GetMinecraftEnum().SysSoundType.Death, (x,y,z), serverApi.GetMinecraftEnum().BlockType.grass, serverApi.GetMinecraftEnum().EntityType.Chicken, False, False, 0)
# 指令
# command
# SetCommand
描述
使用游戏内指令
参数
参数名 数据类型 说明 cmdStr str 指令 playerId str 玩家id:可选,如果playerId不设置,则随机选择玩家 showOutput bool 是否输出到聊天窗口:可选,默认False,如果为True的话会和聊天窗口输入原生指令一样输出返回信息。只有当该参数为True的时候会触发OnCommandOutputClientEvent 返回值
数据类型 说明 bool 命令是否执行成功 示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateCommand(levelId)
comp.SetCommand("/tp @p 100 5 100")#传送指令