本帖最后由 SkinBBS 于 2019-9-19 11:41 编辑
其实也可以发原版问答的...但是想想因为是 mod 开发中遇到的问题, 还是发编程版了...= =
一直以为是以方块(竖着的一排方块)为最小单位(因为以前用那个史诗地形插件, 它为了达到好看的效果会修改生物群系, 所以我确实在服务器里见到过周围都是草原, 只有一个方块是丛林的). 但是前段时间看 wiki 中 region 的储存格式, 发现其储存生物群系的最小单位是区块, 并不给单排方块设置生物群系. 但是在区块加载器的代码中我确实又看到了在区块中以 BlockPos 为参数获取生物群系的方法....所以问一下各位 dalao, 生物群系的最小单位是什么?
附上根据方块获取生物群系的代码:
复制代码
问题解决后再加一句: 虽然生物群系是以单排方块为最小单位, 但是区块的生物群系使用的是此区块内最中间的那个方块的生物群系. 即便其他 255 排方块都是草原, 只要最中间那个方块是丛林, 那此区块也会被认定为丛林生物群系. 而区块生物群系又影响着结构生成. 所以理论上只要有几个合适的中心区块为深海, 那海底遗迹生成在草原上也没什么不可能
其实也可以发原版问答的...但是想想因为是 mod 开发中遇到的问题, 还是发编程版了...= =
一直以为是以方块(竖着的一排方块)为最小单位(因为以前用那个史诗地形插件, 它为了达到好看的效果会修改生物群系, 所以我确实在服务器里见到过周围都是草原, 只有一个方块是丛林的). 但是前段时间看 wiki 中 region 的储存格式, 发现其储存生物群系的最小单位是区块, 并不给单排方块设置生物群系. 但是在区块加载器的代码中我确实又看到了在区块中以 BlockPos 为参数获取生物群系的方法....所以问一下各位 dalao, 生物群系的最小单位是什么?
附上根据方块获取生物群系的代码:
- Biome biome_1 = this.getDecorationBiome(chunkRegion_1, blockPos_1.add(8, 8, 8));
问题解决后再加一句: 虽然生物群系是以单排方块为最小单位, 但是区块的生物群系使用的是此区块内最中间的那个方块的生物群系. 即便其他 255 排方块都是草原, 只要最中间那个方块是丛林, 那此区块也会被认定为丛林生物群系. 而区块生物群系又影响着结构生成. 所以理论上只要有几个合适的中心区块为深海, 那海底遗迹生成在草原上也没什么不可能
的确是以1*1*256为最小单位,最近的快照才做修改。
https://www.mcbbs.net/thread-914215-1-1.html
https://www.mcbbs.net/thread-914215-1-1.html
本帖最后由 3TUSK 于 2019-9-19 11:46 编辑
不要管楼上,你一开始的理解是对的。
试着思考一下:为什么生物群系可以精确到方块?那些河流为什么不是一个区块一个区块的分布,而是有精确到方块(X-Z 平面)的边界?
存储的时候是“压缩”成一个数组(MCP 1.12 stable_39 Chunk.blockBiomeArray,field_76651_r)存储的。这一整个数组作为区块数据的一部分呈现。所以
某种意义上也是对的。
新版 Minecraft 的情况有可能不太一样,但既然一个区块里仍然可以有不一样的生物群系,那最小单位就仍然是方块(X-Z 平面)。
最新的快照里说是扩展到了 XYZ 空间,但这个说法缺了对反编译结果的分析。
一直以为是以方块(竖着的一排方块)为最小单位
不要管楼上,你一开始的理解是对的。
试着思考一下:为什么生物群系可以精确到方块?那些河流为什么不是一个区块一个区块的分布,而是有精确到方块(X-Z 平面)的边界?
存储的时候是“压缩”成一个数组(MCP 1.12 stable_39 Chunk.blockBiomeArray,field_76651_r)存储的。这一整个数组作为区块数据的一部分呈现。所以
储存生物群系的最小单位是区块
某种意义上也是对的。
新版 Minecraft 的情况有可能不太一样,但既然一个区块里仍然可以有不一样的生物群系,那最小单位就仍然是方块(X-Z 平面)。
最新的快照里说是扩展到了 XYZ 空间,但这个说法缺了对反编译结果的分析。
3TUSK 发表于 2019-9-19 11:42
不要管楼上,你一开始的理解是对的。
试着思考一下:为什么生物群系可以精确到方块?那些河流为什么不是一 ...
谢谢dalao, 去 wiki 上找了一下, 在区块数据内确实找到了 biome 数据, 是以一排方块作为单位储存的
Biomes:256字节的生物群系信息,有些区块可能不具备该信息。区块内垂直的一列占用一字节空间,生物群系ID可在数据值页面查看。如果这个数组不存在,游戏在加载和保存区块时会自动根据世界的种子添加并赋值;若数组内任何数值为“-1”,游戏也会根据正确信息改正。
看来单排方块是可以有自己的生物群系的...