Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/世界/方块组合.md
2025-03-17 13:24:39 +08:00

356 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebarDepth: 1
---
# 方块组合
## CreateMicroBlockResStr
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockCompServer.BlockCompServer
- 描述
生成微缩方块资源Json字符串
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 微缩方块唯一标识 |
| start | tuple(int,int,int) | 微缩起始坐标 |
| end | tuple(int,int,int) | 微缩结束坐标 |
| colorMap | dict | 默认为None微缩方块颜色对应表 |
| isMerge | bool | 默认为False是否合并同类型方块 |
| icon | str | 默认为空字符串,微缩方块图标,需要定义在 terrain_texture.json 中 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 生成的微缩方块的资源字符串 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlock(levelId)
result = comp.CreateMicroBlockResStr("x", (12, 60, 12), (26, 76, 26), colorMap={'minecraft:grass': [12, 22, 123, 255]}, isMerge=True, icon="micro_block_datiangou")
with open("micro_block_x.json", "w+") as f:
f.write(result)
#该例子中,方块将以 (12 60 12) 为起点,以 (26 76 26) 为终点进行微缩,最终微缩方块里所有草方块的颜色为 rgba(12,22,123,255),实际显示颜色会依据环境光照微调,物品栏里的图标为 terrain_texture.json 里 micro_block_datiangou 对应的图片。
```
## GetBlankBlockPalette
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.blockCompServer.BlockCompServer
- 描述
获取一个空白的方块调色板。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| BlockPaletteComponent | 返回生成的方块调色板实例如获取失败则返回None |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlock(levelId)
blankPalette = comp.GetBlankBlockPalette()
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.blockCompClient.BlockCompClient
- 描述
获取一个空白的方块调色板。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| BlockPaletteComponent | 返回生成的方块调色板实例如获取失败则返回None |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlock(levelId)
blankPalette = comp.GetBlankBlockPalette()
```
## GetBlockPaletteBetweenPos
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.blockCompServer.BlockCompServer
- 描述
根据输入的两个方块位置创建并获取一个方块调色板,方块调色板用于描述和记录世界中的多个方块的组合。这个方块调色板包含了这两个位置之间的所有方块及其相对位置。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 方块所在维度 |
| startBlockPos | tuple(int,int,int) | 起始方块位置 |
| endBlockPos | tuple(int,int,int) | 终点方块位置 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| BlockPaletteComponent | 返回生成的方块调色板实例如创建失败则返回None |
- 备注
- 对于床方块,方块调色板获取床方块时,只会添加床头的方块,床尾方块会进行忽略。对于门方块,则只会添加门的下半部分的方块,门的上半部分会进行忽略。
- 示例
```python
import mod.server.extraServerApi as serverApi
# playerId可以为None也可以传入玩家的id。当传入的dimensionId为0或正值时依赖dimensionId来获取区域当传入的dimensionId为负值时依赖传入的playerId来获取区域。
comp = serverApi.GetEngineCompFactory().CreateBlock(entityId)
palette = comp.GetBlockPaletteBetweenPos(0, (200,64,200),(201,65,202))
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.blockCompClient.BlockCompClient
- 描述
根据输入的两个位置创建并获取一个方块调色板,该接口会搜索这两个位置之间的所有方块创建方块调色板,方块调色板用于描述和记录世界中的多个方块的组合。这个方块调色板包含了这两个位置之间的所有方块及其相对位置。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| startPos | tuple(int,int,int) | 起始位置 |
| endPos | tuple(int,int,int) | 终点位置 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| BlockPaletteComponent | 返回生成的方块调色板实例如创建失败则返回None |
- 备注
- 对于床方块,方块调色板获取床方块时,只会添加床头的方块,床尾方块会进行忽略。对于门方块,则只会添加门的下半部分的方块,门的上半部分会进行忽略。
- 需要等区域内的方块完全加载才能正确获取调色板
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlock(levelId)
palette = comp.GetBlockPaletteBetweenPos((200,64,200),(201,65,202))
```
## GetBlockPaletteFromPosList
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.blockCompServer.BlockCompServer
- 描述
根据输入的方块位置列表创建并获取一个方块调色板,方块调色板用于描述和记录世界中的多个方块的组合。创建的方块调色板包含了这个位置列表中的所有方块及其相对位置。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 方块所在维度 |
| posList | list(tuple(int,int,int)) | 方块位置列表 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| BlockPaletteComponent | 返回生成的方块调色板实例如创建失败则返回None |
- 备注
- 对于床方块,方块调色板获取床方块时,只会添加床头的方块,床尾方块会进行忽略。对于门方块,则只会添加门的下半部分的方块,门的上半部分会进行忽略。
- 示例
```python
import mod.server.extraServerApi as serverApi
# playerId可以为None也可以传入玩家的id。当传入的dimensionId为0或正值时依赖dimensionId来获取区域当传入的dimensionId为负值时依赖传入的playerId来获取区域。
comp = serverApi.GetEngineCompFactory().CreateBlock(entityId)
palette = comp.GetBlockPaletteFromPosList(0,
[(200,64,200),
(201,64,200)
(202,64,200)
])
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.blockCompClient.BlockCompClient
- 描述
根据输入的方块位置列表创建并获取一个方块调色板,方块调色板用于描述和记录世界中的多个方块的组合。创建的方块调色板包含了这个位置列表中的所有方块及其相对位置。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| posList | list(tuple(int,int,int)) | 方块位置列表 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| BlockPaletteComponent | 返回生成的方块调色板实例如创建失败则返回None |
- 备注
- 对于床方块,方块调色板获取床方块时,只会添加床头的方块,床尾方块会进行忽略。对于门方块,则只会添加门的下半部分的方块,门的上半部分会进行忽略。
- 需要等列表内的方块完全加载才能正确获取调色板
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlock(levelId)
palette = comp.GetBlockPaletteFromPosList([
(200,64,200),
(201,64,200)
(202,64,200)
])
```
## RegisterBlockPatterns
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockCompServer.BlockCompServer
- 描述
注册特殊方块组合
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pattern | list(str) | 方块组合位置 |
| defines | dict | 方块组合类型 |
| result_actor_name | str | 合成结果 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置结果 |
- 备注
- 注意该pattern不限定方向只要能在任一平面上组合成功就能合成对应的实体。
- 如示例代码所示,不需要放方块的位置需要显式定义为空气方块
- 当引擎中已注册过相同的pattern和defines时该接口不会更新result_actor_name并返回False
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlock(levelId)
pattern = [
'A#A',
'XXX',
'AXA'
]
defines ={
'#': 'minecraft:gold_block',
'X': 'minecraft:iron_block',
'A': 'minecraft:air',
}
comp.RegisterBlockPatterns(pattern,defines,'minecraft:chicken')
#该例子左中右下放铁块,上面放金块,会生成一只鸡
```
## SetBlockByBlockPalette
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockCompServer.BlockCompServer
- 描述
根据输入的方块调色板内容,将调色板内记录的所有方块设置为实际的方块。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockPalette | BlockPaletteComponent | 方块调色板由GetBlockPaletteBetweenPos以及GetBlockPaletteFromPosList接口获取 |
| dimensionId | int | 方块所在维度。如果输入的数值小于0则使用entityId获取设置方块的区块。 |
| pos | tuple(int,int,int) | 设置方块的原点位置,将以这个位置作为原点设置方块 |
| rotation | int | 方块组合体的旋转旋转方向为绕设置方块的原点位置所在的y轴进行旋转旋转角度仅支持-270,-180,-90,0,90,180,270。如果传入的不是这些值将取其中最接近输入值的数值。 |
| conflictMode | int | 冲突模式枚举可选参数默认为0。在生成过程中遇到生成的位置有其他方块的情况时那么将会根据冲突模式来进行处理。可以输入的值为:0,1,2, 分别代表: 0: 替换地图中的方块1: 跳过这个方块2: 放弃之后的生成过程。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 生成过程是否成功无法完成整个生成过程返回False完成整个生成过程则返回True。如果冲突模式为2时遇到冲突方块时放弃之后的生成过程这时候接口也会返回False。 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlock(entityId)
palette = comp.GetBlockPaletteBetweenPos(0, (200,64,200),(201,65,202))
# 将方块以(205,64,200)为原点设置palette中的方块旋转90度冲突模式为0即替代地图中的方块
comp.SetBlockByBlockPalette(palette, 0, (205,64,200),90,0)
```