Zh:Map Format

From wiki.vg
Revision as of 01:53, 16 November 2019 by Kaniol (talk | contribs) (→‎Storage)
Jump to navigation Jump to search

本页面包含了自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)
    • 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
        • NBTList(Sections): Chunks
          • NBTCompound
            • NBTByte(Y): 0-16
            • NBTByteArray(BlockLight)
            • NBTByteArray(Blocks)
            • NBTByteArray(Data)
            • NBTByteArray(SkyLight)
        • NBTList(TileEntities)
        • NBTIntArray(HeightMap)

另见