Difference between revisions of "User:Chibill/Map Format"
(Update level.dat) |
|||
Line 10: | Line 10: | ||
− | This page covers the world information as of | + | This page covers the world information as of 17w47a to the present. See [[Alpha Map Format]] for Alpha information. See [[..]] for Information before the "Flattening". |
==General Information== | ==General Information== | ||
− | Worlds are represented as a series of regions, within which are a number of columns, and chunks. Each region is 32x1x32 columns, each column is 1x16x1 chunks, and each chunk is 16x16x16 blocks. The overall block height of a column is 256. Each chunk stores four (or five) things - block | + | Worlds are represented as a series of regions, within which are a number of columns, and chunks. Each region is 32x1x32 columns, each column is 1x16x1 chunks, and each chunk is 16x16x16 blocks. The overall block height of a column is 256. Each chunk stores four (or five) things - block state array (Long Array), block light (4-bit),palette, and sky light (4-bit).Block light is light cast by things like torches and glowstone, and is calculated with a 3D [http://en.wikipedia.org/wiki/Flood_fill Flood Fill] algorithm. Sky light is the light cast by the sky, and is calculated by starting at the top and working your way down. As you pass through semi-transparent blocks, you decrease the lighting value until you hit an opaque block. The opaque block is the last block whose skylight has a nonzero value. Lighting starts at 0xF (brightest) and works down to 0x0 (dimmest). Columns store biome information. Each 1x256x1 cuboid of blocks has the same biome value, for a total of 256 possible biome values per chunk (16x16). Biome values are stored as bytes. |
===Biome Values=== | ===Biome Values=== | ||
Line 113: | Line 113: | ||
* NBTCompound(Data) | * NBTCompound(Data) | ||
+ | ** NBTCompound(DataPacks) | ||
+ | *** NBTList(Disabled) | ||
+ | *** NBTList(Enabled): Generally contains the string "vanilla" | ||
+ | ** NBTCompound(DimensionData) | ||
+ | *** NBTCompound(1) | ||
+ | **** NBTCompound(DragonFight) | ||
+ | ***** NBTList(Gateways) | ||
+ | ***** NBTByte(DragonKilled) | ||
+ | ***** NBTByte(PreviouslyKilled) | ||
+ | ** NBTCompound(GameRules) | ||
+ | *** NBTString(announceAdvancemtns): One for each game rule with the value being the game rules value. | ||
+ | ** NBTCompound(Version) | ||
+ | *** NBTInt(Id): 1451 for 17w47a | ||
+ | *** NBTString(Name): Name of the version | ||
+ | *** NBTByte(Snapshot): If the version is a snapshot | ||
+ | ** NBTDouble(BoarderCenterX) | ||
+ | ** NBTDouble(BoarderCenterZ) | ||
+ | ** NBTDouble(BoarderDamagerPerBlock) | ||
+ | ** NBTDouble(BorderSafeZone) | ||
+ | ** NBTDouble(BoarderSize) | ||
+ | ** NBTDouble(BorderSizeLerpTarget) | ||
+ | ** NBTLong(BorderSizeLerpTime) | ||
+ | ** NBTDouble(BoarderWarningBlocks) | ||
+ | ** NBTDouble(BoarderWarningTime) | ||
+ | ** NBTInt(clearWeatherTime) | ||
+ | ** NBTInt(DataVersion) | ||
+ | ** NBTLong(DayTime) | ||
+ | ** NBTByte(Difficulty) | ||
+ | ** NBTByte(DifficultyLocked) | ||
+ | ** NBTInt(GameType) | ||
+ | ** NBTString(generatorName) | ||
+ | ** NBTString(generatorOptions) | ||
+ | ** NBTInt(generatorVersion) | ||
** NBTByte(hardcore) | ** NBTByte(hardcore) | ||
+ | ** NBTByte(initialized) | ||
+ | ** NBTLong(LastPlayed) | ||
+ | ** NBTString(LevelName) | ||
** NBTByte(MapFeatures): Set to 1 if structures are generated, such as villages | ** NBTByte(MapFeatures): Set to 1 if structures are generated, such as villages | ||
** NBTByte(raining): Set to 1 if currently raining | ** NBTByte(raining): Set to 1 if currently raining | ||
− | |||
− | |||
− | |||
** NBTInt(rainTime): The ticks remaining until rain stops? | ** NBTInt(rainTime): The ticks remaining until rain stops? | ||
+ | ** NBTLong(RandomSeed) | ||
+ | ** NBTLong(SizeOnDisk): Has been 0 since 1.2.5 (Weird? Whats the point of this?) | ||
** NBTInt(SpawnX) | ** NBTInt(SpawnX) | ||
** NBTInt(SpawnY) | ** NBTInt(SpawnY) | ||
** NBTInt(SpawnZ) | ** NBTInt(SpawnZ) | ||
+ | ** NBTByte(thundering): Set to 1 if currently thundering (only if there is potential for thunder, not if a thunderbolt is currently in progress) | ||
** NBTInt(thunderTime) | ** NBTInt(thunderTime) | ||
− | ** NBTInt(version | + | ** NBTInt(version) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===[playeruuid].dat=== | ===[playeruuid].dat=== |
Revision as of 06:11, 18 December 2017
Rewrite in progress
|
This page covers the world information as of 17w47a to the present. See Alpha Map Format for Alpha information. See [[..]] for Information before the "Flattening".
Contents
General Information
Worlds are represented as a series of regions, within which are a number of columns, and chunks. Each region is 32x1x32 columns, each column is 1x16x1 chunks, and each chunk is 16x16x16 blocks. The overall block height of a column is 256. Each chunk stores four (or five) things - block state array (Long Array), block light (4-bit),palette, and sky light (4-bit).Block light is light cast by things like torches and glowstone, and is calculated with a 3D Flood Fill algorithm. Sky light is the light cast by the sky, and is calculated by starting at the top and working your way down. As you pass through semi-transparent blocks, you decrease the lighting value until you hit an opaque block. The opaque block is the last block whose skylight has a nonzero value. Lighting starts at 0xF (brightest) and works down to 0x0 (dimmest). Columns store biome information. Each 1x256x1 cuboid of blocks has the same biome value, for a total of 256 possible biome values per chunk (16x16). Biome values are stored as bytes.
Biome Values
Name | Value |
---|---|
Ocean | 0 |
Plains | 1 |
Desert | 2 |
Extreme Hills | 3 |
Forest | 4 |
Taiga | 5 |
Swampland | 6 |
River | 7 |
Hell | 8 |
Sky | 9 |
Frozen Ocean | 10 |
Frozen River | 11 |
Ice Plains | 12 |
Ice Mountains | 13 |
Mushroom Island | 14 |
Mushroom Island Shore | 15 |
Beach | 16 |
Desert Hills | 17 |
Forest Hills | 18 |
Taiga Hills | 19 |
Extreme Hills Edge | 20 |
Jungle | 21 |
Jungle Hills | 22 |
Storage
This section documents the Anvil format for servers.
Maps are stored as a specific directory structure with several NBT files within. For the sake of examples, the world we'll be working with is stored in a folder called "/world".
Directory Structure
- /world/data: Unused
- /world/DIM-1: Nether world
- /world/DIM-1/region: Nether world regions
- /world/DIM1: End world
- /world/DIM1/region: End world regions
- /world/players: Player data
- /world/region: Overworld regions
level.dat
In the root directory is a level.dat file. The structure of that file is this:
- NBTCompound(Data)
- NBTCompound(DataPacks)
- NBTList(Disabled)
- NBTList(Enabled): Generally contains the string "vanilla"
- NBTCompound(DimensionData)
- NBTCompound(1)
- NBTCompound(DragonFight)
- NBTList(Gateways)
- NBTByte(DragonKilled)
- NBTByte(PreviouslyKilled)
- NBTCompound(DragonFight)
- NBTCompound(1)
- NBTCompound(GameRules)
- NBTString(announceAdvancemtns): One for each game rule with the value being the game rules value.
- NBTCompound(Version)
- NBTInt(Id): 1451 for 17w47a
- NBTString(Name): Name of the version
- NBTByte(Snapshot): If the version is a snapshot
- NBTDouble(BoarderCenterX)
- NBTDouble(BoarderCenterZ)
- NBTDouble(BoarderDamagerPerBlock)
- NBTDouble(BorderSafeZone)
- NBTDouble(BoarderSize)
- NBTDouble(BorderSizeLerpTarget)
- NBTLong(BorderSizeLerpTime)
- NBTDouble(BoarderWarningBlocks)
- NBTDouble(BoarderWarningTime)
- NBTInt(clearWeatherTime)
- NBTInt(DataVersion)
- NBTLong(DayTime)
- NBTByte(Difficulty)
- NBTByte(DifficultyLocked)
- NBTInt(GameType)
- NBTString(generatorName)
- NBTString(generatorOptions)
- NBTInt(generatorVersion)
- NBTByte(hardcore)
- NBTByte(initialized)
- NBTLong(LastPlayed)
- NBTString(LevelName)
- NBTByte(MapFeatures): Set to 1 if structures are generated, such as villages
- NBTByte(raining): Set to 1 if currently raining
- NBTInt(rainTime): The ticks remaining until rain stops?
- NBTLong(RandomSeed)
- NBTLong(SizeOnDisk): Has been 0 since 1.2.5 (Weird? Whats the point of this?)
- NBTInt(SpawnX)
- NBTInt(SpawnY)
- NBTInt(SpawnZ)
- NBTByte(thundering): Set to 1 if currently thundering (only if there is potential for thunder, not if a thunderbolt is currently in progress)
- NBTInt(thunderTime)
- NBTInt(version)
- NBTCompound(DataPacks)
[playeruuid].dat
Each player that has ever connected is given a [playeruuid].dat file.
- NBTCompound
- NBTByte(OnGround)
- NBTByte(Sleeping)
- NBTShort(Air)
- NBTShort(AttackTime)
- NBTShort(DeathTime)
- NBTShort(Fire): Ticks until the player is no longer on fire, or zero
- 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): Damage -or- metadata
- NBTShort(id)
- NBTCompound
- NBTList(Motion)
- NBTDouble
- NBTDouble
- NBTDouble
- NBTList(Pos)
- NBTDouble
- NBTDouble
- NBTDouble
- NBTList(Rotation)
- NBTFloat
- NBTFloat
[region].mca
Each region file is named "r.x.z.mca", where x and z are the coordinates. These coordinates are relative to each region. Given column coordinates, divide them by 32 to get the region coordinates.
- NBTCompound
- NBTCompound(Chunk [x,z]): x and z are region column coordinates, not relative to the overall world. The compound name is a misnomer, it actually represents column.
- NBTCompound(Level)
- NBTByte(TerrainPopulated): 1 if this column has been generated
- NBTInt(xPos): In global, world-relative chunk coordinates
- NBTInt(yPos): In global, world-relative chunk coordinates
- NBTLong(LastUpdate): The last time a block changed in this column
- NBTByteArray(Biomes)
- NBTList(Entities)
- NBTCompound
- NBTByte(OnGround)
- NBTShort(Air)
- NBTShort(AttackTime)
- NBTShort(DeathTime)
- NBTShort(Fire)
- NBTShort(Health)
- NBTShort(HurtTime)
- NBTFloat(FallDistance)
- NBTString(id): Example: "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 and z are region column coordinates, not relative to the overall world. The compound name is a misnomer, it actually represents column.