此特性为Java版独有。
区块文件格式为在Minecraft Beta 1.3中为存储区块所引入的一种文件格式。其中每32×32个区块就会成为一组存储进一个独立的区域文件。可以这么认为,区域为整个文件系统的一部分,其中头文件用于确定每一个文件的位置、扇区则为所分配的大小。整个系统基于MCRegionScaevolus编写的Mod。(他的Optifine项目也同样很有名。)MCRegion格式几乎未发生变化,除了向其中添加随时间戳更新的区块列表。Jahkob宣称这一全新的格式相比于之前的系统而言速度提高到7倍。
在Minecraft 1.2中,区域文件被Anvil文件格式所取代;但是Anvil文件格式只对区块格式做出修改,只会将区域文件的文件名由“.mcr”修改为“.mca”。
区域文件[]
区域文件的位置[]
区域文件位于目录下名叫“region”的子文件中,并以r.x.z.mcr的命名方式进行命名(其中x和z为区域的坐标)。为了计算某一区块所属的区域的坐标,将区块坐标除以32即可。
在Java中:
int localX = (int)floor(chunkX / 32.0);
int localZ = (int)floor(chunkZ / 32.0);
在对位进行操作时(移位):
int localX = chunkX >> 5
int localZ = chunkZ >> 5
举例来说,坐标为(30, -3)的区块位于(0,-1)的区域中;而坐标为(70, -30)的区块位于(2,-1)的区域中。
结构[]
区域文件以 8kB 文件头开头,其中包含了该区域文件所包括的区块信息(最后更新的时间以及方位等)。区块坐标为(x,z)的区块在所在区域中的位置可以按如下方式找到:在区域文件中偏移4 * ((x mod 32) + (z mod 32) * 32) 字节即可。针对于x或z可能为负的情况,在计算其模数后需要以31减去其绝对值。在区块信息之后4096字节为时间戳。文件的剩余部分包含了1024个区块的信息,并以大量的未使用空间点缀其间。
字节
0 - 4095
4096 - 8191
8192...
描述
位置 (1024 个实体)
时间戳 (1024 个实体)
区块和未使用空间
区块的位置[]
区域中所包含的区块的位置信息由4字节组成,分为两部分:前三个字节为自文件开始的4KB区段中的偏移信息(高位优先),剩余的一个字节为区块的长度(也在4KB区段中,四舍五入)。区块的总大小最大为1MB。如果区块并未包含在所对应的区域文件中(如该区块还未生成或还未迁移),则该部分会全部为零。
字节
0
1
2
3
描述
偏移
区段数
偏移为2的区块会在时间戳列表结束后开始。
区块的时间戳[]
时间戳列表的入口地址为独立的四字节高位优先的整值变量,代表了该区块的最后修改时间。
字节
0
1
2
3
描述
时间戳
区块数据[]
区块数据以一个长度为四字节的(高位优先的)数据开头,代表了区块以字节计的实际大小(包括偏移4处的压缩类型在内)。之后的一个字节表示区块数据的压缩方法。剩余的数据为压缩的区块数据。
字节
0
1
2
3
4
5...
描述
长度(以字节计)
压缩类型
压缩后的数据(数据长度为偏移0处记录的长度值减1)
当前有两种压缩方法:
数值
方法
1
GZip (RFC1952) (在实际中未得到应用)
2
Zlib (RFC1950)
3
不压缩数据(在实际中未得到应用)
被压缩的数据(在压缩前)以NBT格式进行保存,详细的信息请参见区块格式页面。如果使用第一种压缩算法,压缩后的文件与Alpha区块文件的磁盘目录相同。值得注意的是在官方客户端中使用的是第2种压缩算法。
如果将文件中压缩方法的值增加128,那么压缩后的数据将存放于同目录下一个名为c.x.z.mcc的文件(其中x和z是区块的坐标),而不是紧跟在压缩方法这个字节后面。这可能是为了存储过大以至于不适合直接保存于mca文件中的区块。
数据迁移与level.dat[]
Minecraft在转换至新版本时的界面样子。
在Beta 1.3中会在载入世界之前将任何"较早"版本的区块转换至区域文件之中,而不是在随着游戏的进行逐渐进行转换。在转化的过程中,level.dat会更新TAG_Int("version(版本)")至19132版本。Beta 1.3同时也引入了一种新的世界命名空间,TAG_String("LevelName")。也引入了在玩家复合标签(TAG_Compounds),(单人游戏为level.dat,多人游戏为[player name].dat)中新的标签,TAG_Byte("Sleeping"),这一标签用于确定玩家是否在睡觉。其值非真(1)即假(0)。 在版本beta 1.8中添加了TAG_Int("GameType");在版本beta 1.9中添加了TAG_byte("hardcore")。
在level.dat中的其他部分未作改变。
参见[]
外部链接[]
参考[]