前言:
你是不是经常“复制粘贴”别人的代码却不敢改?一改就报错?这篇教程将拆解Chemdah的语法DNA,让你彻底明白每个参数的作用,从此自由定制任务和对话!配合避坑指南+速查表,小白也能变大神!
🧩 核心语法结构:YAML的“潜规则”
1️⃣ 缩进即正义
Chemdah所有配置基于YAML,缩进必须用空格(不能用Tab),且同级对齐。想象成“俄罗斯套娃”——层级越深,缩进越多:
quests: # 顶级键(0缩进) quest_1: # 子键(2空格) objectives: # 子子键(4空格) obj_1: type: ITEM_DELIVERY # 子子子键(6空格
2️⃣ 键值对的秘密
key: value
:冒号后必须加空格(type: ENTITY_KILL
✅,type:ENTITY_KILL
❌)- 短横线列表:表示多个并列项(如奖励、条件)
rewards: - type: MONEY # 短横线开头,缩进对齐 amount: 100 - type: ITEM item: DIAMOND
3️⃣ 数据类型要敏感
- 字符串:带特殊字符(如颜色代码
&a
)必须用引号包裹:name: "&a绿色任务"
- 数字/布尔值:无需引号,如
amount: 5
,repeatable: true
- 嵌套对象:用缩进表示层级关系,如
objectives
下的各个目标
🔧 任务(Quest)配置解剖
1️⃣ 基础骨架
quests: 任务ID: # 唯一标识,不能重复!推荐英文+下划线 name: "任务显示名称" objectives: 目标ID: type: 目标类型 # 如ENTITY_KILL, BLOCK_BREAK等 # 类型专属参数(如entity: ZOMBIE) rewards: - type: 奖励类型 # 奖励参数(如amount: 100) conditions: # 接任务条件 - type: 条件类型 next_quest: 后续任务ID # 任务链关键!
2️⃣ 常用目标类型速查
类型 | 作用 | 关键参数示例 |
---|---|---|
ENTITY_KILL |
击杀实体 | entity: ZOMBIE , amount: 5 |
BLOCK_BREAK |
破坏方块 | block: STONE , amount: 20 |
ITEM_DELIVERY |
提交物品 | item: DIAMOND , lore: "传说物品" |
LOCATION_REACH |
到达坐标区域 | x: 100, y: 64, z: -200, radius: 5 |
CUSTOM_TRIGGER |
自定义触发器 | trigger: 触发器ID |
3️⃣ 奖励类型大全
类型 | 效果 | 参数示例 |
---|---|---|
MONEY |
给钱 | amount: 500 |
ITEM |
给物品 | item: DIAMOND_SWORD , amount: 1 |
COMMAND |
执行命令 | command: "effect give %player% speed 60" |
MESSAGE |
发送消息 | message: "&a任务完成!" |
PERMISSION |
给予权限 | permission: "skill.unlock" |
💬 对话(Conversation)系统语法精讲
1️⃣ 对话树结构
conversations: 对话ID: scenes: # 所有对话场景 scene_1: # 场景ID messages: ["第一句话", "第二句话"] # NPC说的话 choices: # 玩家选项 - "选项文本": target_scene_id # 选择后跳转的场景 actions: # 触发动作(如给物品、启动任务) - type: 动作类型 scene_2: conditions: # 进入该场景的条件 - type: 条件类型
2️⃣ 动作类型举例
QUEST
: 控制任务(start/complete/fail)INVENTORY_REMOVE
: 移除物品COMMAND
: 执行命令TELEPORT
: 传送玩家
3️⃣ 条件判断实战
conditions: - type: QUEST_COMPLETED # 已完成某任务 quest: quest_id - type: PLACEHOLDER # 用PAPI变量判断 placeholder: "%vault_eco_balance%" operator: ">=" value: 1000 - type: INVENTORY_ITEM # 背包有指定物品 item: EMERALD amount: 5
⚙️ 高级语法:变量与占位符
1️⃣ Chemdah内置变量
%chemdah_quest_progress:任务ID%
:任务进度(如3/5)%chemdah_quest_state:任务ID%
:任务状态(未接/进行中/完成)
2️⃣ 跨插件变量联动
- PlaceholderAPI:
- 经济:
%vault_eco_balance%
- 等级:
%mmocores_level_combat%
- 领地:
%residence_current%
- 经济:
- 在对话/条件中使用:
message: "你好,%player_name%!你的余额:%vault_eco_balance%" conditions: - type: PLACEHOLDER placeholder: "%residence_current%" value: "spawn_area"
🚫 避坑指南:99%的新手会犯的错
1️⃣ 缩进杀手
- 错误:混用空格和Tab → YAML解析失败
- 解决:编辑器显示空格(VSCode安装YAML插件)
2️⃣ ID冲突
- 错误:多个任务/对话使用相同ID → 随机覆盖
- 解决:命名用前缀,如
main_quest1
,side_dialog2
3️⃣ 变量未转义
- 错误:
message: 你好%player%
(缺少引号,%被识别为YAML格式) - 解决:
message: "你好%player%"
4️⃣ 条件顺序
- 错误:多个条件未按逻辑排列 → 意外跳过判断
- 解决:条件从上到下执行,把最严格的条件放前面
📜 语法速查表(打印贴墙上!)
场景 | 代码模板 |
---|---|
基础任务 | [见上文任务骨架] |
任务链 | next_quest: next_quest_id |
NPC商店 | actions 中使用INVENTORY_REMOVE +COMMAND |
条件判断 | conditions 配合type: QUEST_COMPLETED/PLACEHOLDER/INVENTORY_ITEM |
变量使用 | 字符串内直接写%变量名% ,用引号包裹 |
结语:
掌握这些语法规则,你已经是Chemdah的“配置自由人”了!遇到问题就回来查表,或者评论区吼一声~ 下期预告:用JavaScript API开发Chemdah自定义扩展,等你来挑战! 🚀
(记得修改配置后重载插件:/chemdah reload
,Adyeshach NPC需重新生成或使用/npc reload
)
这个网站可以让你们自行查询格式是否正确点我
当前仅支持登录后发布评论