Minecraft数据包完全入门:不用Mod,用JSON魔改游戏配方

发布时间:2026/10/1 9:12:23
Minecraft数据包完全入门:不用Mod,用JSON魔改游戏配方 先问一个问题你们见过那种不需要装任何 Mod就能让游戏玩法大变的整合包吗比如挖圆石掉钻石、附魔金苹果可以用金锭合成、僵尸死后掉落凋灵骷髅头颅。很多玩家以为这背后是某位大神写了个复杂的 Mod其实真正实现这些的很可能只是一个几十 KB 的“数据包”Data Pack。数据包是 Minecraft 从 1.13 开始加入的原生机制它的核心思路特别朴素不修改游戏本体只用一堆 JSON 数据文件告诉游戏“按我的规则来”。不需要 Forge不需要 Fabric不需要写 Java 代码——对我在强调这一点因为不少新手一听到 Minecraft Java 版就紧张以为要先学编程。写数据包只需要两样东西一个能编辑文本的软件以及理解文件夹结构。这个系列教程从第 (1) 篇开始我会把数据包的底子一点点讲透。今天这篇只解决四件事数据包到底是什么、它的目录结构长什么样、怎么做一个最简单的配方增强包、以及装进世界后怎么验证和排错。适合完全没接触过数据包、但又想自己做“魔改”玩法的玩家。1. 数据包到底是个什么东西它和 Mod、资源包的区别1.1 数据包是官方自带的“规则修改器”很多人第一次听说数据包是在别人的服务器公告里看到“本服使用大量魔改数据包”或者下载整合包时发现压缩包里除了 mods 文件夹还有个 datapacks 文件夹。数据包Data Pack是 Mojang 从 Java 版 1.13 的快照 18w43a 开始正式引入的官方机制允许玩家在不改动游戏代码的前提下替换或新增游戏的逻辑数据。你可以把它理解成一本“游戏规则说明书”。原版游戏有一套默认规则石头烧成石头砖、钻石矿石只掉钻石、玩家杀怪才涨经验条。数据包就是把其中某些页撕下来换上你自己写的页面。游戏启动时读取这些页面按新的规则运行。这个“规则”覆盖的范围很广合成配方、进度成就、战利品表掉落物、函数批量命令、标签物品分类、谓词条件判断甚至世界生成结构。第 (1) 篇我们先接触最直观的配方其他的后面逐一展开。这里有个关键点必须说清楚数据包是服务端功能。你在单人世界装数据包本质上是你的单人世界开了个内置服务器你在多人服务器装数据包装的是服务端文件而不是客户端。所以数据包不能改变贴图、模型、音效这类纯客户端表现那是资源包的活。1.2 数据包和 Mod、插件、资源包怎么区分我在新手群里见过无数把 Mod 和数据包搞混的玩家包括部分老玩家也会说“这个整合包的 Mod 改了好多配方”。实际上四类东西完全不是一回事用一张表就能看明白类型需要加载器吗要不要写代码能改什么成本和风险ModForge/Fabric/NeoForged需要 Java 代码几乎一切包括新增方块、实体、机制高游戏版本升级容易崩数据包不需要不需要只写 JSON配方、进度、掉落、函数、标签、世界生成等极低删文件即还原插件需要 Paper/Spigot 等服务端Java 或脚本服务端玩法逻辑、权限、经济等中依赖服务端实现资源包不需要不需要只写贴图/模型/音效纯视觉和听觉表现低但改不了逻辑如果做个生活化类比Mod 像是给手机刷第三方系统能改底层驱动和桌面数据包像是打开系统的“自动化快捷指令”按条件触发动作插件像是给手机装一个企业级管控软件资源包则是换个主题皮肤。四者可以共存但各管一段。新手自己动手魔改我最推荐从数据包开始。原因很实在它不会搞坏存档。Mod 加载失败可能导致世界无法打开数据包加载失败最多弹个红色错误提示你把它移出 datapacks 文件夹就一切如初。这种“零风险试错”属性对刚入门的人来说太重要了。1.3 版本门槛为什么说 1.13 是分水岭聊数据包绕不开版本。Java 版在 1.12.2 及更早的版本里并不存在“数据包”这个概念。那时候玩家想自定义配方要么装 CraftTweaker 这类 Mod要么用命令方块写一堆循环命令非常痛苦。1.13 版本大改后游戏本身完成了一次“数据驱动化”重构配方、战利品、进度全面 JSON 化数据包才正式登上舞台。这里要特别安抚一下老版本玩家如果你现在还停留在 1.12.2也能玩但想学数据包就有点尴尬了。1.12.2 的 json 自定义配方机制非常简陋官方支持程度远不如 1.13 之后。我的建议是如果你真心想学数据包至少升级到 1.18 以上的版本主流的教程、示例包、在线生成器基本都以新版为准。另外有人会把“Minecraft Java 版”和“Java 编程语言”绑在一起以为写数据包等于学编程。不是的。玩 Java 版确实要求电脑装了合适的 Java 运行环境比如新版启动器需要 Java 17 或 21但那是启动游戏用的。写数据包只用 JSON 文本和编程语言没有半毛钱关系。你甚至可以完全不懂 Java照样能做出非常好用的数据包。2. 动手前必懂的三件事目录结构、命名空间、JSON 基础2.1 数据包的文件目录结构一眼看明白的骨架任何一个数据包不管它功能多复杂最外层永远是同一个骨架。下面是一个最简配方包的目录树my_first_datapack.zip ├── pack.mcmeta ├── pack.png 可选数据包封面图 └── data └── tutorial 自定义命名空间 ├── recipe │ └── cobble_to_diamond.json ├── loot_table ├── advancement ├── function └── tags第一眼你可能觉得繁琐其实规律很简单。数据包根目录下必须有一个pack.mcmeta文件它相当于数据包的“身份证”记录了这是什么版本的数据包、简介文字是什么。pack.png是可选的封面图没有也不影响加载。真正的核心在data文件夹里。data下的第一层是你自己起的“命名空间”文件夹本例叫tutorial第二层是固定的功能类型文件夹比如配方就是recipe、掉落物是loot_table、进度是advancement、函数是function再往里才是具体的 JSON 文件文件名可以随便起但必须全小写且不能有中文。把每个功能想象成一本书的章节文件夹路径就是“第几页”JSON 文件就是那一页的内容。对于刚接触的新手我的建议是先手动创建目录不要急着用现成工具。手动建过一遍你才能真正理解路径和加载逻辑之间的关系后面排错会省很多时间。2.2 命名空间避免和原版“撞车”的关键设计命名空间是 Minecraft 里一个非常核心的概念。所有物品、方块、进度、配方都有一个完整的 ID格式是命名空间:路径。比如原版钻石完整 ID 是minecraft:diamond圆石是minecraft:cobblestone。数据包也是这套机制。当你写一个新配方时配方文件放在哪个命名空间下它就归谁管。如果你用的是自定义命名空间比如tutorial那么配方 ID 就变成tutorial:cobble_to_diamond不会和原版任何配方冲突游戏也不会出现“重复 ID”的尴尬。那能不能直接放到minecraft命名空间下可以但那就等于覆盖原版同路径文件。比如你放一个data/minecraft/recipe/diamond.json就会把原版钻石合成配方整个替换掉。这种覆盖能力很有用但新手阶段容易误伤所以我的经验是自定义内容一律用自己的命名空间只有当你确实想修改原版某条规则时才去动minecraft文件夹。命名空间命名有几个硬性规则只能用小写英文字母、数字、下划线不能以数字开头不要用连字符-。别问为什么问就是加载器会直接不认。我见过不少新手起名My-Custom-Pack结果包加载失败排查半天发现是连字符问题非常冤。2.3 JSON 语法十分钟补课避开 90% 的新手坑JSON 是一种纯文本数据格式Minecraft 的数据包文件几乎全部由 JSON 组成。理解 JSON 只需要记住三句话大括号{}表示一个“对象”里面放键值对键和值之间用冒号:分隔。中括号[]表示一个“列表”里面的元素用逗号,分隔。每个键和字符串值都必须加双引号不能用单引号。听起来很简单但新手写错的频率高得惊人。我总结过最常见的三类低级错误一是最后一个键值对后面多写了逗号二是键名或值忘了加双引号三是用了中文输入法的冒号、逗号、引号。这三类错误占了数据包报错的绝大多数。我建议你准备一个支持 JSON 高亮的编辑器VS Code、Sublime、Notepad 都行记事本不推荐因为中文引号和英文引号肉眼几乎分不清。写完文件后可以先用在线 JSON 校验器跑一遍格式合法了再丢进游戏测试。这个习惯能帮你省下大把排查时间。3. 第一个数据包实战让 8 个圆石和 1 个煤炭合成出钻石3.1 实践目标一个能看得到效果的魔改配方前面铺垫了那么多现在上手做一个真正能用的数据包。这一节的案例选得刻意简单用 8 个圆石围一圈中间放 1 个煤炭合成出 1 个钻石。为什么选这个配方因为它效果极其直观工作台里一摆就能看到结果成功和失败一眼就能判断非常适合当“Hello World”。动手之前先在你的电脑上建一个文件夹名字随意比如my_first_datapack。记住这个文件夹本身不是数据包它只是你工作的“草稿箱”。我们最终要打包的是文件夹里面的内容而不是这个外层文件夹。这个细节第 3.5 节会专门讲。3.2 创建 pack.mcmeta给数据包办张“身份证”在my_first_datapack文件夹里新建一个文本文件改名成pack.mcmeta。注意扩展名不是.txtWindows 系统需要先在资源管理器里开启“显示文件扩展名”否则容易变成pack.mcmeta.txt那游戏就识别不出来了。用文本编辑器打开写入以下内容{ pack: { pack_format: 15, description: 我的第一个数据包圆石煤炭钻石 } }pack_format是数据包格式版本号不同游戏版本的 MC 对应不同数值15 对应 1.20 – 1.20.1。这个数值填错了游戏会提示“数据包不兼容”或直接不加载。description是你在游戏内数据包列表里看到的说明文字可以随意写。如果你用的游戏版本是 1.21 系列pack_format可以写成 48版本和格式号的对应关系我放到第 5.1 节一张表里统一讲。这里先记住一个原则以你实际游玩版本为准。3.3 编写配方 JSON手把手讲透每个字段在my_first_datapack/data/tutorial/recipe路径下新建一个cobble_to_diamond.json文件。路径里的tutorial是命名空间recipe是功能类型文件夹这两个都不能起错。写入以下内容{ type: minecraft:crafting_shaped, pattern: [ ###, #C#, ### ], key: { #: { item: minecraft:cobblestone }, C: { item: minecraft:coal } }, result: { item: minecraft:diamond, count: 1 } }我来逐段解释这个 JSON 在说什么。type字段声明了配方类型minecraft:crafting_shaped表示“有形状的合成配方”也就是工作台里的 3x3 格子需要按形状摆放。如果你的配方不要求形状比如 2 个任意颜色羊毛合成 1 个白羊毛那可以用minecraft:crafting_shapeless。pattern是三串字符每一行代表工作台的一行#和C是占位符。注意三行字符串必须等长如果某行短了游戏会认为这一格是空的。这里我用了 3x3 满格外围一圈#圆石中心一个C煤炭。key就是把占位符和具体物品对应起来的关键字典#对应圆石C对应煤炭。result是合成结果item指定生成钻石count指定数量为 1。这里有个新手常见的理解偏差以为pattern里的#就是“井字格”的意思其实它只是个符号你用 A、B、C 都行只要在key里能对应上。符号本身没有任何含义游戏只关心它长什么样不关心它是什么。另外提醒一句count字段在 1.20.5 之前的版本里对单个结果来说可写可不写默认就是 1。但我建议从第 1 篇就养成写count的习惯因为 1.21 之后的版本对配方格式做了更严格的检查早点规范起来后面少踩坑。3.4 版本差异同一份 JSON 在不同版本的表现配方 JSON 的格式并不是一成不变的。1.21.2 之后原版对配方系统做了比较大的调整部分写法在新版本下会直接报错或失效。比如新版本更推荐把result写作result: { id: minecraft:diamond, count: 1 }也就是用id取代item来表示结果物品。如果你玩的是 1.21.2 之后的版本第一次写配方时建议直接采用id写法省得后面收到“未知字段 item”之类的报错。这引出一个很实际的问题网上的教程和示例包版本新旧不一你照抄时要多留个心眼。我的经验是先去游戏里看一眼自己玩的版本再判断教程里的写法适不适用。实在拿不准就用id写法然后进游戏实测能合成就是对的。做数据包没有“一次写对”的魔法都是改出来的。3.5 打包压缩九成新手第一步就错在这里现在你的草稿箱里应该有pack.mcmeta和data文件夹了。接下来要做的就是打包成 zip 文件把数据包交给游戏。正确的做法是打开my_first_datapack文件夹选中里面的pack.mcmeta和data两个文件/文件夹右键压缩为 zip。压缩完成后把生成的 zip 文件重命名成英文名比如my_first_datapack.zip。最常见的错误是直接右键my_first_datapack文件夹本身去压缩结果 zip 里多了一层my_first_datapack外层目录结构变成“外层文件夹 / pack.mcmeta / data”。Minecraft 加载数据包时会直接在 zip 根目录找pack.mcmeta找不到就会判定这个包无效。这个坑我见过太多次了包括不少老手偶尔也会犯。打包完成后你可以先双击 zip 文件检查一下第一眼看到的必须是pack.mcmeta和data而不是一个文件夹。看到这个结构你的包才算真正成形了。4. 安装与验证把数据包加载进世界的完整流程4.1 单机世界加载游戏内拖拽的正确姿势生成好的 zip 数据包加载到单机世界的方式有两种我分别说。第一种是游戏内拖拽打开一个世界进入游戏画面后按 ESC点击“对局域网开放”或直接打开“设置 - 数据包”界面把 zip 文件从系统文件管理器拖进 Minecraft 窗口。如果拖拽无效就把 zip 文件放到存档目录下。这个界面会显示两个列表“可用”和“已选择”。刚拖进去的数据包会出现在“可用”列表你点击“完成”后游戏会自动重新加载世界数据包就生效了。第二种更稳定先关闭游戏打开.minecraft/saves/你的世界名/datapacks文件夹把 zip 文件丢进去再重新进入世界。这两种方式本质一样都是把数据包放进这个目录。你可能会问为什么不用第一种那么麻烦其实对新手来说第一种的好处是加载失败不会让你卡在进世界的红屏报错里能直接看到错误信息方便排查。值得注意单机世界数据包是“随存档走”的。同一个 zip放进 A 世界只对 A 世界生效放进 B 世界则只影响 B 世界。你没放数据包的世界依然是原版玩法互不干扰。这种隔离设计非常有利于测试。4.2 服务器安装路径和小细节如果你在多人服务器里想用数据包安装路径在服务端的world/datapacks文件夹下。不同的服务端核心路径可能略有差异比如有些整合包服务端把世界文件夹命名为world有些叫minecraft_world但大同小异找到包含level.dat那个文件夹进去看有没有datapacks没有就自己建一个。服务器安装有几个额外的注意点一是改完数据包后在游戏执行/reload命令即可重新加载不需要重启服务器但有些服务端比如 Paper出于性能考虑默认对数据包有缓存可能 reload 不全这时候需要/datapack list确认状态必要时还得重启服务端二是服务器上如果同时装了 Mod数据包和 Mod 的兼容性问题会比单机更复杂报错优先看服务端日志三是给服务器装数据包前最好先备份整个world文件夹一旦数据包把世界生成改出问题备份能救命。4.3 验证数据包是否真的生效三步闭环装完数据包怎么确定它生效了我习惯用三步验证法。第一步游戏里输入/datapack list如果输出里能看到[file/tutorial] my_first_datapack.zip就说明游戏已经识别并加载了这个数据包。注意tutorial是命名空间名显示成什么取决于你的命名空间。第二步输入/reload重新加载所有数据包资源。这一步不能省尤其是你改了 JSON 文件再进游戏时不 reload 的话数据包可能还是旧内容。第三步打开工作台按配方书的形状放置 8 个圆石和 1 个煤炭。如果输出格出现了钻石说明配方生效整个流程闭环成功。如果没出现别急跳到下一章按排查思路走。这里补一个小提示有些玩家实测时发现配方书里看不到自定义配方怀疑数据包没生效。其实配方书有刷新延迟你重新打开工作台界面或切到“已解锁的配方”那一页翻一下通常就会出现。真正没生效的表现是手动按正确形状摆放后输出格什么都不出。5. 数据包不生效完整排查链路从现象到根因5.1 数据包列表里根本找不到这个包这是最原始的一类问题游戏都没认你这个包。根因通常三个方面zip 压缩层级不对、pack.mcmeta内容格式错、pack_format和游戏版本不匹配。先检查 zip 层级。按第 3.5 节说的打开 zip 根目录必须直接就是pack.mcmeta和data不能有任何外层目录。再检查pack.mcmeta。用记事本打开确认 JSON 引号、冒号都是英文半角字符确认大括号闭合。有时候你从网页复制 JSON会悄悄带进来一些不可见字符或中文空格也会导致解析失败。然后检查pack_format。这是新手第二常见的崩溃原因。不同版本对应的格式号大致如下表游戏版本pack_format1.13 – 1.14.441.15 – 1.16.151.16.2 – 1.16.561.17 – 1.17.171.18 – 1.18.281.19 – 1.19.291.19.3121.19.4131.20 – 1.20.1151.20.2181.20.3 – 1.20.4221.20.5 – 1.20.6341.21 – 1.21.1481.21.2 之后数据包格式要求进一步收紧直接写一个数字的pack_format在部分版本里依然可用但如果你想做跨版本兼容官方开始推荐使用supported_formats数组来表示一个范围比如supported_formats: [48, 55]。对新手来说最省心的办法是只写pack_format对你的目标版本填一个对应的数字不要贪多。5.2 列表显示已加载但游戏里没有新配方这类问题更隐蔽因为游戏已经认了这个包说明格式层面对了问题出在内容路径或配方定义本身。我从实操中总结出四个高频点。一是路径放错。配方文件必须放在data/命名空间/recipe/目录下不能放在data/命名空间/recipes/。少一个s整个文件就会被无视。这个错误特别常见因为很多玩家是从英文单词复数习惯去猜的。战利品表同理是loot_table不是loot_tables。二是 JSON 存在解析错误。如果某个 JSON 格式坏了游戏通常会在加载时给出一段含json字样的报错并指出是哪个文件。这时候用第 2.3 节提到的在线校验器去跑通常能快速定位到第几行第几个字符出了问题。三是物品 ID 写错。minecraft:cobblestone不能写成minecraft:cobble_stoneminecraft:coal不能写成minecraft:coal_item。物品 ID 必须以游戏中实际 F3H 打开高级提示后看到的物品 ID 为准或者去 Minecraft Wiki 查询。写错一个字符配方就静默失效。四是 pattern 行数或字符长度不对。我用 3 行 3 字符表示 3x3 满格如果你写的三行长度不一致比如第一行###第二行##游戏会直接判定这个配方形状非法。更隐蔽的是你把#写成了全角字符肉眼看起来一样解析器完全不认。5.3 进入世界报错“数据包错误”红屏这个是最让新手头皮发麻的场景进世界时直接卡在红色错误界面显示“数据包错误”。先别慌红屏并不是存档损坏只是游戏无法加载你放进去的数据包。这个界面下面通常会有一段报错文字可能还会让你选择“返回标题画面”还是“重新加载”。第一次遇到红屏我建议直接选“返回标题画面”然后把刚才放进去的 zip 从 datapacks 文件夹里移出去世界就能正常进了。这一步不是为了放弃而是为了确认“世界本身没坏坏的是数据包”。然后把你添加的数据包逐个放回去一次放一个进世界试试用二分法定位到真正出错的文件。红屏通常不是 JSON 小错误而是结构性大问题比如某个文件引用了不存在的物品 ID或者用了当前版本根本不支持的字段。定位到文件后用文本编辑器打开把你怀疑的新增内容逐行注释掉……注意 JSON 不支持注释那就一段段删掉再试。这种“删到能加载为止”的方式很笨但在没有 IDE 辅助的纯文本场景里就是最有效的办法。5.4 实操案例一次真实的排错过程我自己写过一个小包想给原版增加一个“木棍烧成木炭”的熔炉配方。当时我满怀信心把包丢进存档进世界没任何报错可熔炉里怎么烧都是木头→木炭原版行为我的配方完全没生效。第一反应是查路径。打开存档的 datapacks 目录确认 zip 在。接着输入/datapack list包显示已加载说明格式没问题。然后我开始怀疑配方 JSON。我把配方文件用在线校验器检查合法。最后我对着原版熔炉配方文档一行行看发现我的type写的是minecraft:crafting_shaped——这是工作台配方而熔炉配方应该用minecraft:smelting。我把工作台配方和熔炉配方的类型搞混了文件位置还放在了recipe文件夹里游戏把它当工作台配方处理自然不在熔炉界面生效。这个案例想说明两件事第一排错要按“格式层 - 路径层 - 内容层”的顺序逐层排查不要一上来就怀疑最深层的逻辑第二配方类型字段type多种多样工作台、熔炉、高炉、烟熏炉、锻造台各不相同做哪个就查哪个的文档别凭感觉复用。6. 数据包的能力地图第一个包做好之后往哪个方向学6.1 常用子文件夹和功能速览跳出配方看看数据包还能做什么。下表是我整理的新手最容易上手的五个方向子文件夹对应的英文功能能实现什么新手友好度recipe合成配方自定义工作台、熔炉等合成逻辑最容易loot_table战利品表修改生物掉落、方块掉落、箱子物品容易advancement进度自定义成就、触发条件、奖励回馈中等function函数批量执行命令做事件型玩法中等tags标签自定义物品/方块的分类集合容易predicate谓词在进度/战利品里做条件判断中等偏难举个实际例子loot_table可以让僵尸死后掉落钻石function可以用一条命令给玩家发一组工具advancement可以监控“玩家合成了一把钻石剑”这个事件然后触发一个function给全服发送公告。这三个模块组合起来就能做出“首杀钻石剑公告”这类最早的服务器魔改玩法。6.2 我的学习路线建议别一上来就啃世界生成很多玩家一听说数据包能改世界生成兴冲冲就要去改“矿物分布”结果被一整柜子的 JSON 配置劝退。我理解这种心情但建议循序渐进。第一阶段把配方玩熟能通配任何类型的合成/烧炼/锻造配方。第二阶段改战利品表让某个生物或方块掉落你指定的物品。第三阶段学函数掌握执行命令、选择器、宏参数。第四阶段用进度做事件监听把函数作为“奖励”触发你已经能做出真正意义上的玩法逻辑了。第五阶段再碰世界生成那时候你对 JSON 结构和命名空间的理解已经足够扎实。每一个阶段我都建议做一个能给自己带来爽感的小项目第一阶段改出一个“黄金工具套装”配方第二阶段做一个“挖矿掉经验”第三阶段写一个“进入世界时给玩家一张欢迎纸条”的函数。项目驱动学习比照着文档读十遍管用得多。6.3 几个贯穿全系列的习惯从现在开始养成最后分享几个我实际写了七八个数据包之后觉得特别重要的习惯。第一个习惯是“保留一份原版参考”。游戏安装目录或服务端 jar 文件里有原版的数据包内容通常在version/对应版本/下。你可以把它解压出来放在旁边当字典查。原版的数据包就是最好的语法示例遇到不确定的字段直接去看原版怎么写比猜可靠。第二个习惯是“改动尽量隔离”。同一个数据包用清晰的功能子文件夹分开不要所有 JSON 塞在一个目录里。一个功能一个目录出问题能快速定位。你也可以用多个数据包分装不同功能加载顺序靠文件名前缀控制但新手阶段我建议“一个包做一件事”简单直接。第三个习惯是“测试世界专用”。开一个创造模式的专门测试存档把 time、weather 调成固定状态在里面反复 reload、测试、改包、再 reload。不要让测试污染你的生存主档更不要把半成品包放进生存服务器。我在自己服务器上调试半成品数据包时就曾因为一个坏掉的战利品表导致某个区块的箱子一直无法生成内容最后花了一晚上才清理干净。第四个习惯是“循序渐进地扩展版本兼容”。当你把第一个自定义配方包跑通可以试试把pack_format改成相邻版本看能不能跨版本加载。版本兼容越早理解等你做出复杂的数据包后就越从容。数据包报错时的英文提示多读几遍你会发现它的信息量其实很足文件路径、错误类型、无效字段全都摆在眼前。结尾写在第一个数据包跑通之后其实你把这套流程走完会发现数据包没想象中那么神秘。它不过是一种“让游戏按数据文件运行”的机制真正有门槛的不是语法而是你有没有一个可以反复实验的测试环境以及一套正确的排查思路。对比我自己刚学数据包那段日子最深的体会就是别怕报错。第一次看到红屏我差点把整个存档删了后来才知道那只是数据包格式问题把文件挪出来世界就恢复正常了。后面再遇到任何报错我第一反应都是“日志在哪、路径对不对、版本对不对”而不是“我是不是把存档搞坏了”。这种心态转变才是你能持续做下去的底气。下一篇我会接着讲如何在配方基础上加入进度和函数让数据包从“改配方”升级为“做玩法”。在这之前建议你亲手把上面这个圆石加煤炭的配方包完整跑一遍哪怕只是多改成几个花哨配方也比光看不练强。数据包这东西动手一次胜过看十篇教程。