外观
氛围动效
外观
氛围动效
| MC 版本 | pack_format(数据包) | 资源包格式 | 备注 |
|---|---|---|---|
| 1.21 | 48 | 34 | Bundles of Bravery |
| 1.21.1 | 48 | 34 | — |
| 1.21.2 - 1.21.3 | 57 | 42 | 试炼刷怪笼更新 |
| 1.21.4 | 61 | 46 | 冬季小更新 |
| 1.21.5 | 71 | 55 | Spring to Life |
| 1.21.6 | 80 | 63 | 对话框系统 |
| 1.21.7 - 1.21.8 | 81 | 64 | — |
| 1.21.9 - 1.21.10 | 88.0 | 69 | min/max_format 引入 |
| 1.21.11 | 94.1 | 75 | 物品组件扩展 |
| 26.1 - 26.1.2 | 101.1 | 84 | Tiny Takeover(本服版本) |
| 26.2 | 107.1 | — | 最新版(截至 2026.07) |
pack_format 的小数点是怎么回事?
自 MC 26.1 开发周期起,Mojang 引入了 X.Y 小数格式 的 pack_format(如 101.1、94.1、107.1)。
X):主版本号,破坏性变更时递增(如 26.1 从 1.21.11 的 94 跳到 101)Y):次版本号,同一主版本内非破坏性微调时递增(如 26.1-pre-2 的 101.0 → 26.1-pre-3 的 101.1)在 pack.mcmeta 中可以用两种格式表示:
整数格式(Leaf 26.1.2 推荐,简单不易错):
{
"pack": {
"pack_format": 101,
"min_format": 82,
"max_format": 107,
"description": "MiragEdge Data Pack"
}
}数组格式(精确到小数版本,对应 101.1):
{
"pack": {
"pack_format": [101, 1],
"min_format": [82, 0],
"max_format": [107, 0],
"description": "MiragEdge Data Pack"
}
}三字段格式必须一致
pack_format / min_format / max_format 三个字段必须同时用整数或同时用数组,混用会导致 Leaf 26.1.2 报错。详见参考页的 Leaf pack.mcmeta 严格校验规则。
:::
更新到新版本时务必修改
pack.mcmeta中的pack_format/min_format值!
/reload 可以热重载的内容:
/reload 不能热重载的内容(需重新进入世界或重启服务器):
经验法则:修改
data/<namespace>/worldgen/下的内容后,必须退出并重新进入世界,或重启服务器。
加载顺序:
/datapack list 显示(或在创建世界界面中调整)Tag 合并机制:
"replace": true:{
"replace": true,
"values": [
"miragedge:ruby_sword",
"miragedge:flame_sword"
]
}/ce reload recipe/ce reload recipe,不支持 /ce reload all/reload 数据包中原版配方,防止引用失效minecraft:item 入口只能识别 minecraft: 命名空间下的物品 ID。从 Modrinth、CurseForge、PlanetMinecraft 等平台下载的第三方数据包通常针对特定 MC 版本编写。部署到 Leaf 26.1.2 服务器前,必须进行兼容性适配,否则会触发 pack.mcmeta 校验失败、mcfunction 语法错误等问题。
1. 下载原始 zip
↓
2. 备份原始 zip(_original/ 子目录)
↓
3. 解压到工作目录
↓
4. 检查并修复 pack.mcmeta(见下方清单)
↓
5. 检查 mcfunction 语法(特别是组件测试)
↓
6. 重新打包 zip(UTF-8 无 BOM)
↓
7. 复制到 download-fixed/ 并部署到 world/datapacks/
↓
8. 重启服务器,检查 latest.log 无 ERROR/WARN| 检查项 | 旧包常见问题 | 适配方法 |
|---|---|---|
| UTF-8 BOM | Windows 编辑器保存的 JSON 带 BOM | 用 utf-8 编码重写(非 utf-8-sig) |
pack_format | 旧版本号(如 48、71、81) | 改为 101(Leaf 26.1.2 目标版本) |
min_format / max_format | 旧包通常没有 | 新增 min_format: 82, max_format: 107 |
supported_formats | 旧包可能包含 | 移除(Leaf 26.1.2 已弃用,保留会报错) |
min_format 值 | 适配者常误设为 81 | 必须 ≥ 82(否则触发 legacy 死循环) |
| 字段格式一致性 | min/max 混用整数和数组 | 三个字段统一用整数或统一用数组 |
第三方包的 mcfunction 文件常见兼容性问题:
| 问题 | 现象 | 解决方案 |
|---|---|---|
旧版 /give NBT 语法 | give @s diamond{display:{Name:...}} | 转换为 1.20.5+ 组件格式 |
| 旧版附魔检测 | execute if data entity @s Items[0].tag.Enchantments... | 用 execute if items ... *[minecraft:enchantments~[...]] |
| 旧版选择器参数 | @e[type=minecraft:pig,nbt={...}] | 改用 execute if data 或 predicate |
| 组件测试语法错误 | *[minecraft:enchantments~{levels:...}](对象) | 改为列表 *[minecraft:enchantments~[{...}]] |
不要随意改写 mcfunction 语法
重要教训:如果原作者的 mcfunction 语法看起来"奇怪"但能正常加载,不要凭直觉修改。例如 *[minecraft:enchantments~[{silk_touch:1}]] 看起来像是缺了 minecraft: 前缀,但实际上这是合法的简写形式。
修改前先在测试世界验证,或查阅 Minecraft Wiki - Item predicate 确认语法。错误修改可能导致 Malformed predicate 错误。
第三方包的 loot table 常见问题:
| 问题 | 现象 | 解决方案 |
|---|---|---|
alternatives 入口全部带 weight 但无 condition | Unreachable entry! 警告 | 改为 minecraft:group(无条件的加权选择不应使用 alternatives) |
入口放在 functions 数组而非 pools | set_loot_table 解析失败 | 把入口移到 pools 数组中 |
旧版 entry 字段名 | 1.20+ 已改名为 entries | 批量替换 |
部署适配后的数据包后,检查 latest.log:
Error reading pack metadata, attempting fallback type 警告Failed to load function 错误Couldn't load tag 错误Unreachable entry! 警告/datapack list 输出中Windows 编辑器(记事本、VS Code 等)保存的 JSON 文件可能带有 UTF-8 BOM(EF BB BF),Leaf 服务端会拒绝加载。用 od 命令检测:
# 检查 pack.mcmeta 是否带 BOM
unzip -p pack.zip pack.mcmeta | od -A x -t x1z -v | head -1
# 正常输出(无 BOM):首字节为 7B({)
# 000000 7b 0a 20 20 ...
# 带 BOM 输出:首三个字节为 ef bb bf
# 000000 ef bb bf 7b 0a ...修复方法:用 Python 重新保存为无 BOM 的 UTF-8:
with open("pack.mcmeta", "r", encoding="utf-8-sig") as f:
content = f.read()
with open("pack.mcmeta", "w", encoding="utf-8", newline="\n") as f:
f.write(content)第三方数据包可能使用 Windows 换行符(\r\n),虽然 Leaf 通常能处理,但跨平台部署时建议统一为 LF(\n)。用 sed 批量转换:
# 将目录下所有 .json 和 .mcfunction 的 CRLF 转为 LF
find . -name "*.json" -o -name "*.mcfunction" | xargs sed -i 's/\r$//'多个数据包同时注册 #minecraft:tick 时,标签文件默认合并(replace: false)。如果某个数据包的 tick.json 设置了 replace: true,会覆盖其他所有数据包的 tick 注册——导致其他数据包的 tick 函数失效。
最佳实践:始终显式声明 "replace": false:
{
"replace": false,
"values": ["my_namespace:main"]
}replace 的默认行为
如果 replace 字段完全缺失,Minecraft 默认使用 false(合并模式)。但显式声明更安全,能防止误操作。
自 MC 26.2 起,pack.mcmeta 不再要求 pack_format 字段,改用 min_format / max_format 指定版本范围:
{
"pack": {
"description": "...",
"min_format": 107,
"max_format": 107
}
}官方 Minecraft 26.2 的数据包也使用此格式。整数格式和数组格式可以混用(官方示例中 min_format 为整数 107 而 max_format 为数组 [107, 1]),但建议统一使用整数格式以保持一致性。
F:\FCelestial\datapacks\
├── new-fun\ # 新下载包的工作目录
│ ├── <Pack>.zip # 适配后的 zip
│ ├── _original\ # 原始 zip 备份(重要!)
│ └── _extracted\ # 解压后的工作副本
└── download-fixed\ # 适配完成、待部署的 zip
├── <Pack>.zip
└── ...一定要备份原始 zip
适配过程可能需要多次迭代(Leaf 的报错往往一项触发一项)。保留原始 zip 备份可以让你随时从干净的起点重新开始,避免在已修改的版本上叠加错误。
本文档覆盖以下能力边界内的任务:
| 能力 | 覆盖 | 不覆盖 |
|---|---|---|
| 数据包项目搭建 | ✅ 完整结构 | — |
| mcfunction 编写 | ✅ 通用逻辑、CE 物品检测 | 复杂红石/命令方块逻辑 |
| 原版配方 | ✅ 所有类型 | — |
| CE 配方 | ✅ 基础/烧炼/附魔结果 | 高级 post-processor、自定义 event |
| 战利品表 | ✅ 方块/生物/箱子 | 高级 predicate 条件组合 |
| CE 物品 | ✅ 属性/附魔/食物/装备 | 高级 behavior、家具、client-bound-data |
| CE 方块 | ✅ 基础方块/战利品表 | 多状态复杂方块、方块 behavior |
| 结构 | ✅ 单模板结构 | 拼图结构(Jigsaw)大型拼接 |
| 世界生成 | ✅ CE 方块 provider | 复杂的自定义维度/噪声 |
当用户提出 MC 数据包或 CraftEngine 开发请求时,AI 应按以下流程执行:
第 1 步:阅读概述与前知知识
→ 确认命名空间、版本、环境约束
第 2 步:匹配功能模块
→ 从 6 大模块中定位相关章节
第 3 步:五步闭环执行
→ 概念理解 → 设计方案 → 编写代码 → 验证命令 → 部署说明
第 4 步:交付输出
→ 提供可直接复制的代码文件
→ 附带验证命令
→ 标注需要手动操作的步骤AI 生成的所有代码必须遵循以下规范:
miragedge(除非用户另有指定)101(MC 26.1.2,以实际环境为准)data/miragedge/<type>/<path>.json 格式miragedge:<snake_case_name>miragedge:<category>/<function_name>miragedge:)当遇到本文档未覆盖的问题时,AI 应:
<server.jar>/data/minecraft/AI 的输出应满足:
// data/miragedge/loot_table/blocks/xxx.json)<server.jar>/data/minecraft/,可用解压工具提取作为参考文档维护:本文档由 F.windEmiko(狐风轩汐)编写,服务于 MiragEdge 锐界幻境服务器。版本随 MC 版本和 CraftEngine 版本更新。如有疑问或建议,请联系开发团队。