MITE区块修改器


本程序仅供直观学习研究MITE矿物、基岩、地幔分布情况,
请勿用作其他用途!


使用方法:
备份存档
将要修改的区块文件和程序放在同一文件夹
开启程序,点击一键替换
程序会将区块文件中的石头替换为玻璃
将修改后的文件覆盖原文件即可



后续版本将支持自定义源方块和目标方块


下载地址:咕咕咕
(进度80%)

授人以鱼不如授人以渔
授人以渔不如授人以渔池


坐标对应X*Y*Z
一些定义:
区格:地图文件组成的最小保存单元。16*16*16
区块:Y轴方向16个区格组成一个区块。16*256*16
区域:由1024个区块组成,XZ各32个。512*256*512
文件头:记录区块数据偏移量的指针和时间戳
数据块:4096个字节组成的一段二进制数据
区块数据:由一个或多个数据块组成的二进制数据

mcb文件格式:
文件头+区块数据*1024

文件头:总共4096*2个字节
第一个4096字节,由4字节*1024组成,
第二个4096字节是时间戳,复制即可。

第一个4096字节结构如下(十六进制)
AA BB CC DD AA BB CC DD ......
一共1024个结构体,对应1024个区块,
AABBCC记录的是区块数据在mcb文件中从头开始的偏移字节数,
处理的时候,要将其做如下处理
偏移数=Cdec("&H"+AA+BB+CC+"00") * 16

DD记录的是这个区块占用的数据块个数
00:此区块未加载,此时AABBCC都是00
01:占用一个
02:占用两个
03:占用三个
04:占用四个
05:占用五个
目前暂未发现占用六个的,但不表示不会出现

下面解析区块数据
①占用一个数据块
结构如下
EE FF GG HH II P1 P2 P3 ...... PZ
其中EEFFGGHH记录的P1到PZ的字节个数+1,
II值恒定为“02”,
如果从EE到PZ的总字节数不足4096,
那么后面的字节将被“00”填充直到满4096个
②占用多个数据块
第一个数据块同上(不会出现“00”填充)
第二个数据块将紧接第一个数据块记录数据,
未能满足4096的部分则将被“00”填充。
1 - 5 //开头字节
6 - 4096 → 0 to 4090 //占用一个
6 - 4096+4096 → 0 to 8186 //占用两个

依次类推。

下面开始处理,有两种方法,
①计算字节个数N,然后从P1处开始读取(N-1)个字节。
②完全读取整个数据块,去掉开头的5个字节,
循环Remove掉末尾的“00”字节。

处理完毕后得到一个字节流streamA
将此字节流使用Zlib (RFC1950)解压缩
java中使用InflaterInputStream
Python中使用zlib库压缩率=6
.NET就放弃吧
解压缩后得到原始字节流streamB

下面开始解析streamB
我们需要修改其中的方块ID。
一段stream中包含这个区块的16个区格数据。
从头开始搜索字节直到找到blockdata标签,
开始标志“00 00 10 00”
4096个字节的方块ID
结束标志“00 7D 00”
特殊的,最后一个区格结束标志为“00 7C 00”
方块ID可在本站查询,数值上限为FF即255。
查询替换即可。

---------------------------------------------
合成新mcb过程

逆向zlib压缩得到StreamC

复制mcb到out文件夹,RW+打开

读取文件头指针和时间戳

解析streamC,得到长度,写数据块头,
写数据块,填入空字节“00”

保存流到文件



























雪花量2062