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

689 lines
18 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
---
# 实体管理
## CreateEngineEntityByTypeStr
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.system.serverSystem.ServerSystem
- 描述
创建指定identifier的实体
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| engineTypeStr | str | 实体identifier例如'minecraft:husk' |
| pos | tuple(float,float,float) | 生成坐标 |
| rot | tuple(float,float) | 生物面向 |
| dimensionId | int | 生成的维度默认值为00为主世界1为地狱2为末地 |
| isNpc | bool | 是否为npc默认值为False。npc不会移动、转向、存盘。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str或None | 实体Id或者None |
- 备注
- 在未加载的chunk无法创建
生成村民请使用"minecraft:villager_v2"
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class MyServerSystem(ServerSystem):
def createMob(self):
# 在主世界(050)的位置创建一个朝向为(0, 0)的尸壳
entityId = self.CreateEngineEntityByTypeStr('minecraft:husk', (0, 5, 0), (0, 0), 0)
```
## CreateEngineItemEntity
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.system.serverSystem.ServerSystem
- 描述
用于创建物品实体即掉落物返回物品实体的entityId
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| itemDict | dict | <a href="../../../../mcguide/20-玩法开发/10-基本概念/1-我的世界基础概念.html#物品信息字典#物品信息字典">物品信息字典</a> |
| dimensionId | int | 设置dimension默认为主世界 |
| pos | tuple(float,float,float) | 生成坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str或None | 实体Id或者None |
- 示例
```python
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': { 'color': { '__type__':8, '__value__':'gray'} },
}
itemEntityId = self.CreateEngineItemEntity(itemDict, 0, (0, 5, 0))
```
## CreateExperienceOrb
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.expCompServer.ExpComponentServer
- 描述
创建专属经验球
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| exp | int | 经验球经验 |
| position | tuple(float,float,float) | 创建的位置 |
| isSpecial | bool | 是否专属经验球 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 设置经验球经验entityId是人的entityId。专属的经验球只有entityId的人才能拾取
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateExp(entityId)
comp.CreateExperienceOrb(25,(10,10,10),False)
```
## CreateProjectileEntity
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.projectileCompServer.ProjectileComponentServer
- 描述
创建抛射物(直接发射)
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| spawnerId | str | 创建者Id |
| entityIdentifier | str | 创建抛射物的identifier如minecraft:snowball |
| param | dict | 默认为None详细说明请见备注 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| 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 | 对创建者是否造成伤害,默认不造成伤害 |
- 示例
```python
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)
```
## DestroyEntity
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.system.serverSystem.ServerSystem
- 描述
销毁实体
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 销毁的实体ID |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否销毁成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls()
class FpsServerSystem(ServerSystem):
def testDestroyEntity(self, entityId):
self.DestroyEntity(entityId)
```
## GetDroppedItem
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.itemCompServer.ItemCompServer
- 描述
获取掉落物的物品信息
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| itemEntityId | str | 掉落物的entityId |
| getUserData | bool | 是否获取userData默认为False |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| dict | 信息 |
- 备注
- 如果掉落物实体不存在返回值为None
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateItem(levelId)
comp.GetDroppedItem(entityId)
```
## GetEngineActor
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.extraServerApi
- 描述
获取所有实体(不包含玩家)。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| dict | 当前地图中的所有实体信息key实体idvalue实体dict |
- 备注
- 实体信息字典 entityDict
| 关键字 | 数据类型 | 说明 |
| ----------| --------------------- | ---------|
| dimensionId | int | 维度id |
| identifier | str | 实体identifier |
- 示例
```python
import mod.server.extraServerApi as serverApi
entityDicts = serverApi.GetEngineActor()
```
## GetLocalPlayerId
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获取本地玩家的id
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 客户端玩家Id |
- 示例
```python
import mod.client.extraClientApi as clientApi
localId = clientApi.GetLocalPlayerId()
```
## GetPlayerList
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.extraServerApi
- 描述
获取level中所有玩家的id列表
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 返回玩家id列表 |
- 备注
- 由于引擎中的玩家id是无序存储的所以该接口返回列表的先后顺序没有实际意义仅为在多平台下表现一致。
- 示例
```python
import mod.server.extraServerApi as serverApi
print serverApi.GetPlayerList()
```
## HasEntity
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.gameCompClient.GameComponentClient
- 描述
判断 entity 是否存在
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 0表示不存在1表示存在 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
exist = comp.HasEntity(entityId)
```
## IsEntityAlive
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
判断生物实体是否存活或非生物实体是否存在
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | false表示生物实体已死亡或非生物实体已销毁true表示生物实体存活或非生物实体存在 |
- 备注
- 注意如果检测的实体所在的区块被卸载则该接口返回False。因此需要注意实体所在的区块是否被加载。
- 区块卸载:游戏只会加载玩家周围的区块,玩家移动到别的区域时,原来所在区域的区块会被卸载,参考[区块介绍](https://minecraft-zh.gamepedia.com/%E5%8C%BA%E5%9D%97)
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
alive = comp.IsEntityAlive(entityId)
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.gameCompClient.GameComponentClient
- 描述
判断生物实体是否存活或非生物实体是否存在
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | false表示生物实体已死亡或非生物实体已销毁true表示生物实体存活或非生物实体存在 |
- 备注
- 注意如果检测的实体所在的区块被卸载则该接口返回False。因此需要注意实体所在的区块是否被加载。
- 区块卸载:游戏只会加载玩家周围的区块,玩家移动到别的区域时,原来所在区域的区块会被卸载,参考[区块介绍](https://minecraft-zh.gamepedia.com/%E5%8C%BA%E5%9D%97)
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
alive = comp.IsEntityAlive(entityId)
```
## KillEntity
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.gameCompServer.GameComponentServer
- 描述
杀死某个Entity
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 要杀死的目标的entityId |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否杀死成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
comp.KillEntity(entityId)
```
## SpawnItemToLevel
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.itemCompServer.ItemCompServer
- 描述
生成物品掉落物如果需要获取物品的entityId可以调用服务端系统接口CreateEngineItemEntity
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| itemDict | dict | <a href="../../../../mcguide/20-玩法开发/10-基本概念/1-我的世界基础概念.html#物品信息字典#物品信息字典">物品信息字典</a> |
| dimensionId | int | 设置dimension |
| pos | tuple(float,float,float) | 生成位置 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置结果 |
- 示例
```python
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))
```
## SpawnLootTable
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.actorLootCompServer.ActorLootComponentServer
- 描述
使用生物类型模拟一次随机掉落生成的物品与json定义的概率有关
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(int,int,int) | 掉落位置 |
| identifier | str | 实体identifier如minecraft:guardian |
| playerKillerId | str | 玩家杀手只能是玩家默认None |
| damageCauseEntityId | str | 伤害来源实体Id掉落与该实体手持物品的抢夺附魔等级有关默认None |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功生成掉落 |
- 备注
- 需要在对应的player实体附近生成否则会生成失败。对于某些特殊的生物如minecraft:sheep需要使用SpawnLootTableWithActor接口来模拟随机掉落。
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateActorLoot(playerId)
result = comp.SpawnLootTable((1, 4, 5), 'minecraft:guardian')
```
## SpawnLootTableWithActor
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.actorLootCompServer.ActorLootComponentServer
- 描述
使用生物实例模拟一次随机掉落生成的物品与json定义的概率有关
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(int,int,int) | 掉落位置 |
| entityId | str | 模拟生物的生物Id |
| playerKillerId | str | 玩家杀手只能是玩家默认None |
| damageCauseEntityId | str | 伤害来源实体Id掉落与该实体手持物品的抢夺附魔等级有关默认None |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功生成掉落 |
- 备注
- 需要在对应的player实体附近生成否则会生成失败
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateActorLoot(playerId)
result = comp.SpawnLootTableWithActor((1, 4, 5), '-335007449086')
```
## SpawnResources
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
产生方块随机掉落(该方法不适用于实体方块)
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 方块的identifier如minecraft:wool |
| pos | tuple(int,int,int) | 掉落位置 |
| aux | int | 方块的附加值 |
| probability | float | 掉落概率,范围为[0, 1]0为不掉落1为100%掉落 |
| bonusLootLevel | int | [时运等级](https://minecraft-zh.gamepedia.com/时运)默认为0 |
| dimensionId | int | 掉落方块的维度,默认值为-1传入非负值时用于获取产生方块掉落的维度否则将随机挑选一个存在玩家的维度产生掉落 |
| allowRandomness | bool | 是否允许随机采集默认为True如果为False掉落概率probability无效 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功 |
- 备注
- 时运等级[bonusLootLevel]只对部分方块生效
掉落概率[probability]对部分农作物树叶不生效
- 可在对应维度的常加载区块产生掉落
- 示例
```python
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)
```
## SpawnResourcesSilkTouched
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
模拟方块精准采集掉落
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 方块的identifier如minecraft:wool |
| pos | tuple(int,int,int) | 掉落位置 |
| aux | int | 方块的附加值 |
| dimensionId | int | 掉落方块的维度,默认值为-1传入非负值时用于获取产生方块掉落的维度否则将随机挑选一个存在玩家的维度产生掉落 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功 |
- 备注
- 如果指定方块不属于精准采集方块返回False
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
result = comp.SpawnResourcesSilkTouched('minecraft:gold_ore', (1,1,1), 7)
```