45 KiB
sidebarDepth
| sidebarDepth |
|---|
| 1 |
行为
AddEntityAroundEntityMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
给实体(不含玩家)添加对实体环绕运动器
-
参数
参数名 数据类型说明 eID str 要环绕的某个实体的ID angularVelocity float 圆周运动的角速度(弧度/秒) axis tuple(float,float,float) 圆周运动的轴,决定了在哪个平面上做圆周运动,默认为(0, 1, 0) lockDir bool 是否在运动器生效时锁定实体的朝向,不锁定则实体的朝向会随着运动而改变,默认为False。 stopRad float 停止该运动器所需要的弧度,当stopRad为0时,该运动器会一直运行,默认为0 -
返回值
数据类型说明 int 运动器ID,添加失败时返回-1 -
备注
- 该接口不屏蔽生物本身的AI运动以及重力作用,当有AI运动发生时,最终的表现结果可能与预期有差异。
- 环绕运动器可叠加多个,且可与速度运动器互相叠加。
- 由于引擎中在加载的区块以外的实体时会停止一切活动,建议将实体的运动范围控制在玩家位置±100内。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
axis=(-1, 1, 1)
mID = motionComp.AddEntityAroundEntityMotion(eID, 1.0, axis, lockDir=False, stopRad=0)
AddEntityAroundPointMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
给实体(不含玩家)添加对点环绕运动器
-
参数
参数名 数据类型说明 center tuple(float,float,float) 要环绕的圆心点坐标 angularVelocity float 圆周运动的角速度(弧度/秒) axis tuple(float,float,float) 圆周运动的轴,决定了在哪个平面上做圆周运动,默认为(0, 1, 0) lockDir bool 是否在运动器生效时锁定实体的朝向,不锁定则实体的朝向会随着运动而改变,默认为False。 stopRad float 停止该运动器所需要的弧度,当stopRad为0时,该运动器会一直运行,默认为0 -
返回值
数据类型说明 int 运动器ID,添加失败时返回-1 -
备注
- 该接口不屏蔽生物本身的AI运动以及重力作用,当有AI运动发生时,最终的表现结果可能与预期有差异。
- 环绕运动器可叠加多个,且可与速度运动器互相叠加。
- 由于引擎中在加载的区块以外的实体时会停止一切活动,建议将实体的运动范围控制在玩家位置±100内。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
center = (0, 8, 0)
axis=(-1, 1, 1)
mID = motionComp.AddEntityAroundPointMotion(center, 1.0, axis, lockDir=False, stopRad=0)
AddEntityTrackMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
给实体(不含玩家)添加轨迹运动器
-
参数
参数名 数据类型说明 targetPos tuple(float,float,float) 轨迹终点 duraTime float 到达终点所需要的时间 startPos tuple(float,float,float) 轨迹起点,默认为None,表示以调用StartEntityMotion的位置作为起点。 relativeCoord bool 是否使用相对坐标设置起点和终点,默认为False。 isLoop bool 是否循环,若设为True,则实体会在起点和终点之间往复运动。 -
返回值
数据类型说明 int 运动器ID,添加失败时返回-1 -
备注
- 该接口不屏蔽生物本身的AI运动,并且生物在空中时会受到跌落伤害,当有AI运动发生时,最终的表现结果可能与预期有差异,建议将生物设置为NPC。
- 轨迹运动器不可叠加,仅能添加一个。
- 由于引擎中在加载的区块以外的实体时会停止一切活动,建议将运动范围控制在玩家位置±100内。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
target = (5, 0, 0)
mID = motionComp.AddEntityTrackMotion(target, 3.0, startPos=None, relativeCoord=True, isLoop=False)
AddEntityVelocityMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
给实体(不含玩家)添加速度运动器
-
参数
参数名 数据类型说明 velocity tuple(float,float,float) 速度,包含大小、方向 accelerate tuple(float,float,float) 加速度,包含大小、方向,默认为None,表示没有加速度 useVelocityDir bool 是否使用当前速度的方向作为此刻实体的朝向,默认为True -
返回值
数据类型说明 int 运动器ID,添加失败时返回-1 -
备注
- 该接口不屏蔽生物本身的AI运动以及重力作用,当有AI运动发生时,最终的表现结果可能与预期有差异。
- 速度运动器可叠加多个,且可与环绕运动器互相叠加。
- 由于引擎中在加载的区块以外的实体时会停止一切活动,建议将实体的运动范围控制在玩家位置±100内。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
velocity = (0, 0, 1)
accelerate = (0, 0, -1)
mID = motionComp.AddEntityVelocityMotion(velocity, accelerate, useVelocityDir=True)
GetAttackTarget
服务端
method in mod.server.component.actionCompServer.ActionCompServer
-
描述
获取仇恨目标
-
参数
无
-
返回值
数据类型说明 str 返回仇恨目标的实体id。如果传入的实体id所对应的实体没有仇恨目标,则返回-1。如果传入的实体id所对应的实体不存在,则返回None。 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.GetAttackTarget()
GetBlockControlAi
服务端
method in mod.server.component.controlAiCompServer.ControlAiCompServer
-
描述
获取生物原生AI是否被屏蔽
-
参数
无
-
返回值
数据类型说明 bool AI是否保留。False为AI被屏蔽。 -
备注
- 屏蔽AI后的生物无法行动,不受重力且不会被推动。但是可以受到伤害,也可以被玩家交互(例如马被骑或村民被交易)
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateControlAi(entityId)
comp.GetBlockControlAi()
GetCustomGoalCls
服务端
method in mod.server.extraServerApi
-
描述
用于获取服务器自定义行为节点的基类。实现新的行为节点时,需要继承该接口返回的类
-
参数
无
-
返回值
数据类型说明 type(CustomGoal) 服务端自定义行为节点类 -
示例
import mod.server.extraServerApi as serverApi
CustomGoal = serverApi.GetCustomGoalCls()
class CustomGoalDemo(CustomGoal):
def __init__(self, entityId, argsJson):
CustomGoalCls.__init__(self, entityId, argsJson)
GetEntityMotions
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
获取实体(不含玩家)身上的所有运动器
-
参数
无
-
返回值
数据类型说明 dict 运动器集合,key值代表运动器mID,value值代表运动器类型0:轨迹运动器、1:速度运动器、2:环绕运动器 -
备注
- 运动器非人为停止后会被移除。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motions = motionComp.GetEntityMotions()
# motions = {
# 0:1,
# 1:2
# }
GetMotion
服务端客户端
服务端接口
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
获取生物(含玩家)的瞬时移动方向向量
-
参数
无
-
返回值
数据类型说明 tuple(int,int,int) 瞬时移动方向向量,异常时返回None -
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.GetMotion()
客户端接口
method in mod.client.component.actorMotionCompClient.ActorMotionComponentClient
-
描述
获取生物的瞬时移动方向向量
-
参数
无
-
返回值
数据类型说明 tuple(int,int,int) 瞬时移动方向向量,异常时返回None -
示例
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.GetMotion()
GetOwnerId
服务端
method in mod.server.component.tameCompServer.TameComponentServer
-
描述
获取驯服生物的主人id
-
参数
无
-
返回值
数据类型说明 str 主人id,不存在时返回None -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTame(entityId)
oid = comp.GetOwnerId()
GetStepHeight
服务端
method in mod.server.component.attrCompServer.AttrCompServer
-
描述
返回玩家前进非跳跃状态下能上的最大台阶高度
-
参数
无
-
返回值
数据类型说明 float 台阶高度 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
print(comp.GetStepHeight())
Hurt
服务端
method in mod.server.component.hurtCompServer.HurtCompServer
-
描述
设置实体伤害
-
参数
参数名 数据类型说明 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
服务端
method in mod.server.component.hurtCompServer.HurtCompServer
-
描述
设置实体是否免疫伤害(该属性存档)
-
参数
参数名 数据类型说明 immune bool 是否免疫伤害 -
返回值
数据类型说明 bool 是否设置成功 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateHurt(entityId)
comp.ImmuneDamage(True)
IsEntityOnFire
服务端
method in mod.server.component.attrCompServer.AttrCompServer
-
描述
获取实体是否着火
-
参数
无
-
返回值
数据类型说明 bool 是否着火 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
isOnFire = comp.IsEntityOnFire()
RemoveEntityMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
移除实体(不含玩家)身上的运动器
-
参数
参数名 数据类型说明 motionId int 要移除的某个运动器的ID -
返回值
数据类型说明 bool 是否成功移除 -
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.RemoveEntityMotion(mID)
ResetAttackTarget
服务端
method in mod.server.component.actionCompServer.ActionCompServer
-
描述
清除仇恨目标
-
参数
无
-
返回值
数据类型说明 bool 设置结果 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.ResetAttackTarget()
ResetMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
重置生物(不含玩家)的瞬时移动方向向量
-
参数
无
-
返回值
数据类型说明 bool 设置是否成功 -
备注
- 该接口只能重置SetMotion所设置的瞬时移动方向向量,无法影响由生物本身的AI所产生的运动。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.ResetMotion()
ResetStepHeight
服务端
method in mod.server.component.attrCompServer.AttrCompServer
-
描述
恢复引擎默认玩家前进非跳跃状态下能上的最大台阶高度
-
参数
无
-
返回值
数据类型说明 bool 是否设置成功 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.ResetStepHeight()
SetActorCollidable
客户端
method in mod.client.component.actorCollidableCompClient.ActorCollidableCompClient
-
描述
设置实体是否可碰撞
-
参数
参数名 数据类型说明 isCollidable int 0:不可碰撞 1:可碰撞 -
返回值
数据类型说明 bool True表示设置成功 -
示例
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateActorCollidable(entityId)
success = comp.SetActorCollidable(1)
SetActorPushable
服务端
method in mod.server.component.actorPushableCompServer.ActorPushableCompServer
-
描述
设置实体是否可推动
-
参数
参数名 数据类型说明 isPushable int 0:不可推动 1:可推动 -
返回值
数据类型说明 bool True表示设置成功 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateActorPushable(entityId)
success = comp.SetActorPushable(1)
SetAttackTarget
服务端
method in mod.server.component.actionCompServer.ActionCompServer
-
描述
设置仇恨目标
-
参数
参数名 数据类型说明 targetId str 目标实体id -
返回值
数据类型说明 bool 设置结果 -
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.SetAttackTarget(targetId)
SetBlockControlAi
服务端
method in mod.server.component.controlAiCompServer.ControlAiCompServer
-
描述
设置屏蔽生物原生AI
-
参数
参数名 数据类型说明 isBlock bool 是否保留AI,False为屏蔽 freezeAnim bool 屏蔽AI时是否冻结动作,默认为False,仅当isBlock为False时生效。重进世界会恢复成初始动作 -
返回值
数据类型说明 bool 设置结果 -
备注
- 屏蔽AI后的生物无法行动,不受重力且不会被推动,但是可以受到伤害,也可以被玩家交互(例如马被骑或村民被交易)
- 对玩家无效
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateControlAi(entityId)
comp.SetBlockControlAi(False, True)
SetCanOtherPlayerRide
服务端
method in mod.server.component.rideCompServer.RideCompServer
-
描述
设置其他玩家是否有权限骑乘,True表示每个玩家都能骑乘,False只有驯服者才能骑乘
-
参数
参数名 数据类型说明 tamedEntityId str 可骑乘生物id canRide bool 是否控制 -
返回值
数据类型说明 bool 设置结果 -
示例
# 驯服生物
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetCanOtherPlayerRide(entityId,False)
SetControl
服务端
method in mod.server.component.rideCompServer.RideCompServer
-
描述
设置该生物无需装备鞍就可以控制行走跳跃
-
参数
参数名 数据类型说明 tamedEntityId str 可骑乘生物id isControl bool 是否控制 -
返回值
数据类型说明 bool 设置结果 -
备注
- 该接口仅对已被驯服的可骑乘生物生效,若使用SetEntityRide接口驯服生物,需间隔一定帧数后再调用本接口。
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetControl(entityId,True)
SetEntityInteractFilter
服务端
method in mod.server.component.interactCompServer.InteractComponentServer
-
描述
设置与生物可交互的条件
-
参数
参数名 数据类型说明 index int 交互列表下标 interactFilter str 可交互的条件 -
返回值
数据类型说明 bool 设置结果 -
备注
- 该接口修改minecraft:interact->on_interact中的filters的定义
- 仅当生物存在minecraft:interact组件时才能调用该接口,例如牛、羊驼、猪灵等
-
示例
import mod.server.extraServerApi as serverApi
import json
comp = serverApi.GetEngineCompFactory().CreateInteract(entityId)
filterDict = {
"filters": {
"all_of": [
{ "test": "is_family", "subject" : "other", "value" : "player"},
{ "test": "has_equipment", "domain": "hand", "subject": "other", "value": "bucket:0"}
]
}
}
filterStr = json.dumps(filterDict)
comp.SetEntityInteractFilter(0, filterStr)
SetEntityOnFire
服务端
method in mod.server.component.attrCompServer.AttrCompServer
-
描述
设置实体着火
-
参数
参数名 数据类型说明 seconds int 着火时间(单位:秒) burn_damage int 着火状态下每秒扣的血量,不传的话默认是1 -
返回值
数据类型说明 bool 是否设置成功 -
备注
- 在水中或者雨中不会生效,着火时间受生物装备、生物的状态影响。burn_damage取值范围是0~1000,小于0将取0,大于1000将取1000
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAttr(entityId)
comp.SetEntityOnFire(1, 2)
SetEntityRide
服务端
method in mod.server.component.rideCompServer.RideCompServer
-
描述
驯服可骑乘生物
-
参数
参数名 数据类型说明 playerId str 玩家id tamedEntityId str 要驯服的可骑乘生物id -
返回值
数据类型说明 bool 设置结果 -
备注
- 驯服信息会被存盘
-
示例
# 驯服生物
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetEntityRide(playerId,entityId)
SetEntityShareablesItems
服务端
method in mod.server.component.shareableCompServer.ShareableComponentServer
-
描述
设置生物可分享/可拾取的物品列表
-
参数
参数名 数据类型说明 items list(itemdict) 可分享/可拾取的物品列表 -
返回值
数据类型说明 bool 设置结果 -
备注
- 该接口修改minecraft:shareables的items定义
- 仅当生物存在minecraft:shareables组件时才能调用该接口,例如狐狸、尸壳、猪灵等。若admire为True,则生物还需要有minecraft:admire_item组件。若barter为True,则生物还需有minecraft:behavior.barter行为。
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateShareables(entityId)
shareableItems = []
shareableItems.append({
"item": "minecraft:golden_sword",
"auxValue": 0,
"priority": 1,
"pickupLimit": 1,
"barter": True,
"admire": True,
})
comp.SetEntityShareablesItems(shareableItems)
SetEntityTamed
服务端
method in mod.server.component.tameCompServer.TameComponentServer
-
描述
设置生物驯服,需要配合 entityEvent组件使用。该类驯服不包含骑乘功能。
-
参数
参数名 数据类型说明 playerId str 驯服玩家Id tamedId str 被驯服的生物Id -
返回值
数据类型说明 bool 设置结果 -
备注
- 驯服一个生物,需要按以下步骤:
- 搭配修改生物json文件,使其能够被驯服: - 添加minecraft:tameable组件 - 添加一个component group,里面放驯服后的行为 - 添加一个event,添加刚刚添加的component group,并移除不需要的component group
- 使用SetEntityTamed使目标生物被驯服
- 使用TriggerCustomEvent触发驯服event 如果是对原版可驯服生物使用,则无需按照第一步修改json,而是找到已有的event,在第三步中触发即可
- 如修改苦力怕可被驯服,json做如下修改:
{ "format_version": "1.8.0", "minecraft:entity": { "description": { "identifier": "minecraft:creeper", "is_spawnable": true, "is_summonable": true, "is_experimental": false }, "component_groups": { ... //增加驯服状态 "netease:creeper_tame":{ "minecraft:is_tamed": { }, //跟随主人 "minecraft:behavior.follow_owner": { "priority": 4, //优先级要高于其他移动行为 "speed_multiplier": 1.0, "start_distance": 10, "stop_distance": 2 } } }, "components": { ... //增加驯服组件,使用骨头驯服 "minecraft:tameable": { "probability": 0.33, "tameItems": "bone", "tame_event": { "event": "netease:on_tame", "target": "self" } } }, "events": { ... //增加驯服事件 "netease:on_tame": { //移除掉所有跟爆炸有关的逻辑 "remove": { "component_groups": [ "minecraft:exploding", "minecraft:charged_exploding", "minecraft:forced_exploding", "minecraft:forced_charged_exploding", "minecraft:charged_creeper" ] }, //添加netease:creeper_tame "add": { "component_groups": [ "netease:creeper_tame" ] } } } } }
- 驯服一个生物,需要按以下步骤:
-
示例
import mod.server.extraServerApi as serverApi
# 使tamedId被playerId驯服
tameComp = serverApi.GetEngineCompFactory().CreateTame(tamedId)
tameComp.SetEntityTamed(playerId,tamedId)
# 触发tamedId的netease:on_tame自定义event
envComp = serverApi.GetEngineCompFactory().CreateEntityEvent(tamedId)
envComp.TriggerCustomEvent(tamedId,'netease:on_tame')
SetJumpPower
服务端
method in mod.server.component.gravityCompServer.GravityComponentServer
-
描述
设置生物跳跃力度,0.42表示正常水平
-
参数
参数名 数据类型说明 jumpPower float 跳跃力度,正常是0.42 -
返回值
数据类型说明 bool 是否设置成功 -
备注
- 生物跳跃力度影响生物跳跃高度;本接口调用时需要客户端加载完成,如在AddServerPlayer中,客户端还没加载完成,要延后执行才能生效
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateGravity(entityId)
comp.SetJumpPower(0.84)
SetMobKnockback
服务端
method in mod.server.component.actionCompServer.ActionCompServer
-
描述
设置击退的初始速度,需要考虑阻力的影响
-
参数
参数名 数据类型说明 xd float x轴方向,用來控制角度 zd float z轴方向,用來控制角度 power float 用来控制水平方向的初速度 height float 竖直方向的初速度 heightCap float 向上速度阈值,当实体本身已经有向上的速度时需要考虑这个值,用来确保最终向上的速度不会超过heightCap -
返回值
数据类型说明 None 无返回值 -
备注
- 在damageEvent事件里面使用该接口时,需把damageEvent事件回调的knock参数设置为False
- 该接口会触发OnKnockBackServerEvent事件,所以当需要在该事件中使用时,请编写逻辑避免循环调用
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAction(entityId)
comp.SetMobKnockback(0.1, 0.1, 1.0, 1.0, 1.0)
SetMotion
服务端客户端
服务端接口
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
设置生物(不含玩家)的瞬时移动方向向量
-
参数
参数名 数据类型说明 motion tuple(float,float,float) 世界坐标系下的向量,该方向为世界坐标系下的向量,以x,z,y三个轴的正方向为正值,可以通过当前生物的rot组件判断目前玩家面向的方向,可在开发模式下打开F3观察数值变化。 -
返回值
数据类型说明 bool 设置是否成功 -
备注
- 在damageEvent事件里面使用该接口时,需把damageEvent事件回调的knock参数设置为False
-
示例
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°
客户端接口
method in mod.client.component.actorMotionCompClient.ActorMotionComponentClient
-
描述
设置瞬时的移动方向向量,用于本地玩家
-
参数
参数名 数据类型说明 motion tuple(float,float,float) 世界坐标系下的向量,该方向为世界坐标系下的向量,以x,z,y三个轴的正方向为正值,可以通过当前玩家的rot组件判断目前玩家面向的方向,可在开发模式下打开F3观察数值变化。 -
返回值
数据类型说明 bool 设置是否成功 -
备注
- 如果频繁快速修改本地玩家的瞬时移动向量,可能会触发引擎服务端的反作弊机制(例如掉落伤害),需要频繁快速修改时最好搭配服务端SetMotion同步修改
-
示例
import mod.client.extraClientApi as clientApi
# 使玩家向准星的方向突进一段距离
localPlayerId = clientApi.GetLocalPlayerId()
rotComp = clientApi.GetEngineCompFactory().CreateRot(localPlayerId)
rot = rotComp.GetRot()
x, y, z = clientApi.GetDirFromRot(rot)
motionComp = clientApi.GetEngineCompFactory().CreateActorMotion(localPlayerId)
motionComp.SetMotion((x * 5, y * 5, z * 5))
# rot 和 世界坐标系关系
# ^ x -90°
# |
# 180°/-180 ----------> z 0°
# | 90°
SetMoveSetting
服务端
method in mod.server.component.moveToCompServer.MoveToComponentServer
-
描述
寻路组件
-
参数
参数名 数据类型说明 pos tuple(float,float,float) 寻路目标位置 speed float 移动速度,指正常移动速度的倍率。如1.0表示正常速度,2.0表示两倍速 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组件。
若生物的移速太低(真实速度小于0.3格每秒),也会被当成寻路被卡住,返回该错误码 - 对于各种类型寻路的生物,还需要满足以下初始条件:
- 陆地寻路,水陆寻路与爬墙寻路:需要满足以下任一条件:
- 生物着地
- 生物正在骑乘,并且骑乘物着地
- 生物在液体中
- 生物是凋零
- 飞行寻路:需要满足以下任一条件:
- 不在骑乘状态
- 在液体中
- 生物着地
- json配置中的can_path_from_air属性为true
- 陆地寻路,水陆寻路与爬墙寻路:需要满足以下任一条件:
- demo简介: 聊天栏输入walk/generic/climb/fly会原地生成一个使用对应navigation json组件的生物,然后跑到其他位置,再输入go,会将刚才生成的生物导航到玩家当前位置。 这4种示例生物的行为json可以在NavigationMod_behavior/entities目录查看。 4种示例生物的最大寻路距离都设置为了48格。
- 使用该接口时,需要在生物中配置有寻路的json组件。配置寻路json组件后,该接口会自动选择相应类型的寻路
目前支持的寻路json组件包括:
-
示例
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)
SetPersistence
服务端
method in mod.server.component.persistenceCompServer.PersistenceCompServer
-
描述
设置实体是否持久化。
-
参数
参数名 数据类型说明 isPersistent bool True为设置实体持久化,False为设置实体不持久化。 -
返回值
无
-
备注
- 游戏中,实体默认持久化,若设置不持久化,则实体会在区块卸载和退出存档时被删除,不会存档。
-
示例
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePersistence(entityId)
comp.SetPersistence(True)
SetRidePos
服务端
method in mod.server.component.rideCompServer.RideCompServer
-
描述
设置生物骑乘位置
-
参数
参数名 数据类型说明 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
服务端
method in mod.server.component.rideCompServer.RideCompServer
-
描述
设置实体骑乘生物(或者船与矿车)
-
参数
参数名 数据类型说明 riderId str 骑乘生物id riddenEntityId str 被骑乘生物id。要求被骑乘生物的定义中具有minecraft:rideable组件,且组件中family_types含有可骑乘者的类型声明 -
返回值
数据类型说明 bool 设置结果 -
备注
- 通常需要配合SetEntityRide、SetControl一起使用,需要被骑乘生物json中骑乘组件支持骑乘者的生物类型 当被控制的entity有多个位置时且开发者想要添加多个玩家时,第一个被添加的玩家会被引擎默认设置为控制者
-
示例
# 骑上坐骑
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateRide(entityId)
comp.SetRiderRideEntity(playerId,rideEntityId)
SetStepHeight
服务端
method in mod.server.component.attrCompServer.AttrCompServer
-
描述
设置玩家前进非跳跃状态下能上的最大台阶高度, 默认值为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)
StartEntityMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
启动实体(不含玩家)身上的某个运动器
-
参数
参数名 数据类型说明 motionId int 要启动的某个运动器的ID -
返回值
数据类型说明 bool 是否成功启动 -
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.StartEntityMotion(mID)
StopEntityMotion
服务端
method in mod.server.component.actorMotionCompServer.ActorMotionComponentServer
-
描述
停止实体(不含玩家)身上的某个运动器
-
参数
参数名 数据类型说明 motionId int 要停止的某个运动器的ID -
返回值
数据类型说明 bool 是否成功停止 -
备注
- 调用该接口不会触发事件EntityMotionStopServerEvent。
-
示例
import mod.server.extraServerApi as serverApi
motionComp = serverApi.GetEngineCompFactory().CreateActorMotion(entityId)
motionComp.StopEntityMotion(mID)
TriggerCustomEvent
服务端
method in mod.server.component.entityEventCompServer.EntityEventComponentServer
-
描述
触发生物自定义事件
-
参数
参数名 数据类型说明 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" ] } } ] } - 触发事件所添加或移除的component_groups,会在下一帧才真正生效。
- 触发苦力怕爆炸
在苦力怕的entity json文件中
-
示例
import mod.server.extraServerApi as serverApi
#触发entity自定义event
eventName = "netease:custom_exploading"
comp = serverApi.GetEngineCompFactory().CreateEntityEvent(entityId)
comp.TriggerCustomEvent(entityId,eventName)