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