跳到主要内容

扩展包:更多动作

下载

本包用于为 NPC 主包中引入的 NPC 添加更多更生动的动作

本包为行为包资源包组合的包。

温馨提示
  • 本文的内容基于「主包 v2」的架构。
  • 本文假定您已经能够独立编写属于自己的自定义实体。如果您还不能编写自定义实体,请阅读模块 2 的教程:5.3.1 数据驱动实体

与主包合并

请注意:在本文提供的包并不是一个有效的附加包包体架构,而是基于主包 v2扩展的架构,所以只提供扩展文件。如果您还没有下载主包,请前往下载并阅读相关文档。

解压我们给出的扩展包,然后将其中的文件或文件夹解压到主包对应的位置。粗体文件为扩展包的内容,如果和原文件冲突,请在进行对比后进行手动合并。通常,如果没有更改原文件的话,可以直接替换。

  • BP_npc 文件图标BP_npc:行为包根目录
    • entities 文件图标entities:实体服务端定义
      • template 文件图标template:(建议换名)分类
        • npc.server_entity.json 文件图标npc.server_entity.json:NPC 的行为包定义
    • manifest.json 文件图标manifest.json:(有冲突风险)清单文件
    • pack_icon.png 文件图标pack_icon.png:包图标
  • RP_npc 文件图标RP_npc:资源包根目录
    • animations 文件图标animations:实体动画
      • npc.animations.json 文件图标npc.animations.json:NPC 的动画
    • animation_controllers 文件图标animation_controllers:实体动画控制器
      • npc.animations.json 文件图标npc.animations.json:NPC 的动画控制器
    • entity 文件图标entity:实体客户端定义
      • npc.client_entity.json 文件图标npc.client_entity.json:NPC 的资源包定义
    • models 文件图标models:模型
      • entity 文件图标entity:实体模型
        • npc.geo.json 文件图标npc.geo.json:NPC 的模型
    • render_controllers 文件图标render_controllers:渲染控制器
      • npc.render_controllers.json 文件图标npc.render_controllers.json:NPC 的渲染控制器
    • texts 文件图标texts:文本
      • zh_CN.lang 文件图标zh_CN.lang:(有冲突风险)中文翻译文本
      • en_US.lang 文件图标en_US.lang:(有冲突风险)英文翻译文本
    • textures 文件图标textures:贴图
      • entity 文件图标entity:实体贴图
        • npc 文件图标npc:NPC 贴图
          • 0.png 文件图标0.png:NPC 0 的贴图(Steve)
          • 1.png 文件图标1.png:NPC 1 的贴图(Alex)
    • manifest.json 文件图标manifest.json:(有冲突风险)清单文件
    • pack_icon.png 文件图标pack_icon.png:包图标

以上部分文件中的自定义内容使用了字段template,然而我们不推荐您在您的作品中使用该字段。在正式使用本包之前,您应当将这些字段按您的需求进行改动。

使用方法

合并完成之后,在主包可实现功能的基础上,您还可以使用下面的功能。

调用状态动作

我们设计了 5 种状态动作:站立、行走、坐下、坐下并抬头、趴下。这 5 种状态动作是始终播放的,默认播放站立动画。

除了行走状态(行走状态为站立时且 NPC 移动时自动播放)之外,其他 4 种状态可以通过实体属性检测。

实体属性类型描述
template:statestandsitsit_raising_headlieNPC 当前的状态动作。

也可以通过事件人为调用。

事件名描述
template:stand设置 NPC 的状态为站立。
template:sit设置 NPC 的状态为坐下。
template:sit_raising_head设置 NPC 的状态为坐下并抬头。
template:lie设置 NPC 的状态为趴下。

例如,下面的命令会让所有坐下的 NPC 站起来:

event entity @e[has_property={template:state="sit"}] template:stand
event entity @e[has_property={template:state="sit_raising_head"}] template:stand

调用特殊动作

我们设计了 8 种特殊动作,包括:挥手、说话(包含 4 种动作)、鼓掌、放置方块、环视、点头、摇头、坏笑。这 8 种特殊动作需要通过事件调用才能播放。

以上的所有特殊动作都可以通过实体属性检测:

实体属性类型描述
template:animationnonewave_handspeakapplauseplace_blocklook_aroundnodshake_headbad_smileNPC 当前的特殊动作。其中none代表无动作,当实体的动画播放完后自动切换为无动作状态。
template:speak_mode整数(1-4NPC 当前说话时的特殊说话动作。

通过事件人为调用这些动作可以使其播放特殊动作。注意:这些动作全部适用于站立状态和坐下状态,但全部都不适用于趴下的状态。

事件名描述
template:no_animation停止 NPC 的特殊动作。
template:wave_hand令 NPC 挥手。
template:speak令 NPC 说话。
template:applause令 NPC 鼓掌。
template:place_block令 NPC 放置方块(仅动作)。
template:look_around令 NPC 环视。
template:nod令 NPC 点头。
template:shake_head令 NPC 摇头。
template:bad_smile令 NPC 坏笑。

例如,下面的命令会让所有无动作的 NPC 左右环视:

event entity @e[has_property={template:animation="none"}] template:look_around

添加更多动作

您可以在 Blockbench 中,基于我们的动作进行优化、或者进行全新的设计,以符合您的定制需求。不要忘记在行为包实体定义中添加对应实体属性和事件哦。

实例

制作一个 NPC 放置方块的动画

执行一次。以放置石头为例,事先需要确定 NPC 的位置、朝向。假设下文的坐标为 NPC 前方的方块。首先执行init函数。

init.mcfunction
event entity @e[type=template:npc] template:place_block
replaceitem entity @e[type=template:npc] slot.weapon.mainhand 0 stone
# 约15ticks的时候出现放置方块的动作
schedule delay add setblock 15t
setblock.mcfunction
setblock 0 0 0 stone
playsound stone.use @a 0 0 0
replaceitem entity @e[type=template:npc] slot.weapon.mainhand 0 air