开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[闲聊] 写了个NBT库

 发表于 2024-3-10 10:34:18|显示全部楼层|阅读模式 IP:福建省
本帖最后由 开心的阿诺 于 2024-3-10 10:33 编辑

屑项目,掏出来让大佬们见笑了 xd:https://github.com/HappyArno/LightNBT

很早之前就曾因机缘巧合了解过NBT的文件格式,于是就突发奇想,开始用C++写一个自己的NBT库,也算是学了不少东西
这个项目从上学期就开始写了,但由于住宿在学校,只有周末回家才能摸到电脑,再加上学习压力,所以慢悠悠地写到寒假才正式竣工
这两个周末又把SNBT的读取功能完善了,便乘这个机会来水一帖(什么?你说SNBT的输出呢?目前这部分代码还有很大的改进空间,于是就当做示例力 qwq)



这个库的功能也很简单,就是解析NBT/SNBT然后构造树状的NBT结构,并提供了一些函数方便访问数据,具体看项目README
关于NBT树状数据的访问,我受 JS 的 optional chaining (?.) 很大的启发,在实现了常规返回引用抛出异常的 get 函数以外,还另外实现了一系列返回指针的 get_if 函数,让一整个函数链上出现 nullptr 时仍可以按预期运行
另外C++20新加入的概念(concept)实在是太香啦~ 比之前的 type trait 单纯靠 SFINAE 好多啦~ 另外还有一堆新东西(协程、模块、三路比较等等),赶快成为编译器的默认标准啊 awa
在写代码的时候经受的最惨痛的教训莫过于读取NBT文件的时候一定!一定!一定!要记得用二进制格式打开,当时害得我调试了一天,又是gdb又是自定义io流,整得整个人都不好了,最后才发现是忘记标一个小小的ios::binary标识 qwq



我的代码肯定会有一些问题和漏洞,还有不优雅的地方,希望大佬们能够赐教~
预计将来肯定要做的就是支持.mca文件还有基岩版特有的带8比特文件头的level.dat,另外还希望能找到一个通用的NBT流式处理框架,虽然不太现实 xd

苦力怕论坛,感谢有您~
 发表于 2024-3-10 13:16:11 来自手机|显示全部楼层 IP:北京
坛➗我佬
2#2024-3-10 13:16:11收起回复
开心的阿诺2024-3-10 14:01IP:福建省
回复举报
膜拜大佬(高呼)
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-12-13 08:31

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号-3