Ely Prism Launcher如何读取存档NBT数据?libnbtplusplus的World管理完全指南
【免费下载链接】LauncherThis fork of Prism Launcher adds integrated support for Ely.by accounts.项目地址https://gitcode.com/GitHub_Trending/ely/Launcher点击查看免费下载Ely Prism Launcher 是基于 Prism Launcher 的增强版 Minecraft 启动器内置了 Ely.by 账号支持。它内置的World世界/存档管理功能让你无需打开游戏就能在实例页面里看到存档名称、游戏模式、最后游玩时间和种子甚至能直接改名、复制、删除存档。这些信息的来源就是每个存档目录下的level.dat文件——一个 Gzip 压缩的 NBTNamed Binary Tag文件。第一步如何找到你的存档启动器通过 WorldList 扫描实例的saves目录遍历目录下每个文件夹用World类尝试解析其中的level.dat只有解析成功的文件夹才被视为有效存档w.isValid()通过QFileSystemWatcher监听目录变化你在游戏里新建存档后界面会自动刷新见 WorldList.cpp对应界面在 WorldListPage.cpp——右键菜单里的复制种子打开文件夹用 MCEdit 打开等操作都是基于这里解析出的 NBT 数据。level.datGzip 压缩的 NBT 文件存档的核心文件level.dat并不是明文处理它需要两步1️⃣ 解压— 由 GZip.h 提供GZip::unzip()/GZip::zip()完成压缩与解压2️⃣ 解析 NBT 树— 这正是 libnbtplusplus 的舞台。核心函数parseLevelDat()位于 World.cpp先调用GZip::unzip还原字节流再用nbt::io::read_compound()把字节流解析成一棵 NBT 标签树解析失败时返回nullptrWorld对象会标记为无效界面中直接不显示libnbtplusplus 具体提取了哪些信息解析成功后loadFromLevelDat() 会进入 NBT 树的Data复合标签提取 5 项关键数据字段NBT 路径用途存档名称Data/LevelNameString显示在 World 列表最后游玩时间Data/LastPlayedLong 时间戳转成QDateTime展示游戏模式Data/GameTypeInt映射为生存/创造/冒险/旁观见 GameType世界种子Data/WorldGenSettings/seed旧版本回退到Data/RandomSeed支持右键复制种子为了兼容不同游戏版本读取代码用了带异常捕获的辅助函数read_string()、read_long()、read_int()World.cpp旧世界缺少某个标签时只会打印警告并回退默认值而不会让启动器崩溃——这就是健壮解析的体现。反向写入改名时如何安全修改 NBTWorld 管理不只是读。当你右键存档选择重命名时World::rename() 会执行一次完整的 NBT 读改写循环parseLevelDat()读出整棵 NBT 树定位Data复合标签把LevelName标签改写为新名字nbt::io::write_tag()把 NBT 树序列化回字节流serializeLevelDat()重新 Gzip 压缩通过 PSaveFile 原子写回——写入失败可自动取消避免损坏存档 ⚠️这个读 → 改 → 写闭环是 libnbtplusplus 作为可读写 NBT 库的核心价值。导入存档识别 zip 压缩存档除了目录形式Ely Prism Launcher 也支持导入 zip 压缩包存档World::readFromZip() 用MMCZip::ArchiveReader在压缩包内查找level.dat只解压这一个文件就能识别存档LocalWorldSaveParseTask.cpp 的contains_level_dat()递归检查文件夹/压缩包结构识别 SINGLE单个世界与 MULTI含saves目录的整包两种格式测试用例 WorldSaveParse_test.cpp 基于 tests/testdata/WorldSaveParse 的 zip 与目录样本验证了整个识别流程libnbtplusplus 在哪里该库以 git 子模块形式内置在 libraries/libnbtplusplus由根目录 CMakeLists.txt 直接编译进启动器。它是一个轻量 C 库提供nbt::io::read_compound()/nbt::io::write_tag()— 流式读写 NBTnbt::tag_compound、nbt::tag_string、nbt::tag_long等类型安全的标签访问器解析失败时抛出nbt::io::input_error异常方便上层捕获处理总结Ely Prism Launcher 的 World 管理本质是一条流水线扫描 saves 目录 → 定位 level.dat → Gzip 解压 → libnbtplusplus 解析 NBT 树 → 提取名称/模式/时间/种子 → 界面展示与原地改写理解这条链路后你就能明白为什么损坏的level.dat会导致存档从列表中消失以及启动器的改名、复制、删存档等操作为什么能如此安全。赞分享【免费下载链接】LauncherThis fork of Prism Launcher adds integrated support for Ely.by accounts.项目地址https://gitcode.com/GitHub_Trending/ely/Launcher点击查看免费下载相关推荐如何快速管理我的世界存档Ely Prism Launcher 的 WorldList 功能完整指南如何快速管理我的世界存档Ely Prism Launcher 的 WorldList 功能完整指南 Ely Prism Launcher 是基于 PriEly Prism Launcher实例数据模型MinecraftInstance与BaseInstance完整解读Ely Prism Launcher实例数据模型MinecraftInstance与BaseInstance完整解读 Ely Prism Launcher 是如何用Ely Prism Launcher配置内存与JVM参数提升游戏FPS的完整教程如何用Ely Prism Launcher配置内存与JVM参数提升游戏FPS的完整教程 Ely Prism LauncherPineconeMC是一款基于创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考