# 行为

# UseItemAttackEntity

服务端

method in mod.server.component.gameCompServer.GameComponentServer

  • 描述

    使用指定物品攻击某个实体。

  • 参数

    参数名
    数据类型
    说明
    itemDict dict 物品字典数据
    entityId str 攻击实体id
    cause str 伤害类型,默认值是EntityAttack,详见Minecraft枚举值文档的ActorDamageCause
    attackerPos tuple(float,float,float) 伤害来源坐标,默认值为None,该参数会影响击退效果的计算
    knocked bool 是否击退,默认值为False,如果设置为True,需同时设置attackerPos
    customTag str 标识自定义伤害来源,只在cause为Custom生效,可在ActorHurtServerEvent、ActuallyHurtServerEvent、DamageEvent、PlayerHurtEvent、PlayerDieEvent、MobDieEvent监听到标识
    damageFormula str 伤害计算公式的字符串,公式格式参考以下备注,默认值为None
  • 返回值

    数据类型
    说明
    dict 成功:返回使用过后的物品字典;失败:返回None
  • 备注

    • 无攻击力的物品,将会没有伤害(接口调用返回None)。
    • 有耐久的物品在攻击后,将会扣除部分耐久。
    • 可通过DamageEvent等事件修改伤害值。
    • 如果itemDict写入了不可添加到该物品的附魔,该附魔效果将不会生效,返回的itemDict也不会带有该附魔信息。如果有需求,可考虑将附魔信息写入userData。
    • 公式参考:(%value% * 2 + 10.5),其中%value%表示初始的伤害值,仅能使用+-*/以及(),仅能使用单条公式,数值是做浮点运算。公式字符串的长度必须小于256。
    • 如果公式解析失败,则会返回None。
  • 示例

import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
itemDict = {
    "newItemName": "minecraft:iron_sword",
    "newAuxValue": 0,
    "count": 1,
    "durability": 256,
    "enchantData": [(9,1)]
}
print(comp.UseItemAttackEntity(itemDict, entityId))

# UseItemToEntity

服务端

method in mod.server.component.gameCompServer.GameComponentServer

  • 描述

    模拟对某个实体使用物品。

  • 参数

    参数名
    数据类型
    说明
    itemDict dict 物品字典数据
    entityId str 目标实体id
  • 返回值

    数据类型
    说明
    dict 成功:返回使用过后的物品字典;失败:返回None
  • 备注

    • 如果对实体使用物品成功后,接口返回的itemDict的重要数据(如newItemName、count、durability等等)没有发生变化,此时的意思是接口使用成功,但物品没有发生更改,需开发者注意甄别。
    • 部分需要使用者的行为,调用该接口会返回没有发生变化的itemDict。如与实体交易、乘骑实体、让玩家的宠物坐下、让动物信任自己等等。
    • 使用该接口对实体使用拴绳,会执行成功,但拴绳不会出现。
    • 使用该接口驯服实体,会导致实体的owner是一个不存在的实体id。
    • 对实体使用物品是否能成功,取决于行为组件中的filter规则,如 minecraft:interact、minecraft:breedable组件等等;其中is_owner必定校验不通过,如给狼穿戴狼铠。
    • 该接口不会触发事件。
  • 示例

import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
gameComp = serverApi.GetEngineCompFactory().CreateGame(levelId)
itemDict = {
    "newItemName": "minecraft:carrot",
    "newAuxValue": 0,
    "count": 1
}
print( gameComp.UseItemToEntity(itemDict, entityId) )

# UseItemToPos

服务端

method in mod.server.component.gameCompServer.GameComponentServer

  • 描述

    对某个方块使用指定物品。

  • 参数

    参数名
    数据类型
    说明
    itemDict dict 使用的物品字典数据
    dimensionId int 坐标维度id
    pos tuple(int,int,int) 方块坐标
    facing int 点击方块的面向,详见Facing枚举
  • 返回值

    数据类型
    说明
    dict 成功:返回使用过后的物品字典; 失败:返回None
  • 备注

    • 如果物品使用后会返还新物品,则会在pos位置掉落出来。如水桶、水瓶等。
    • 如果pos所在的方块、或者手持物品的逻辑涉及到玩家,则会使用失败,如对栅栏使用拴绳、对方块使用磁石指针、使用床、使用工作台、使用告示牌方块等。
    • 如果方块本身有使用的功能、且不依赖物品,则该接口返回的itemDict的重要数据(如newItemName、count、durability等等)不会有变化。如按钮、拉杆、门,活板门,栅栏门等。
    • 如果对方块使用不正确的物品时,则该接口返回的itemDict的重要数据(如newItemName、count、durability等等)不会有变化。如对已放入物品的展示框再使用物品、对堆肥桶使用方块等。
    • 使用失败(返回None)的情况可能如下:itemDict为空物品或错误物品字典,坐标方块为空气,坐标区块未加载,无法对方块使用该物品等等。无法摆放方块的比如:该位置有方块、有实体占位置等等。
    • 使用打火石激活传送门时,会返回None,需开发者自行做判断。
    • 该接口不会触发事件。
  • 示例

import mod.server.extraServerApi as serverApi
levelId = serverApi.GetLevelId()
comp = serverApi.GetEngineCompFactory().CreateGame(levelId)
itemDict = {
    "newItemName": "minecraft:water_bucket",
    "newAuxValue": 0,
    "count": 1
}
print(comp.UseItemToPos(itemDict, 0, (30, 64, 30), 1))

UseItemAttackEntity

UseItemToEntity

UseItemToPos