--- sidebarDepth: 1 --- # 方块实体 ## CleanBlockTileEntityCustomData 服务端 method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer - 描述 清空指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 绑定TileEntity的特殊方块的位置坐标 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 清空结果,假如对应位置的block不存在或者没有绑定的TileEntity,就会失败 | - 备注 - 如果dimensionId不传或传入负值,该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId) pos = (-1, 4, 34) dimensionId = 0 suc = comp.CleanBlockTileEntityCustomData(pos, dimensionId) print "CleanBlockTileEntityCustomData pos=%s suc=%s" % (str(pos), suc) ``` ## CreateFrameEffectForBlockEntity 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 在自定义方块实体上创建序列帧特效,创建后该接口返回序列帧特效的Id,利用该Id可以使用特效/序列帧中的接口对该序列帧特效进行播放、设置位置、大小等操作。与实体的序列帧特效创建方式类似。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | path | str | 特效资源路径,不需要后缀名,路径为resource_pack/textures文件夹下或resource_pack/effects下的序列帧资源文件的路径,路径名分别以"textures/"开头或"effects/"开头。路径名以"textures/"开头时不需要加.json后缀名, 路径名以"effects/"开头时需要加.json后缀名。 | | frameKeyName | str | 该序列帧特效的自定义键值名称,创建序列帧特效后可以使用该键值名称通过GetFrameEffectIdInBlockEntity接口来获取序列帧特效的id。 | | effectPos | tuple(float,float,float) | 特效相对自定义方块实体的位置,即以自定方块实体所在的位置为原点的坐标系下的坐标位置。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | int或None | 创建成功则返回序列帧特效的Id,创建失败则返回None | - 示例 ```python import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 以自定义方块实体所在的位置为原点,在这个原点上的坐标(1.0, 1.0, 1.0)的位置上使用resource_pack/textures下的资源创建序列帧特效 id1 = comp.CreateFrameEffectForBlockEntity(pos, "textures/sfxs/snow", "my_frame1", (1.0, 1.0, 1.0)) # 以自定义方块实体所在的位置为原点,在这个原点上的坐标(1.0, 1.0, 1.0)的位置上使用resource_pack/effects下的资源创建序列帧特效 id2 = comp.CreateFrameEffectForBlockEntity(pos, "effects/sfxs/snow.json", "my_frame2", (1.0, 1.0, 1.0)) ``` ## CreateParticleEffectForBlockEntity 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 在自定义方块实体上创建粒子特效,创建后该接口返回粒子特效的Id,利用该Id可以使用特效/粒子中的接口对该粒子特效进行播放、设置位置、大小等操作。与实体的粒子特效创建方式类似。若自定义方块实体已存在键值名称相同的特效,则不会创建新的特效,接口返回已有的特效Id。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | path | str | 特效资源路径,需要加上后缀名(一般是json)。路径为resource_pack/effects文件下的粒子特效json文件路径,路径名以"effects/"开头。 | | particleKeyName | str | 该粒子特效的自定义键值名称,创建粒子特效后可以使用该键值名称通过GetParticleEffectIdInBlockEntity接口来获取粒子特效的id。 | | effectPos | tuple(float,float,float) | 特效相对自定义方块实体的位置,即以自定方块实体所在的位置为原点的坐标系下的坐标位置。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | int或None | 创建成功则返回粒子特效的Id,创建失败则返回None | - 示例 ```python import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 以自定义方块实体所在的位置为原点,在这个原点上的坐标(1.0, 1.0, 1.0)的位置上创建粒子特效 id = comp.CreateParticleEffectForBlockEntity(pos, "effects/fire.json", "my_particle1", (1.0, 1.0, 1.0)) ``` ## ExecuteCommandBlock 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 执行一次命令方块 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否执行成功 | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.ExecuteCommandBlock((x, y, z), 0) ``` ## GetBlockEntityData 服务端客户端 ### 服务端接口 method in mod.server.component.blockEntityExDataCompServer.BlockEntityExDataCompServer - 描述 用于获取可操作某个自定义方块实体数据的对象,操作方式与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所能表示的最大范围,将无法成功存储。建议将此类数值转为字符串进行存储。 - 示例 ```python 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'] ``` method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer - 描述 用于获取方块(包括自定义方块)的数据,如需修改,请使用setblockentitydata接口 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | dimension | int | 维度 | | pos | tuple(int,int,int) | 方块所在位置 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | dict或None | 方块实体内数据的对象 | - 备注 - 随着版本更迭,方块中包含的数据结构可能被微软团队调整,并且不会公告,使用该接口的开发者需注意版本更新时做好测试和兼容。数据编码为UTF-8 适用于:[方块实体](https://minecraft-zh.gamepedia.com/%E6%96%B9%E5%9D%97%E5%AE%9E%E4%BD%93) 特殊情况:末影箱的物品信息不能通过该接口获取 - 需要注意的是,由于该接口获取的是包含原版nbttag及自定义方块的数据,为了兼容原版nbttag,Python对象在获取出来时,会做一定的转换,如: None -> {"__type__" : 1, "__value__": 2} 因此,若不希望有类似转换,并且只需要获取自定义方块实体的数据, 请使用CreateBlockEntityData里的GetBlockEntityData接口 - 示例 ```python import mod.server.extraServerApi as serverApi blockEntitycomp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId) blockEntityData = blockEntitycomp.GetBlockEntityData(0, (4, 3, 2)) ``` ### 客户端接口 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 用于获取客户端当前维度中方块(包括自定义方块)的数据,数据只读不可写,无法获取箱子内的物品信息。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | dict或None | 方块实体内数据的对象 | - 备注 - 随着版本更迭,方块中包含的数据结构可能被微软团队调整,并且不会公告,使用该接口的开发者需注意版本更新时做好测试和兼容。数据编码为UTF-8 适用于:[方块实体](https://minecraft-zh.gamepedia.com/%E6%96%B9%E5%9D%97%E5%AE%9E%E4%BD%93) 特殊情况:末影箱的物品信息不能通过该接口获取 - 需要注意的是,由于该接口获取的是包含原版nbttag及自定义方块的数据,为了兼容原版nbttag,Python对象在获取出来时,会做一定的转换,如: None -> {"__type__" : 1, "__value__": 2} 因此,若不希望有类似转换,并且只需要获取自定义方块实体的数据, 请使用CreateBlockEntityData里的GetBlockEntityData接口 - 示例 ```python import mod.client.extraClientApi as clientApi blockEntitycomp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) blockEntityData = blockEntitycomp.GetBlockEntityData((4, 3, 2)) ``` ## GetBlockEntityMolangValue 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 获取自定义方块实体的Molang变量的值。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | variableName | str | molang变量的名称,以"variable."开头,并且不能包含超过两个"."。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | float | 该molang变量的值,如该变量不存在,则返回None | - 示例 ```python import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) comp.GetBlockEntityMolangValue(pos, "query.mod.idle") ``` ## GetBlockTileEntityCustomData 服务端 method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer - 描述 读取指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 绑定TileEntity的特殊方块的位置坐标 | | key | str | 自定义key | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | any | 设定的value值,假如对应的数据不存在,则会返回None | - 备注 - 如果dimensionId不传或传入负值,该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId) pos = (-1, 4, 34) dimensionId = 0 key = "owner" val = comp.GetBlockTileEntityCustomData(pos, key, dimensionId) print "GetBlockTileEntityCustomData pos=%s key=%s value=%s" % (str(pos), key, val) ``` ## GetBlockTileEntityWholeCustomData 服务端 method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer - 描述 读取指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据字典。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 绑定TileEntity的特殊方块的位置坐标 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | dict或None | TileEntity自定义存储数据字典,假如没有任何额外存储数据,那么返回None或者空字典 | - 备注 - 如果dimensionId不传或传入负值,该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId) pos = (-1, 4, 34) dimensionId = 0 data = comp.GetBlockTileEntityWholeCustomData(pos, dimensionId) 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)) ``` ## GetCommandBlock 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 获取命令方块的设置内容 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | dict | 命令方块的设置内容,详见备注 | - 备注 - 返回值具体如下: | 键值 | 类型 | 内容 | | ----------------| -------------| -------------| | "cmd" | str | 命令输入内容 | | "name" | str | 悬浮文本内容 | | "mode" | int | 命令方块类型,详见枚举[命令方块类型](../../枚举值/CommandBlockType.md) | | "isConditional" | int | 触发条件,详见枚举[命令方块条件类型](../../枚举值/ConditionType.md) | | "redstoneMode" | int | 红石模式,详见枚举[命令方块红石类型](../../枚举值/RedstoneModeType.md) | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.GetCommandBlock((x, y, z), 0) ``` ## GetFrameEffectIdInBlockEntity 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 获取在自定义方块实体中已创建的指定序列帧特效的Id,已创建的特效分为两种:一是通过resource_pack/entity/下的实体json文件中使用“netease_frame_effects”所定义的特效;二是使用接口CreateFrameEffectForBlockEntity创建的特效。 返回的特效Id可以使用特效/序列帧中的接口对该序列帧特效进行播放、设置位置、大小等操作。与实体的序列帧特效创建方式类似。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | frameKeyName | str | 序列帧特效的自定义键值名称,即:netease_frame_effects: { "keyName" : {"path“:“textures/sfxs/xxx.json”, "pos": [1.0, 1.0, 1.0f]} } 中的"keyName",又或者是通过CreateFrameEffectForBlockEntity创建特效时该接口中填写的frameKeyName参数。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | int或None | 返回序列帧特效的Id,该键值不存在则返回None | - 示例 ```python # 假设自定义方块实体定义了以下特效 # "minecraft:client_entity": { # ... # "netease_frame_effects":{ # "my_frame1" : { "path" : "textures/sfxs/snow.json", "pos": [1.0 , 1.0 , 1.0]}, # ... # } # } import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 获取名为"my_frame1"这个预设特效的特效Id id = comp.GetFrameEffectIdInBlockEntity(pos, "my_frame1") ``` ## GetFrameItem 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 获取物品展示框的物品 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | dict | 物品信息字典,获取失败或没有物品则返回None | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.GetFrameItem((x, y, z), 0) ``` ## GetFrameItemDropChange 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 获取物品展示框里物品的掉落几率 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | float | 掉落几率,取值范围为[0,1],获取失败返回-1 | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.GetFrameItemDropChange((x, y, z), 0) ``` ## GetFrameRotation 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 获取物品展示框里物品的顺时针旋转角度 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | float | 旋转角度,取值范围[0~360],获取失败返回-1 | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.GetFrameRotation((x, y, z), 0) ``` ## GetHopperSpeed 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 获取漏斗运输一个物品所需的时间(单位:刻) - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | int | 运输一个物品所需的时间(单位:刻) | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.GetHopperSpeed((x, y, z), 0) ``` ## GetParticleEffectIdInBlockEntity 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 获取在自定义方块实体中已创建的指定粒子特效的Id,已创建的特效分为两种:一是通过resource_pack/entity/下的实体json文件中使用“netease_particle_effects”所定义的特效;二是使用接口CreateParticleEffectForBlockEntity创建的特效。 返回的特效Id可以使用特效/粒子中的接口对该粒子特效进行播放、设置位置、大小等操作。与实体的粒子特效创建方式类似。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | particleKeyName | str | 粒子特效的自定义键值名称,即:netease_particle_effects: { "keyName" : {"path“:“effects/xxx.json”, "pos": [1.0, 1.0, 1.0f]} } 中的"keyName",又或者是通过CreateParticleEffectForBlockEntity创建特效时该接口中填写的particleKeyName参数。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | int或None | 返回粒子特效的Id,该键值不存在则返回None | - 示例 ```python # 需要自定义方块实体的entity.json文件具有如下定义: # "minecraft:client_entity": { # ... # "netease_particle_effects":{ # "my_particle1" : { "path" : "effects/fire.json", "pos": [1.0 , 1.0 , 1.0]}, # ... # } # } import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 获取名为"my_particle1"这个预设特效的特效Id id = comp.GetParticleEffectIdInBlockEntity(pos, "my_particle1") ``` ## RemoveFrameEffectInBlockEntity 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 移除在自定义方块实体上创建的序列帧特效。移除后的特效Id将会失效。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | frameKeyName | str | 该序列帧特效的自定义键值名称。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 移除成功返回True, 该键值不存在则返回False | - 示例 ```python import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 移除键值名为"my_frame1"的特效 comp.RemoveFrameEffectInBlockEntity(pos, "my_frame1") ``` ## RemoveParticleEffectInBlockEntity 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 移除在自定义方块实体上创建的粒子特效。移除后的特效Id将会失效。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | particleKeyName | str | 该粒子特效的自定义键值名称。 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 移除成功返回True, 该键值不存在则返回False | - 示例 ```python import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 移除键值名为"my_particle1"的特效 comp.RemoveParticleEffectInBlockEntity(pos, "my_particle1") ``` ## SetBlockEntityData 服务端 method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer - 描述 用于设置方块(包括自定义方块)的数据 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | dimension | int | 维度 | | pos | tuple(int,int,int) | 方块所在位置 | | nbtData | dict | 方块实体内数据的对象,可结合GetBlockEntityData使用,获取后修改部分数据后再进行设置。如果传空dict,大部分数据不会被改变,小部分数据会被设置为默认值 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 设置是否成功 | - 备注 - 随着版本更迭,方块中包含的数据结构可能被微软团队调整,并且不会公告,使用该接口的开发者需注意版本更新时做好测试和兼容。数据编码为UTF-8 适用于:[方块实体](https://minecraft-zh.gamepedia.com/%E6%96%B9%E5%9D%97%E5%AE%9E%E4%BD%93) 特殊情况:末影箱的物品信息不能通过该接口设置 注意:面向、状态等数据修改只会影响方块实体的数据,不会影响方块的渲染表现 切记:如果忽略游戏原有规则随意修改nbt数据,可能会导致bug或游戏崩溃 - 示例 ```python import mod.server.extraServerApi as serverApi blockEntitycomp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId) blockEntityData = blockEntitycomp.GetBlockEntityData(0, (4, 3, 2)) if blockEntityData: blockEntityData["FrontText"]["Text"]["__value__"] = "test" blockEntitycomp.SetBlockEntityData(0, (4, 3, 2), blockEntityData) ``` ## SetBlockEntityMolangValue 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 设置自定义方块实体的Molang变量,与实体的molang变量作用相同。目前主要用于控制自定义实体的动画状态转变。Molang变量的定义方式与原版实体的Molang变量定义方法相同。详细可参考自定义方块实体动画的教学文档。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | variableName | str | molang变量的名称,以"variable."开头,并且不能包含超过两个"."。 | | value | float | molang变量的值 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否设置成功 | - 备注 - 注意,自定义方块实体的Molang变量与微软原版的Molang变量定义和使用方式相同, 因此不需要调用实体/molang/中的Register接口及UnRegister接口进行注册和反注册,只需在entity.json中进行定义和初始化即可,这点与微软原版实体的使用方法相同,可参考微软原版实体的entity.json文件。 - 示例 ```python # 需要自定义方块实体的entity.json文件具有如下定义: # "minecraft:client_entity": { # ... # "scripts":{ # // 注册"variable.mod_is_moving"这个molang变量并将其值初始化为1.0 # "initialize": [ "variable.mod_is_moving = 1.0;" ], # ... # } # } import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) # 设置molang变量的值来转变动画状态 comp.SetBlockEntityMolangValue(pos, "variable.mod_is_moving", 2.0) ``` ## SetBlockTileEntityCustomData 服务端 method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer - 描述 设置指定位置的特殊方块(箱子、头颅、熔炉、花盆等)绑定的TileEntity内存储的自定义数据。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 绑定TileEntity的特殊方块的位置坐标 | | key | str | 自定义key | | value | any | 支持python基本数据类型,tuple不支持 | | dimensionId | int | 方块所在维度 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 设置结果,假如对应位置的block不存在或者没有绑定的TileEntity,就会设置失败 | - 备注 - 如果dimensionId不传或传入负值,该接口使用创建组件时的playerId来定位具体维度,且仅可获取玩家附近的方块,若方块位置离玩家太远,可能无法获取到正确的返回信息。 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockInfo(playerId) pos = (-1, 4, 34) dimensionId = 0 suc = comp.SetBlockTileEntityCustomData(pos, "owner", "Jack", dimensionId) print "SetBlockTileEntityCustomData pos=%s suc=%s" % (str(pos), suc) ``` ## SetCommandBlock 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 对命令方块进行内容设置 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | | cmd | str | 命令输入 | | name | str | 悬浮文本 | | mode | int | 方块类型,详见枚举[命令方块类型](../../枚举值/CommandBlockType.md) | | isConditional | int | 条件,详见枚举[命令方块条件类型](../../枚举值/ConditionType.md) | | redstoneMode | int | 红石模式,详见枚举[命令方块红石类型](../../枚举值/RedstoneModeType.md) | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否设置成功 | - 备注 - 如果使用该接口时,有玩家处于命令方块的操作界面会存在问题, (1)如果玩家修改了命令方块内容关闭ui时,客户端会向服务端发包,届时可能出现接口设置被玩家设置覆盖的情况。 (2)如果没做修改,关闭ui会导致客户端命令方块外观不会按照服务端的修改进行改变。 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) cmd = "give @p green_candle" name = "hello world" mode = serverApi.GetMinecraftEnum().CommandBlockType.CYCLE isConditional = serverApi.GetMinecraftEnum().ConditionType.UNCONDITIONAL redstoneMode = serverApi.GetMinecraftEnum().RedstoneModeType.KEEP_ON print comp.SetCommandBlock((x, y, z), 0, cmd, name, mode, isConditional, redstoneMode) ``` ## SetEnableBlockEntityAnimations 客户端 method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient - 描述 设置是否开启自定义方块实体的动画效果,开启之后,自定义实体方块会按照实体文件中animation_controller所定义的动画状态机进行动画播放。关闭之后,则会停止所有动画播放。 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块所在位置 | | enable | bool | 是否开启自定义方块实体的动画播放 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 设置是否成功 | - 示例 ```python import mod.client.extraClientApi as clientApi comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId) comp.SetEnableBlockEntityAnimations(pos, True) ``` ## SetFrameItem 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 设置物品展示框的物品 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | | itemDict | dict | 详见物品信息字典 | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否设置成功 | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) itemDict = { 'itemName': 'minecraft:bow', 'count': 15, 'enchantData': [(serverApi.GetMinecraftEnum().EnchantType.BowDamage, 1),], 'auxValue': 0, 'customTips':'§c new item §r', 'extraId': 'abc', 'userData': { }, } print comp.SetFrameItem((x, y, z), 0, itemDict) ``` ## SetFrameItemDropChange 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 设置点击物品展示框时生成掉落的几率,默认为1 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | | change | float | 掉落几率,取值范围为[0,1] | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否设置成功 | - 备注 - 展示框只在生存模式下会生成掉落物,该设置只有在展示框内有物品的时候才会存档 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.SetFrameItemDropChange((x, y, z), 0, 0) ``` ## SetFrameRotation 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 设置物品展示框里物品的顺时针旋转角度 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | | rot | float | 旋转角度,取值范围[0~360] | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否设置成功 | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.SetFrameRotation((x, y, z), 0, 90) ``` ## SetHopperSpeed 服务端 method in mod.server.component.blockEntityCompServer.BlockEntityCompServer - 描述 设置漏斗运输一个物品所需的时间(单位:红石刻,1秒10刻),默认值为4刻,该设置存档 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | pos | tuple(int,int,int) | 方块位置 | | dimensionId | int | 方块所在维度 | | moveTime | int | 运输一个物品所需的时间(单位:刻) | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | bool | 是否设置成功 | - 备注 - 该设置会决定漏斗吸取物品和推出物品的速度,即每过一个moveTime,漏斗会从其上方吸取一个物品,同时向连接的容器输送一个物品。 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateBlockEntity(levelId) print comp.SetHopperSpeed((x, y, z), 0, 1) ```