扩展包:交互检测
本文用于为 NPC 主包中引入的 NPC 添加交互检测。
温馨提示
- 本文的内容基于「主包 v2」的架构。如果您还没有下载主包,请前往下载并阅读相关文档。
- 本文假定您已经能够独立编写属于自己的自定义实体。如果您还不能编写自定义实体,请阅读模块 2 的教程:6.1 数据驱动实体。
添加交互检测
在本文中,我们要更改或新增下面的粗体文件,请提前准备:
BP_npc
文件夹:行为包根目录entities
文件夹:实体服务端定义template
文件夹:(建议换名)分类npc.server_entity.json
文件,应为.json格式:NPC 的行为包定义(更改)
functions
文件夹:函数(新增)entities
文件夹(新增)npc
文件夹(新增)interact.mcfunction
文件,应为.mcfunction格式:NPC 被交互后调用的函数(新增)
manifest.json
文件,应为.json格式:清单文件pack_icon.png
图像,应为.png或.tga格式:包图标
RP_npc
文件夹:资源包根目录entity
文件夹:实体客户端定义npc.client_entity.json
文件,应为.json格式:NPC 的资源包定义
models
文件夹:模型entity
文件夹:实体模型npc.geo.json
文件,应为.json格式:NPC 的模型
render_controllers
文件夹:渲染控制器npc.render_controllers.json
文件,应为.json格式:NPC 的渲染控制器
texts
文件夹:文本zh_CN.lang
文件,应为.lang格式:中文翻译文本(更改)en_US.lang
文件,应为.lang格式:英文翻译文本(更改)
textures
文件夹:贴图entity
文件夹:实体贴图npc
文件夹:NPC 贴图0.png
图像,应为.png或.tga格式:NPC 0 的贴图(Steve)1.png
图像,应为.png或.tga格式:NPC 1 的贴图(Alex)
manifest.json
文件,应为.json格式:清单文件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=聊天