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

1427 lines
39 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
---
# 地图
## CanSee
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
判断起始对象是否可看见目标对象,基于对象的Head位置判断
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fromId | str | 起始对象ID |
| targetId | str | 目标对象ID |
| viewRange | float | 视野距离,默认值8.0 |
| onlySolid | bool | 只判断固体方块遮挡,默认True; False则液体方块也会遮挡 |
| angleX | float | 视野X轴角度,默认值180.0度 |
| angleY | float | 视野Y轴角度,默认值180.0度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否可见 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(entityId)
comp.CanSee(entityId,targetId,20.0,True,180.0,180.0)
```
## CheckBlockToPos
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
判断位置之间是否有方块
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fromPos | tuple(float,float,float) | 起始位置 |
| toPos | tuple(float,float,float) | 终止位置 |
| dimensionId | int | 位置所在维度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | result -1获取失败 0没有方块 1有方块 |
- 备注
- 支持判断对应维度的常加载区块内位置之间是否有方块
- 返回-1通常是由于传入维度不存在、传入错误参数、传入位置所在区块并未加载等
- 示例
```python
import mod.server.extraServerApi as serverApi
from mod_log import logger as logger
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
if comp.CheckBlockToPos((0, 0, 0), (1, 1, 1), 0):
logger.info("(0, 0, 0)与(1, 1, 1)之间有方块")
```
## CheckChunkState
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
判断指定位置的chunk是否加载完成
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | chunk所在维度 |
| pos | tuple(int,int,int) | 指定位置的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 加载是否完成 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.CheckChunkState(0, (0, 0, 0))
```
## CreateDimension
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
创建新的dimension
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 维度0/1/2维度是不需要创建的。创建大于20的维度需要在dimension_config.json中注册注意维度21是不可用的 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否创建成功 |
- 备注
- 建议在mod初始化时统一调用
- 与维度相关的接口(SetUseLocalTime,SetDimensionUseLocalWeather等)会影响出生点的生成如果要用主世界地形生成出生点需要在mod初始化的时候优先调用一次CreateDimension(0)
- 示例
```python
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.CreateDimension(3)
```
## CreateExplosion
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.explosionCompServer.ExplosionComponentServer
- 描述
用于生成爆炸
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(float,float,float) | 爆炸位置 |
| radius | int | 爆炸威力,具体含义可参考[wiki](https://minecraft-zh.gamepedia.com/%E7%88%86%E7%82%B8)对爆炸的解释 |
| fire | bool | 是否带火 |
| breaks | bool | 是否破坏方块 |
| sourceId | str | 爆炸伤害源的实体id |
| playerId | str | 爆炸创造的实体id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置结果 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExplosion(levelId)
comp.CreateExplosion((50,50,50),10,True,True,sourceId,playerId)
```
## DeleteAllArea
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
删除所有常加载区域
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 删除的区域数目错误时为None |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.DeleteAllArea()
```
## DeleteArea
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
删除一个常加载区域
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| key | str | 常加载区域的名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 删除是否成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.DeleteArea('Area0')
```
## DetectStructure
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.portalCompServer.PortalComponentServer
- 描述
检测自定义门的结构
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | None | 该参数未使用直接传入None即可 |
| pattern | list(str) | 传送门形状 |
| defines | dict | 传送门定义 |
| touchPos | list(tuple(int,int)) | 传送门可激活的位置相对参数pattern中定义的位置 |
| pos | tuple(int,int,int) | 使用物品坐标 |
| dimensionId | int | 传送门所在维度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(bool,tuple(int,int,int),tuple(int,int,int)) | 检测结果,传送门起始位置,方向 |
- 示例
```python
#传送门定义
defines = {
'#': 'minecraft:glowstone',
'*': 'minecraft:air'
}
#传送门形状
pattern = [
'####',
'#**#',
'#**#',
'####',
]
# 最下面中间的两个位置点击激活
touchPos =[(3,1),(3,2)]
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePortal(levelId)
ret = comp.DetectStructure(None, pattern, defines, touchPos, (12, 1, 5), 0)
if ret[0]:
logger.info('自定义传送门构建成功')
else:
logger.info('自定义传送门构建失败')
```
## GetAllAreaKeys
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取所有常加载区域名称列表
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 名称列表list |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.GetAllAreaKeys()
```
## GetBiomeName
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.biomeCompServer.BiomeCompServer
- 描述
获取某一位置所属的生物群系信息
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(int,int,int) | 指定位置 |
| dimId | int | 维度id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 该位置所属生物群系name |
- 备注
- 支持获取未加载区块的群系。但对于未加载的区块,将使用地形生成器来计算群系,而非存档内保存的群系。因此对于使用地图修改器修改过群系的地图,获取未加载区块的群系,结果可能与实际不符,建议确认区块加载完毕后再获取。
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBiome(levelId)
biomeName = comp.GetBiomeName((0, 80, 0), 0)
```
## GetBlockLightLevel
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
获取方块位置的光照等级
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(int,int,int) | 方块位置 |
| dimensionId | int | 方块所在维度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 光照等级 |
- 备注
- 仅能获取到已加载区块内方块位置的光照等级,支持获取对应维度的常加载区块内光照等级
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
lightlevel = comp.GetBlockLightLevel((x,y,z), 0)
```
## GetChunkEntites
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取指定位置的区块中全部的实体和玩家的ID列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度 |
| pos | tuple(int,int,int) | 指定位置的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None或list(str) | 实体和玩家的ID的列表当指定位置的区块不存在或尚未加载时返回None |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
entityList = comp.GetChunkEntites(0, (0, 0, 0))
print "GetChunkEntites entityList={}".format(entityList)
```
## GetChunkMaxPos
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取某区块最大点的坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| chunkPos | tuple(int,int) | 指定区块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None或tuple(int,int,int) | 该区块最大点的坐标 |
- 备注
- 当传入的chunkPos类型不是tuple或者长度不为2时返回值为None
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
maxPos = comp.GetChunkMaxPos((1, 3))
```
## GetChunkMinPos
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取某区块最小点的坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| chunkPos | tuple(int,int) | 指定区块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None或tuple(int,int,int) | 该区块最小点的坐标 |
- 备注
- 当传入的chunkPos类型不是tuple或者长度不为2时返回值为None
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
minPos = comp.GetChunkMinPos((1, 3))
```
## GetChunkMobNum
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取某区块中的生物数量(不包括玩家,但包括盔甲架)
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 区块所在维度 |
| chunkPos | tuple(int,int) | 指定区块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 该区块中的生物数量 |
- 备注
- 返回值为-1通常是由于该维度未加载、该区块未加载
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
mobNum = comp.GetChunkMobNum(0, (1, 3))
```
## GetChunkPosFromBlockPos
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
通过方块坐标获得该方块所在区块坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockPos | tuple(int,int,int) | 方块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None或tuple(int,int) | 该方块所在区块的坐标 |
- 备注
- 当传入的blockPos类型不是tuple或者长度不为3时返回值为None
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
chunkPos = comp.GetChunkPosFromBlockPos((90, 40, -4))
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.chunkSourceCompClient.ChunkSourceCompClient
- 描述
通过方块坐标获得该方块所在区块坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockPos | tuple(int,int,int) | 方块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None或tuple(int,int) | 该方块所在区块的坐标 |
- 备注
- 当传入的blockPos类型不是tuple或者长度不为3时返回值为None
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateChunkSource(LevelId)
chunkPos = comp.GetChunkPosFromBlockPos((90, 40, -4))
```
## GetCurrentDimension
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.gameCompClient.GameComponentClient
- 描述
获取客户端当前维度
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 维度id。客户端未登录完成或正在切维度时返回-1 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
dimId = comp.GetCurrentDimension()
```
## GetEntitiesAround
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
获取区域内的entity列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 某个entityId |
| radius | int | 正方体区域半径 |
| filters | dict | 过滤设置字典 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 返回entityId的list |
- 备注
- 过滤器在对区域内的所有实体进行过滤时会把每一个实体设置为other同时把entityId对应的实体设置为self。关于过滤器的详细说明用户可以查看基岩版wikihttps://bedrock.dev/zh/docs/stable/Entities#Filters
- 过滤器中"subject"表示过滤判断的实体类型,"subject"="self"表示对每个实体设置的self进行过滤判断,"subject"="other"表示对每个实体设置的other进行过滤判断
- 示例
```python
#利用过滤器获取玩家身边的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
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
获取区域内的某类型的entity列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 区域中心的entityId,如某个玩家的entityid |
| radius | int | 区域半径 |
| entityType | int | [EntityType枚举](../../枚举值/EntityType.md) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 返回entityId的list |
- 示例
```python
import mod.server.extraServerApi as serverApi
# 获取身边10格内的掉落物
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetEntitiesAroundByType(entityId, 10, serverApi.GetMinecraftEnum().EntityType.ItemEntity)
```
## GetEntitiesInSquareArea
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
获取区域内的entity列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | None | 该参数已废弃 |
| startPos | tuple(int,int,int) | 初始位置 |
| endPos | tuple(int,int,int) | 结束位置 |
| dimensionId | int | 区域所在维度,可获取对应维度的常加载区块内的实体列表 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 返回entityId的list |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.GetEntitiesInSquareArea(None, (0,0,0), (100,100,100), 0)
```
## GetEntityInArea
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.gameCompClient.GameComponentClient
- 描述
返回区域内的实体,可获取到区域范围内已加载的实体列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str或None | 实体Id |
| pos_a | tuple(int,int,int) | 起点 |
| pos_b | tuple(int,int,int) | 终点,终点应大于起点 |
| exceptEntity | bool | 返回结果中是否除去entityId, 默认为False传入entityId为None时exceptEntity无作用 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 区域范围内已加载的entityId列表 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
entities = comp.GetEntityInArea(entityId, (0,0,0), (1,2,3))
```
## GetLevelId
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.extraServerApi
- 描述
获取levelId。某些组件需要levelId创建可以用此接口获取levelId。其中level即为当前地图的游戏。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 当前地图的levelId |
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def ExtraDataTest(args):
extraDataComp = serverApi.GetEngineCompFactory().CreateExtraData(serverApi.GetLevelId())
extraDataComp.score = 100
```
### 客户端接口
<span id="c0"></span>
method in mod.client.extraClientApi
- 描述
获取levelId。某些组件需要levelId创建可以用此接口获取levelId。其中level即为当前地图的游戏。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 当前地图的levelId |
- 示例
```python
import mod.client.extraClientApi as clientApi
ClientSystem = clientApi.GetClientSystemCls()
class FpsClientSystem(ClientSystem):
def CameraCompTest(args):
cameraComp = clientApi.GetComponent(clientApi.GetLevelId(), 'Minecraft', 'camera')
cameraComp.fov = 60
```
## GetLoadedChunks
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取指定维度当前已经加载完毕的全部区块的坐标列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None或list(tuple(int,int)) | 区块坐标的列表(区块坐标为(x,z)当指定维度不存在或尚未创建时返回None |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
result = comp.GetLoadedChunks(0)
print "dimension {} has chunk {}".format(0, result)
```
## GetSpawnDimension
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
获取世界出生维度
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 维度id |
- 示例
```python
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
spawnDimension = gameComp.GetSpawnDimension()
```
## GetSpawnPosition
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
获取世界出生点坐标
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(int,int,int) | 出生点坐标 |
- 备注
- 返回的坐标不一定是精确的出生点坐标,也不一定是安全的出生点,玩家出生时会在该坐标附近随机选取一个满足出生条件的坐标。
- 未使用setworldspawn指令设置过出生点位置时返回坐标的y轴是32767
- 示例
```python
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
spawnPos = gameComp.GetSpawnPosition()
```
## IsChunkGenerated
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取某个区块是否生成过。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 区块所在维度 |
| chunkPos | tuple(int,int) | 指定区块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 该区块是否生成过 |
- 备注
- 玩家探索过以玩家为中心模拟距离在游戏的设置页面内为半径内的区块或者使用SetAddArea设置常加载区块附近的区块都是生成过的区块。这些区块会保存到存档里再次探索时会从存档读取不会重新生成。
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
# 获取主世界(10000,0,10000)坐标所在的区块是否生成过
result = comp.IsChunkGenerated(0, comp.GetChunkPosFromBlockPos((10000, 0, 10000)))
```
## IsSlimeChunk
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
获取某个区块是否史莱姆区块。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 区块所在维度 |
| chunkPos | tuple(int,int) | 指定区块的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 该区块是否史莱姆区块 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
result = comp.IsSlimeChunk(0, comp.GetChunkPosFromBlockPos((10000, 0, 10000)))
```
## LocateNeteaseFeatureRule
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.featureCompServer.FeatureCompServer
- 描述
与[/locate指令](https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4/locate)相似,用于定位<a href="../../../../mcguide/20-玩法开发/15-自定义游戏内容/4-自定义维度/4-自定义特征.html#特征规则feature-rules">网易自定义特征规则</a>
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| ruleName | str | 特征规则名称形式为namespace:featureRuleIdentifier如custombiomes:overworld_pumpkins_feature_rule |
| dimensionId | int | 查找维度,**要求该维度已加载** |
| pos | tuple(int,int,int) | 以该位置为中心来查找满足网易自定义特征规则分布条件的坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float)或None | 最近的满足网易自定义特征规则分布条件的坐标定位失败则返回None |
- 备注
- 定位失败通常是由于传入维度不存在、维度未加载、没有满足该自定义特征规则分布条件的坐标、目标坐标距离传入位置过远以该位置为中心半径100个区块内无法找到
- 若在feature rules中"conditions"内的"minecraft:biome_filter"中**填写了判断维度以外的过滤规则,将有概率无法定位到满足该自定义特征规则分布条件的坐标**。建议开发者在"distribution"的"iterations"中使用query.is_biome代替
- 定位原理是根据网易自定义特征规则分布条件寻找可能的位置,因此**有可能会定位到在PlaceNeteaseStructureFeatureEvent事件中被取消生成的结构位置**。开发者应注意甄别尽量避免对可能在PlaceNeteaseStructureFeatureEvent事件中被取消放置的结构对应特征规则文件调用定位函数
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
pos = comp.LocateNeteaseFeatureRule("custombiomes:overworld_pumpkins_feature_rule", 0, (0, 64, 0))
```
## LocateStructureFeature
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.featureCompServer.FeatureCompServer
- 描述
与[/locate指令](https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4/locate)相似,用于定位原版的部分结构,如海底神殿、末地城等。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| featureType | int | 原版的结构类型,[StructureFeatureType](../../枚举值/StructureFeatureType.md)枚举 |
| dimensionId | int | 结构所在维度,**要求该维度已加载** |
| pos | tuple(int,int,int) | 以该位置为中心来查找最近的结构 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float)或None | 最近的结构所在区块位置(x坐标,z坐标)y坐标不定若定位失败则返回None |
- 备注
- 定位失败通常是由于该维度不存在、该维度未加载、该维度中不存在该结构、该结构距离传入位置过远等
- 该接口返回值为对应结构所在区块的坐标,与结构实际生成位置可能相距一定距离
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateFeature(levelId)
pos = comp.LocateStructureFeature(serverApi.GetMinecraftEnum().StructureFeatureType.Village, 0, (0, 64, 0))
```
## MayPlace
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
判断方块是否可以放置
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 方块identifier如minecraft:wheat |
| blockPos | tuple(int,int,int) | 方块将要放置的坐标 |
| facing | int | 朝向,详见[Facing枚举](../../枚举值/Facing.md) |
| dimensionId | int | 维度默认为主世界0 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 方块是否可以放置 |
- 示例
```python
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)
```
## MayPlaceOn
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.itemCompServer.ItemCompServer
- 描述
判断物品是否可以放到指定的位置上
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 物品标识如minecraft:dye |
| auxValue | int | 物品的附加值 |
| blockPos | tuple(int,int,int) | 位置坐标 |
| facing | int | 朝向,详见[Facing枚举](../../枚举值/Facing.md) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否可以放置 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(playerId)
comp.MayPlaceOn("minecraft:dye", 3, (1,2,3), serverApi.GetMinecraftEnum().Facing.Up)
```
## MirrorDimension
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
复制不同dimension的地形
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fromId | int | 原dimensionId |
| toId | int | 目标dimensionId |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 仅复制源维度已经生成的区块信息到新的维度,对于未生成的源维度区块无法完全复制生成逻辑,可能采用部分新维度自己的信息。
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.MirrorDimension(0, 1)
```
## PlaceStructure
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
放置结构
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | None | 该参数已废弃 |
| pos | tuple(float,float,float) | 放置结构的位置 |
| structureName | str | 结构名称 |
| dimensionId | int | 希望放置结构的维度,可在对应维度的常加载区块放置结构,默认为-1 |
| rotation | int | 放置结构的旋转角度默认为0(只可旋转90180270度) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否放置成功True为放置成功False为放置失败 |
- 备注
- 放置时需要确保所放置的区块都已加载,否则会放置失败或者部分缺失
- 该接口是同步执行的,请勿在一帧内放置大量结构,会造成游戏卡顿
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.PlaceStructure(None, (100, 70, 100), "test:structureName", 0, 0)
```
## SetAddArea
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.chunkSourceComp.ChunkSourceCompServer
- 描述
设置区块的常加载
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| key | str | 常加载区域的名称 |
| dimensionId | int | 区块所在的维度 |
| minPos | tuple(int,int,int) | 加载区域的最小坐标 |
| maxPos | tuple(int,int,int) | 加载区域的最大坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- key必须唯一若添加区域时key已存在将添加失败。
- 该方式创建的常加载区域不会tick即实体方块实体随机刻都不会进行更新。若需要区域被tick请使用原版[tickingarea指令](https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4/tickingarea)。
- 将当前未加载的区块设置为常加载区块时,不会从存档加载生物。但如果是当前已加载的区块,则玩家远离区块后,区块内的实体会一直保持加载。
- 常加载区块内可以使用api创建实体、放置方块、放置结构、修改方块实体数据。
- 由于区块加载算法的特性不保证最小到最大坐标的区块完全加载并可用即CheckChunkState接口返回True建议将操作位置的四周外延80格的区域都设置为常加载例如需要在(0,5,0)的位置生成生物/放置方块,需要将(-80,0,-80)到(80,0,80)的区域设置为常加载。
- 通过本接口添加的区块不被tick时无法使用fill指令在区块内填充方块
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateChunkSource(levelId)
comp.SetAddArea('Area0', 0, (0,0,0), (60,0,60))
```
## SetMergeSpawnItemRadius
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
设置新生成的物品是否合堆
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| radius | int | 合堆检测半径范围可设置为0到5初始为0。若为0代表不合堆若大于0则地图中生成一个物品时会检测这个半径内是否有相同物品若有且未达到堆叠上限则不生成新物品而是使地图上该物品的数量增加。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | success True为设置成功False为设置失败 |
- 备注
- 该接口主要应用于优化会一次性大量生成掉落物品的场景,使用此方式后生成结果就是一堆物品,不会先生成多个物品再进行合堆检测,可大大减少掉落物品实体数量,大幅提升性能。
- 该接口不会影响游戏本身的每帧合堆检测逻辑,手中丢弃的物品不受上述合堆逻辑影响。
- 示例
```python
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
gameComp.SetMergeSpawnItemRadius(5)
```
## SetSpawnDimensionAndPosition
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
设置世界出生点维度与坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int或None | 维度id |
| pos | tuple(int,int,int)或None | 出生点坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功 |
- 备注
- 同时设置dimensionId与pos时出生点被设置在对应维度的对应坐标。
只设置dimensionId而pos为None时出生点设置为对应维度而坐标将通过[基岩版世界生成搜索](https://minecraft.fandom.com/zh/wiki/%E7%94%9F%E6%88%90#.E5.9F.BA.E5.B2.A9.E7.89.88.E4.B8.96.E7.95.8C.E7.94.9F.E6.88.90.E6.90.9C.E7.B4.A2)决定。
只设置pos而dimensionId为None则出生点设置为当前出生维度的对应坐标与setworldspawn指令相同。
- 将pos的y轴设置为65535表示出生到xz坐标轴的最高实心方块上。
- 当出生维度的类型是地狱和末地时,不会像主世界一样寻找一个安全的位置出生。
- 关于世界出生点与个人出生点的规则,详见[玩家的生成](https://minecraft.fandom.com/zh/wiki/%E7%94%9F%E6%88%90#.E7.8E.A9.E5.AE.B6.E7.9A.84.E7.94.9F.E6.88.90)
- 示例
```python
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
# 设置世界出生点到dm3维度的某个坐标
gameComp.SetSpawnDimensionAndPosition(3, (0, 60, 0))
```
## UpgradeMapDimensionVersion
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
提升指定地图维度的版本号,版本号不符的维度,地图存档信息将被废弃。使用后存档的地图版本均会同步提升至最新版本,假如希望使用此接口清理指定维度的地图存档,需要在保证该维度区块都没有被加载时调用。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度的数字ID0代表主世界 |
| version | int | 维度地图的版本号取值范围为1-999 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | success True为设置成功False为设置失败 |
- 备注
- 对于本地游戏来说由于引擎加载时机比mod早因此可能出现区块加载比mod加载更早的情况此时在初始化时使用该接口升级当前维度会出现失效的情况建议本地游戏中先将玩家移出需要升级的维度等区块卸载完成可以使用CheckChunkState判断玩家离开前位置后再升级该维度。
- 对于网络服游戏来说因为服务端加载mod总是比玩家登录要早因此可以在mod初始化时调用该接口升级指定维度。
- 示例
```python
import mod.server.extraServerApi as serverApi
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
success = gameComp.UpgradeMapDimensionVersion(0, 10)
```