跳转到内容

NPC 配置 npcs.yml

npcs.yml 定义了副本中的 NPC 角色。NPC 可以与玩家对话、响应点击事件、执行脚本。

使用内置实体实现,无需安装任何外部 NPC 插件。

npcs:
引导者:
name: "&6&l副本引导者" # 显示名称(支持颜色代码)
type: PLAYER # NPC 类型
location: "0,64,0" # 相对副本原点的坐标 x,y,z
skin: "Notch" # 皮肤玩家名(仅 PLAYER 类型有效)
look_at_player: true # 是否朝向附近玩家
dialogue: # 对话内容列表
- "&e[引导者] &7欢迎来到试炼副本!"
- "&e[引导者] &7前方有强大的敌人,请做好准备。"
dialogue_delay: 40 # 对话行间延迟(tick)
click_script: | # 点击时执行的脚本
action.sound('@trigger', 'ENTITY_VILLAGER_YES', 1.0, 1.0)
action.message('@trigger', '&e引导者向你点了点头。')
once: false # 是否只能交互一次
类型说明
PLAYER玩家外形(支持皮肤设置)
VILLAGER村民
ZOMBIE僵尸
SKELETON骷髅
WITCH女巫
CREEPER苦力怕
ENDERMAN末影人
BLAZE烈焰人
PILLAGER掠夺者
WANDERING_TRADER流浪商人
IRON_GOLEM铁傀儡
字段类型必填默认值说明
nameStringNPC key头顶显示名称,支持 & 颜色代码
typeStringPLAYERNPC 实体类型
locationString0,64,0坐标 x,y,z(或 x,y,z,yaw,pitch),相对副本世界原点
skinString-皮肤玩家名,仅 PLAYER 类型
look_at_playerBooleantrue是否自动朝向附近玩家
dialogueList[]对话文本列表
dialogue_delayLong30对话行间延迟(tick,20tick = 1秒)
click_scriptString-点击时执行的 JavaScript 脚本
onceBooleanfalse是否只能交互一次
dialogue_choicesSection-聊天栏可点击的对话选项
shopSection-商店配置(购买 / 出售)
questsSection-NPC 任务配置
dialogue_stagesSection-多段对话阶段(按顺序推进)

在聊天栏显示可点击的对话选项,玩家点击后执行对应脚本。每个子项的键为选项 ID。

字段类型必填默认值说明
textString""选项显示文本,支持 & 颜色代码
scriptString-点击该选项执行的脚本
conditionString""显示条件(空=无条件显示)
npcs:
长老:
name: "&6村庄长老"
type: VILLAGER
location: "0,64,0"
dialogue_choices:
ask_quest:
text: "&a我想接受任务"
script: |
action.message('@trigger', '&7长老:很好,去消灭森林里的怪物吧。')
condition: ""
ask_shop:
text: "&e我想看看商品"
script: |
action.open_chest_ui('@trigger', '长老货柜')

商店分为 购买 / buy(玩家花费货币或物品换取物品)和 出售 / sell(玩家用物品换取奖励)两个子段。

字段类型必填默认值说明
nameString子项 key商品名称
iconStringSTONE图标材质名
price_typeStringmoney价格类型
priceInt0价格数值
price_itemString""价格物品(当用物品支付时)
give_itemString""购买后给予的物品
give_scriptString-购买后执行的脚本
字段类型必填默认值说明
nameString子项 key商品名称
iconStringSTONE图标材质名
require_itemString""出售所需物品
reward_typeStringmoney奖励类型
rewardInt0奖励数值
reward_scriptString-出售后执行的脚本
npcs:
商人:
name: "&d神秘商人"
type: VILLAGER
location: "5,64,5"
shop:
buy:
apple:
name: "&c回复苹果"
icon: APPLE
price_type: money
price: 100
give_item: "GOLDEN_APPLE"
sell:
old_sword:
name: "&7回收旧剑"
icon: IRON_SWORD
require_item: "IRON_SWORD"
reward_type: money
reward: 50

NPC 可发布任务,玩家点击接受、满足条件后提交。每个子项的键为任务 ID(也可用 id 字段覆盖)。

字段类型必填默认值说明
idString子项 key任务唯一 ID
nameString子项 key任务名称
descriptionString""任务描述
accept_textString&a[接受]接受按钮文本
accept_scriptString-接受时执行的脚本
submit_textString&e[提交]提交按钮文本
submit_conditionString""提交条件(满足才可提交)
submit_scriptString-提交时执行的脚本
npcs:
任务发布者:
name: "&b任务官"
type: VILLAGER
location: "0,64,0"
quests:
kill_zombies:
name: "&a清剿僵尸"
description: "击杀 10 只僵尸"
accept_text: "&a[接受任务]"
accept_script: |
action.message('@trigger', '&7任务已接受!')
submit_text: "&e[提交任务]"
submit_condition: ""
submit_script: |
action.message('@trigger', '&a任务完成,奖励已发放!')

多段对话按顺序推进,每次点击播放当前阶段的对话并前进到下一阶段,支持条件门控和循环。每个子项的键为阶段 ID。

字段类型必填默认值说明
linesList[]该阶段的对话行
conditionString""推进条件(空=无条件推进)
scriptString-播放该阶段后执行的脚本
loopBooleanfalse是否为循环阶段(所有阶段播完后回退到此阶段)
npcs:
剧情NPC:
name: "&6神秘老人"
type: VILLAGER
location: "0,64,0"
dialogue_stages:
stage1:
lines:
- "&e[老人] &7年轻人,你终于来了……"
condition: ""
stage2:
lines:
- "&e[老人] &7前方的封印需要你来解开。"
script: |
action.message('@trigger', '&a你获得了封印之钥。')
stage3:
lines:
- "&e[老人] &7祝你好运。"
loop: true

click_script 中可使用以下选择器:

选择器说明
@trigger点击 NPC 的玩家
@all副本内所有玩家
@party队伍内所有玩家
npcs:
带路人:
name: "&a&l带路人"
type: VILLAGER
location: "0,64,0"
look_at_player: true
dialogue:
- "&e[带路人] &7跟我来,我带你去下一个区域。"
dialogue_delay: 30
click_script: |
action.npc_talk('@trigger', '带路人')
action.delay(80)
action.npc_walk('带路人', '20,64,30', 0.3)

NPC 相关的脚本动作详见 NPC 脚本动作