区域文件格式
此特性为Java版独有。
区块文件格式为在Minecraft Beta 1.3中为存储区块所引入的一种文件格式。其中每32×32个区块就会成为一组存储进一个独立的区域文件。可以这么认为,区域为整个文件系统的一部分,其中头文件用于确定每一个文件的位置、扇区则为所分配的大小。整个系统基于MCRegion[1],这是一个由Scaevolus编写的Mod。(他的Optifine项目也同样很有名。)MCRegion格式几乎未发生变化,除了向其中添加随时间戳更新的区块列表。Jahkob宣称这一全新的格式相比于之前的系统而言速度提高到7倍。[2]
在Minecraft 1.2中,区域文件被Anvil文件格式所取代;但是Anvil文件格式只对区块格式做出修改,只会将区域文件的文件名由“.mcr”修改为“.mca”。
目录
1 区域文件
1.1 区域文件的位置
1.2 结构
1.3 区块的位置
1.4 区块的时间戳
1.5 区块数据
2 数据迁移与level.dat
3 参见
4 外部链接
5 参考
区域文件[]
区域文件的位置[]
区域文件位于目录下名叫“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) 字节即可。如果进行模运算后的值为负(例如可能发生在Java/C/C++中的模运算),只需将模的结果加32,或者将mod 32换为& 31,如下:4 * ((x & 31) + (z & 31) * 32)。在区块信息之后4096字节为时间戳。文件的剩余部分包含了1024个区块的信息,并以大量的未使用空间点缀其间。
字节
0 - 4095
4096 - 8191
8192...
描述
位置 (1024 个实体)
时间戳 (1024 个实体)
区块和未使用空间
区块的位置[]
区域中所包含的区块的位置信息由4字节组成,分为两部分:前三个字节为自文件开始的偏移区段数(大端序),剩余的一个字节为区块数据的长度(以区段计)。每个区段的长度是4096字节。一个区块的数据的总大小最大为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中的其他部分未作改变。
参见[]
世界格式
区块格式
Anvil文件格式
外部链接[]
Mojang announcement of new region format; Jeb helping tool-makers
McRegion
RegionFile in Java
RegionFileCache in Java
Find region file from coordinates
参考[]
↑ http://www.minecraftforum.net/viewtopic.php?f=25&t=120160&start=510#p2619453
↑ http://www.pcgamer.com/2011/02/09/minecraft-dev-diary-new-block-magic-fiddles/
Java版
版本
演示版
地点
PC Gamer演示版(Beta 1.3)
开发周期
版本记录
pre-Classic
Classic
Classic早期创造
多人测试
生存测试
Classic后期创造
Indev
Infdev
Alpha
Beta
正式版
开发版本
已移除特性
方块
物品
配方
未使用特性
独有特性
提及特性
计划版本
技术
已知漏洞
启动器
Minecraft API
硬件需求
al_version
方块实体
命令
函数
崩溃
数据值
Classic
Indev
扁平化前
数据版本
调试屏幕
格式化代码
键控代码
启动器
命名空间ID
协议版本
截屏
种子
统计信息
刻
出生点区块
坐标
世界加载屏幕
.minecraft
client.jar
client.json
launcher_profiles.json
options.txt
开发资源
Anvil文件格式
区块格式
命令存储格式
世界格式
战利品表
随机序列格式
地图物品格式
模型
Mojang API
NBT格式
混淆映射表
实体格式
生物记忆
Player格式
兴趣点文件格式
raids.dat格式
区域文件格式
结构文件格式
Schematic文件格式
记分板格式
已保存的快捷栏格式
服务器列表格式
原始JSON文本格式
sounds.json
字幕
已配置的地物
已配置的结构地物
过时开发资源
Classic世界格式
Classic服务器协议
Indev世界格式
Alpha世界格式
材料
server_level.dat
结构生成格式
villages格式
已配置的地表生成器
多人游戏
服务器
Minecraft Realms
服务器列表
server.properties
服务器需求
定制服务器
游戏订制
皮肤
披风
资源包
数据包
语言
Deutsch
English
français
日本語
Nederlands