Difference between revisions of "Zh:Map Format"
Jump to navigation
Jump to search
(Created page with "本页面包含了自1.2.5至今的世界信息。有关Alpha信息,另见Alpha地图格式。 == 一般信息 == 世界以一连串区域表示,...") |
m (→一般信息) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
本页面包含了自1.2.5至今的世界信息。有关Alpha信息,另见[[ZH:Alpha Map Format|Alpha地图格式]]。 | 本页面包含了自1.2.5至今的世界信息。有关Alpha信息,另见[[ZH:Alpha Map Format|Alpha地图格式]]。 | ||
− | == | + | == 常规信息 == |
世界以一连串区域表示,其中包含了许多纵列和区块。每个区域是32x1x32的纵列,每个纵列是1x16x1的区块,而每个区块是16x16x16的方块。一个纵列的总高度是256。每个区块存储4(或5)个东西——方块ID(8位)、方块元信息(4位)、方块光照(4位)和天空光照(4位)。可选的第五个值为“add”数据,它是要加到方块ID的四位来支持额外的方块ID(不用于原版Minecraft)。方块光照是由如火把和萤石投射的光照,并使用3D[http://en.wikipedia.org/wiki/Flood_fill Flood Fill]算法计算。天空光照是由天空投射的光照,并使用从上而下计算。当透过半透明方块时会降低亮度值直至遇上不透明方块。不透明方块是天空光照拥有非零值的最后一个方块。亮度从0xF(最亮)开始,一直到0x0(最暗)。纵列存储生物群系信息。每1x256x1长方体的方块拥有相同的生物群系值,每个区块(16x16)拥有共256种可能的生物群系值。生物群系以字节存储。 | 世界以一连串区域表示,其中包含了许多纵列和区块。每个区域是32x1x32的纵列,每个纵列是1x16x1的区块,而每个区块是16x16x16的方块。一个纵列的总高度是256。每个区块存储4(或5)个东西——方块ID(8位)、方块元信息(4位)、方块光照(4位)和天空光照(4位)。可选的第五个值为“add”数据,它是要加到方块ID的四位来支持额外的方块ID(不用于原版Minecraft)。方块光照是由如火把和萤石投射的光照,并使用3D[http://en.wikipedia.org/wiki/Flood_fill Flood Fill]算法计算。天空光照是由天空投射的光照,并使用从上而下计算。当透过半透明方块时会降低亮度值直至遇上不透明方块。不透明方块是天空光照拥有非零值的最后一个方块。亮度从0xF(最亮)开始,一直到0x0(最暗)。纵列存储生物群系信息。每1x256x1长方体的方块拥有相同的生物群系值,每个区块(16x16)拥有共256种可能的生物群系值。生物群系以字节存储。 | ||
Line 8: | Line 8: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! | + | ! 名称 |
− | ! | + | ! 值 |
|- | |- | ||
− | | | + | | 海洋 |
| 0 | | 0 | ||
|- | |- | ||
− | | | + | | 平原 |
| 1 | | 1 | ||
|- | |- | ||
− | | | + | | 沙漠 |
| 2 | | 2 | ||
|- | |- | ||
− | | | + | | 峭壁 |
| 3 | | 3 | ||
|- | |- | ||
− | | | + | | 森林 |
| 4 | | 4 | ||
|- | |- | ||
− | | | + | | 针叶林 |
| 5 | | 5 | ||
|- | |- | ||
− | | | + | | 沼泽 |
| 6 | | 6 | ||
|- | |- | ||
− | | | + | | 河流 |
| 7 | | 7 | ||
|- | |- | ||
− | | | + | | 下界 |
| 8 | | 8 | ||
|- | |- | ||
− | | | + | | 末地 |
| 9 | | 9 | ||
|- | |- | ||
− | | | + | | 冻洋 |
| 10 | | 10 | ||
|- | |- | ||
− | | | + | | 冻河 |
| 11 | | 11 | ||
|- | |- | ||
− | | | + | | 积雪的冻原 |
| 12 | | 12 | ||
|- | |- | ||
− | | | + | | 积雪的山地 |
| 13 | | 13 | ||
|- | |- | ||
− | | | + | | 蘑菇岛 |
| 14 | | 14 | ||
|- | |- | ||
− | | | + | | 蘑菇岛岸 |
| 15 | | 15 | ||
|- | |- | ||
− | | | + | | 沙滩 |
| 16 | | 16 | ||
|- | |- | ||
− | | | + | | 沙漠丘陵 |
| 17 | | 17 | ||
|- | |- | ||
− | | | + | | 森林丘陵 |
| 18 | | 18 | ||
|- | |- | ||
− | | | + | | 针叶林丘陵 |
| 19 | | 19 | ||
|- | |- | ||
− | | | + | | 峭壁边缘 |
| 20 | | 20 | ||
|- | |- | ||
− | | | + | | 丛林 |
| 21 | | 21 | ||
|- | |- | ||
− | | | + | | 丛林丘陵 |
| 22 | | 22 | ||
|} | |} | ||
− | == | + | == 存储 == |
− | + | 这一节记载了服务器Anvil格式的相关文档。 | |
− | + | 地图被存储为特定的包含一些[[ZH:NBT|NBT]]文件的目录结构。为了举例,我们将存储要用的世界的文件夹叫做“/world” | |
− | === | + | === 目录结构 === |
− | * /world/data: | + | * /world/data: 未使用 |
− | * /world/DIM-1: | + | * /world/DIM-1: 下界世界 |
− | * /world/DIM-1/region: | + | * /world/DIM-1/region: 下界世界区域 |
− | * /world/DIM1: | + | * /world/DIM1: 末地世界 |
− | * /world/DIM1/region: | + | * /world/DIM1/region: 末地世界区域 |
− | * /world/players: | + | * /world/players: 玩家数据 |
− | * /world/region: | + | * /world/region: 主世界区域 |
− | ===level.dat=== | + | === level.dat === |
− | + | 根目录中有一个level.dat文件。这个文件的结构是这样的: | |
* NBTCompound(Data) | * NBTCompound(Data) | ||
** NBTByte(hardcore) | ** NBTByte(hardcore) | ||
− | ** NBTByte(MapFeatures): | + | ** NBTByte(MapFeatures): 设置为1表示结构(例如村庄)已生成。 |
− | ** NBTByte(raining): | + | ** NBTByte(raining): 设置为1表示当前正在下雨 |
− | ** NBTByte(thundering): | + | ** NBTByte(thundering): 设置为1表示当前正在打雷(仅是有打雷的可能性,而不是当前正在打雷) |
** NBTInt(GameType) | ** NBTInt(GameType) | ||
− | ** NBTInt(generatorVersion): | + | ** NBTInt(generatorVersion): 0表示1.2.5 |
− | ** NBTInt(rainTime): | + | ** NBTInt(rainTime): 雨停剩余的游戏刻数? |
** NBTInt(SpawnX) | ** NBTInt(SpawnX) | ||
** NBTInt(SpawnY) | ** NBTInt(SpawnY) | ||
** NBTInt(SpawnZ) | ** NBTInt(SpawnZ) | ||
** NBTInt(thunderTime) | ** NBTInt(thunderTime) | ||
− | ** NBTInt(version): | + | ** NBTInt(version): 19133表示1.2.5 |
** NBTLong(LastPlayed) | ** NBTLong(LastPlayed) | ||
** NBTLong(RandomSeed) | ** NBTLong(RandomSeed) | ||
− | ** NBTLong(SizeOnDisk): | + | ** NBTLong(SizeOnDisk): 总为0,表示1.2.5 |
** NBTLong(Time) | ** NBTLong(Time) | ||
** NBTString(generatorName) | ** NBTString(generatorName) | ||
Line 123: | Line 123: | ||
===[playeruuid].dat=== | ===[playeruuid].dat=== | ||
− | + | 每个曾经连接过的玩家都会有一个[playeruuid].dat文件 | |
* NBTCompound | * NBTCompound | ||
Line 131: | Line 131: | ||
** NBTShort(AttackTime) | ** NBTShort(AttackTime) | ||
** NBTShort(DeathTime) | ** NBTShort(DeathTime) | ||
− | ** NBTShort(Fire): | + | ** NBTShort(Fire): 玩家身上的火熄灭剩余的时间,或为0 |
** NBTShort(Health) | ** NBTShort(Health) | ||
** NBTShort(HurtTime) | ** NBTShort(HurtTime) | ||
Line 149: | Line 149: | ||
**** NBTByte(Count) | **** NBTByte(Count) | ||
**** NBTByte(Slot) | **** NBTByte(Slot) | ||
− | **** NBTShort(Damage): | + | **** NBTShort(Damage): 伤害值或元数据 |
**** NBTShort(id) | **** NBTShort(id) | ||
** NBTList(Motion) | ** NBTList(Motion) | ||
Line 165: | Line 165: | ||
===[region].mca=== | ===[region].mca=== | ||
− | + | 每个区域文件都被命名为“r.x.z.mca”,其中x和z为坐标。这些坐标是相对于每个区域的。给定列坐标,将它们除以32即可得到区域坐标。 | |
* NBTCompound | * NBTCompound | ||
− | ** NBTCompound(Chunk [x,z]): | + | ** NBTCompound(Chunk [x,z]): x和z是区域列坐标,不相对于整个世界。compound的名称是一个误称,它实际上表示一列。 |
*** NBTCompound(Level) | *** NBTCompound(Level) | ||
− | **** NBTByte(TerrainPopulated): | + | **** NBTByte(TerrainPopulated): 1表示该列已经生成 |
− | **** NBTInt(xPos): | + | **** NBTInt(xPos): 全局的,世界相关的区块坐标 |
− | **** NBTInt(yPos): | + | **** NBTInt(yPos): 全局的,世界相关的区块坐标 |
− | **** NBTLong(LastUpdate): | + | **** NBTLong(LastUpdate): 上一次该列中方块被更改的时间 |
**** NBTByteArray(Biomes) | **** NBTByteArray(Biomes) | ||
**** NBTList(Entities) | **** NBTList(Entities) | ||
Line 185: | Line 185: | ||
****** NBTShort(HurtTime) | ****** NBTShort(HurtTime) | ||
****** NBTFloat(FallDistance) | ****** NBTFloat(FallDistance) | ||
− | ****** NBTString(id): | + | ****** NBTString(id): 例如:“Skeleton” |
****** NBTList(Motion) | ****** NBTList(Motion) | ||
******* NBTDouble | ******* NBTDouble | ||
Line 205: | Line 205: | ||
****** NBTByteArray(SkyLight) | ****** NBTByteArray(SkyLight) | ||
**** NBTList(TileEntities) | **** NBTList(TileEntities) | ||
− | ***** [ | + | ***** [https://minecraft-zh.gamepedia.com/区块格式#方块实体值格式 见此] |
**** NBTIntArray(HeightMap) | **** NBTIntArray(HeightMap) | ||
Latest revision as of 01:54, 16 November 2019
本页面包含了自1.2.5至今的世界信息。有关Alpha信息,另见Alpha地图格式。
常规信息
世界以一连串区域表示,其中包含了许多纵列和区块。每个区域是32x1x32的纵列,每个纵列是1x16x1的区块,而每个区块是16x16x16的方块。一个纵列的总高度是256。每个区块存储4(或5)个东西——方块ID(8位)、方块元信息(4位)、方块光照(4位)和天空光照(4位)。可选的第五个值为“add”数据,它是要加到方块ID的四位来支持额外的方块ID(不用于原版Minecraft)。方块光照是由如火把和萤石投射的光照,并使用3DFlood Fill算法计算。天空光照是由天空投射的光照,并使用从上而下计算。当透过半透明方块时会降低亮度值直至遇上不透明方块。不透明方块是天空光照拥有非零值的最后一个方块。亮度从0xF(最亮)开始,一直到0x0(最暗)。纵列存储生物群系信息。每1x256x1长方体的方块拥有相同的生物群系值,每个区块(16x16)拥有共256种可能的生物群系值。生物群系以字节存储。
生物群系值
名称 | 值 |
---|---|
海洋 | 0 |
平原 | 1 |
沙漠 | 2 |
峭壁 | 3 |
森林 | 4 |
针叶林 | 5 |
沼泽 | 6 |
河流 | 7 |
下界 | 8 |
末地 | 9 |
冻洋 | 10 |
冻河 | 11 |
积雪的冻原 | 12 |
积雪的山地 | 13 |
蘑菇岛 | 14 |
蘑菇岛岸 | 15 |
沙滩 | 16 |
沙漠丘陵 | 17 |
森林丘陵 | 18 |
针叶林丘陵 | 19 |
峭壁边缘 | 20 |
丛林 | 21 |
丛林丘陵 | 22 |
存储
这一节记载了服务器Anvil格式的相关文档。
地图被存储为特定的包含一些NBT文件的目录结构。为了举例,我们将存储要用的世界的文件夹叫做“/world”
目录结构
- /world/data: 未使用
- /world/DIM-1: 下界世界
- /world/DIM-1/region: 下界世界区域
- /world/DIM1: 末地世界
- /world/DIM1/region: 末地世界区域
- /world/players: 玩家数据
- /world/region: 主世界区域
level.dat
根目录中有一个level.dat文件。这个文件的结构是这样的:
- NBTCompound(Data)
- NBTByte(hardcore)
- NBTByte(MapFeatures): 设置为1表示结构(例如村庄)已生成。
- NBTByte(raining): 设置为1表示当前正在下雨
- NBTByte(thundering): 设置为1表示当前正在打雷(仅是有打雷的可能性,而不是当前正在打雷)
- NBTInt(GameType)
- NBTInt(generatorVersion): 0表示1.2.5
- NBTInt(rainTime): 雨停剩余的游戏刻数?
- NBTInt(SpawnX)
- NBTInt(SpawnY)
- NBTInt(SpawnZ)
- NBTInt(thunderTime)
- NBTInt(version): 19133表示1.2.5
- NBTLong(LastPlayed)
- NBTLong(RandomSeed)
- NBTLong(SizeOnDisk): 总为0,表示1.2.5
- NBTLong(Time)
- NBTString(generatorName)
- NBTString(LevelName)
[playeruuid].dat
每个曾经连接过的玩家都会有一个[playeruuid].dat文件
- NBTCompound
- NBTByte(OnGround)
- NBTByte(Sleeping)
- NBTShort(Air)
- NBTShort(AttackTime)
- NBTShort(DeathTime)
- NBTShort(Fire): 玩家身上的火熄灭剩余的时间,或为0
- NBTShort(Health)
- NBTShort(HurtTime)
- NBTShort(SleepTimer)
- NBTInt(Dimension)
- NBTInt(foodLevel)
- NBTInt(foodTickTimer)
- NBTInt(playerGameType)
- NBTInt(XpLevel)
- NBTInt(XpTotal)
- NBTFloat(FallDistance)
- NBTFloat(foodExhastionLevel)
- NBTFloat(foodSaturationLevel)
- NBTFloat(XpP)
- NBTCompound(Inventory)
- NBTCompound
- NBTByte(Count)
- NBTByte(Slot)
- NBTShort(Damage): 伤害值或元数据
- NBTShort(id)
- NBTCompound
- NBTList(Motion)
- NBTDouble
- NBTDouble
- NBTDouble
- NBTList(Pos)
- NBTDouble
- NBTDouble
- NBTDouble
- NBTList(Rotation)
- NBTFloat
- NBTFloat
[region].mca
每个区域文件都被命名为“r.x.z.mca”,其中x和z为坐标。这些坐标是相对于每个区域的。给定列坐标,将它们除以32即可得到区域坐标。
- NBTCompound
- NBTCompound(Chunk [x,z]): x和z是区域列坐标,不相对于整个世界。compound的名称是一个误称,它实际上表示一列。
- NBTCompound(Level)
- NBTByte(TerrainPopulated): 1表示该列已经生成
- NBTInt(xPos): 全局的,世界相关的区块坐标
- NBTInt(yPos): 全局的,世界相关的区块坐标
- NBTLong(LastUpdate): 上一次该列中方块被更改的时间
- NBTByteArray(Biomes)
- NBTList(Entities)
- NBTCompound
- NBTByte(OnGround)
- NBTShort(Air)
- NBTShort(AttackTime)
- NBTShort(DeathTime)
- NBTShort(Fire)
- NBTShort(Health)
- NBTShort(HurtTime)
- NBTFloat(FallDistance)
- NBTString(id): 例如:“Skeleton”
- NBTList(Motion)
- NBTDouble
- NBTDouble
- NBTDouble
- NBTList(Pos)
- NBTDouble
- NBTDouble
- NBTDouble
- NBTList(Rotation)
- NBTFloat
- NBTFloat
- NBTCompound
- NBTList(Sections): Chunks
- NBTCompound
- NBTByte(Y): 0-16
- NBTByteArray(BlockLight)
- NBTByteArray(Blocks)
- NBTByteArray(Data)
- NBTByteArray(SkyLight)
- NBTCompound
- NBTList(TileEntities)
- NBTIntArray(HeightMap)
- NBTCompound(Level)
- NBTCompound(Chunk [x,z]): x和z是区域列坐标,不相对于整个世界。compound的名称是一个误称,它实际上表示一列。