C++ [全网首发] 迷你世界/我的世界/生存战争2存档转换

0 点赞
我的世界新鲜事
转载

继上次实现迷你世界与我的世界联机后,我又突发奇想,开始尝试生存战争 2 的兼容项目。 这次使用的是: - 我的世界国际基岩版 1.26.0(上次是 1.21.50) - 生存战争 2.4 联机版 依旧用 Go 语言开发,目前已经完成了生存战争 2 存档解析与方块翻译,网络协议部分也写了雏形,但联机功能先放一放,后续再完善。 生存战争 2 的方块格式真的非常折磨: 一个 int32 里同时塞了方块 ID、亮度、特殊值,全程靠位运算拆包、打包,逻辑极其繁琐。 我的解决思路是参考 gophertunnel 的 protocol.IO 设计,自己实现了一套支持双向读写的 bit.IO ,再通过一个统一的 Marshal 函数完成编码与解码,用起来还算方便。 之后又手动枚举了生存战争 2 里100 多种带特殊值的方块,一个个对照、映射,属实累麻了。 像箱子这类带有特殊 NBT/数据的方块逻辑还没写完,后续慢慢补全。 2 月 24 号开学后,能写代码的时间大幅压缩,基本只有周末能抽空推进。 同时还在重构之前的迷你世界翻译器,所以这次更新进度比较慢,望理解。 最后统一说下开源问题: 目前暂时不会开源。我不确定相关官方是否允许这类项目,风险暂不明确,所以先不开源。 也请不要再私信问我开源相关的问题了,感谢理解。 这里在额外 @ 几个,联合创作人数不够了:@jiru114514 @cat7street @坤寻