跳到主要内容

扩展包:交互检测

本文用于为 NPC 主包中引入的 NPC 添加交互检测

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

添加交互检测

在本文中,我们要更改或新增下面的粗体文件,请提前准备:

  • BP_npc 文件图标BP_npc
    文件夹
    :行为包根目录
    • entities 文件图标entities
      文件夹
      :实体服务端定义
      • template 文件图标template
        文件夹
        :(建议换名)分类
        • npc.server_entity.json 文件图标npc.server_entity.json
          文件,应为.json格式
          :NPC 的行为包定义
          (更改)
    • functions 文件图标functions
      文件夹
      :函数
      (新增)
      • entities 文件图标entities
        文件夹
        (新增)
        • npc 文件图标npc
          文件夹
          (新增)
          • interact.mcfunction 文件图标interact.mcfunction
            文件,应为.mcfunction格式
            :NPC 被交互后调用的函数
            (新增)
    • manifest.json 文件图标manifest.json
      文件,应为.json格式
      :清单文件
    • pack_icon.png 文件图标pack_icon.png
      图像,应为.png或.tga格式
      :包图标
  • RP_npc 文件图标RP_npc
    文件夹
    :资源包根目录
    • entity 文件图标entity
      文件夹
      :实体客户端定义
      • npc.client_entity.json 文件图标npc.client_entity.json
        文件,应为.json格式
        :NPC 的资源包定义
    • models 文件图标models
      文件夹
      :模型
      • entity 文件图标entity
        文件夹
        :实体模型
        • npc.geo.json 文件图标npc.geo.json
          文件,应为.json格式
          :NPC 的模型
    • render_controllers 文件图标render_controllers
      文件夹
      :渲染控制器
      • npc.render_controllers.json 文件图标npc.render_controllers.json
        文件,应为.json格式
        :NPC 的渲染控制器
    • texts 文件图标texts
      文件夹
      :文本
      • zh_CN.lang 文件图标zh_CN.lang
        文件,应为.lang格式
        :中文翻译文本
        (更改)
      • en_US.lang 文件图标en_US.lang
        文件,应为.lang格式
        :英文翻译文本
        (更改)
    • textures 文件图标textures
      文件夹
      :贴图
      • entity 文件图标entity
        文件夹
        :实体贴图
        • npc 文件图标npc
          文件夹
          :NPC 贴图
          • 0.png 文件图标0.png
            图像,应为.png或.tga格式
            :NPC 0 的贴图(Steve)
          • 1.png 文件图标1.png
            图像,应为.png或.tga格式
            :NPC 1 的贴图(Alex)
    • manifest.json 文件图标manifest.json
      文件,应为.json格式
      :清单文件
    • pack_icon.png 文件图标pack_icon.png
      图像,应为.png或.tga格式
      :包图标

打开 NPC 的行为包定义,在其组件(components)内部添加一个minecraft:interaction组件,然后添加对应的事件调用:

BP_npc/entities/template/npc.server_entity.json
{
"format_version": "1.21.0",
"minecraft:entity": {
...,
"components": {
...,
"minecraft:equipment": { "slot_drop_chance": [ { "slot": "slot.weapon.mainhand", "drop_chance": 0 } ] },
"minecraft:interact": { "interactions": [ { "interact_text": "action.interact.chat", "on_interact": { "event": "template:interacted", "target": "self" } } ] }
},
"events": {
...,

"template:interacted": { "queue_command": { "command": [ "function entities/npc/interact" ] } }
}
...
}
}

这样,函数entities/npc/interact就将在被交互时,以 NPC 为执行者、NPC 的环境为执行环境参数执行其中的命令。例如,可以设置 NPC 在被交互时执行say命令:

BP_npc/functions/entities/npc/interact.mcfunction
# ===== NPC 被交互 =====
say Hello, world!

记得设置聊天按钮的文本:

RP_npc/texts/en_US.lang
## ===== Interaction Buttons =====
action.interact.chat=Chat
RP_npc/texts/zh_CN.lang
## ===== 聊天按钮 =====
action.interact.chat=聊天