Chunk format

Chunks store the terrain and entities within a 16×256×16 area. They also store precomputed lighting, heightmap data for Minecraft's performance, and other meta information.

Chunks were first introduced in Minecraft Infdev. Before the addition of the MCRegion format in Beta 1.3, chunks were stored as individual chunk files ".dat" where the file names contained the chunk's position encoded in Base36 - this is known as the Alpha level format. MCRegion changed this by storing groups of 32×32 chunks in individual ".mcr" files with the coordinates in Base10, with the goal being to reduce disk usage by cutting down on the number of file handles Minecraft had open at once. MCRegion's successor is the current format, Anvil, which only made changes to the chunk format. The region file technique is still used, but the region file extensions are ".mca" instead.

The major change from MCRegion to Anvil was the division of Chunks into Sections; each chunk has up to 16 individual 16×16×16 block Sections so that completely empty sections will not be saved at all. Preparation has also been made to support blocks with IDs in the range 0 to 4095, as compared to the previous 0 to 255 limitation. However, Minecraft is not fully prepared for such blocks to exist as items; many item IDs are already taken in the range 256 to 4095.

The Blocks, Data, BlockLight, and SkyLight arrays are now housed in individual chunk Sections. The Data, SkyLight, and BlockLight are arrays of 4-bit values, and the BlockLight and SkyLight arrays no longer house part of the block ID. The Blocks array is 8 bits per block, and the 4096-blocks support exists in the form of an optional Add byte array of 4-bits per block for additional block ID information. With the Anvil format, the NBT Format was changed from Notch's original specification to include an integer array tag similar to the existing byte array tag. It is currently only used for HeightMap information in chunks.

NBT Structure
Chunks are stored in NBT format, with this structure (see Block Format below for the ordering of the blocks within each array):
 * The root tag.
 * : Chunk data.
 * : X position of the chunk.
 * : Z position of the chunk.
 * : Tick when the chunk was last saved.
 * : 1 or 0 (true/false) - Unknown.
 * : 1 or not present (true/false) indicate whether the terrain in this chunk was populated with special things. (Ores, special blocks, trees, dungeons, flowers, waterfalls, etc.) If set to zero then Minecraft will regenerate these features in the blocks that already exist.
 * : Currently always saved as 1 and not actually loaded by the game. Likely a chunk version tag.
 * : The cumulative number of ticks players have been in this chunk. Note that this value increases faster when more players are in the chunk. Used for regional difficulty: increases the chances of mobs spawning with equipment, the chances of that equipment having enchantments, the chances of spiders having potion effects, the chances of mobs having the ability to pick up dropped items, and the chances of zombies having the ability to spawn other zombies when attacked. Note that at values 3600000 and above, regional difficulty is effectively maxed for this chunk. At values 0 and below, the difficulty is capped to a minimum (thus, if this is set to a negative number, it will behave identically to being set to 0, apart from taking time to build back up to the positives).
 * : May not exist. 256 bytes of biome data, one byte for each vertical column in the chunk. See Data Values for biome IDs. If this tag does not exist it will be created and filled by Minecraft when the chunk is loaded and saved. If any values in this array are -1, Minecraft will also set them to the correct biome.
 * : 1024 bytes(256 TAG_Int) of heightmap data. 16 × 16. Each byte records the lowest level in each column where the light from the sky is at full strength. Speeds computing of the SkyLight.
 * : List of Compound tags, each tag is a sub-chunk of sorts.
 * An individual Section.
 * : The Y index (not coordinate) of this section. Range 0 to 15 (bottom to top), with no duplicates but some sections may be missing if empty.
 * : 4096 bytes of block IDs defining the terrain. 8 bits per block, plus the bits from the below Add tag.
 * : May not exist. 2048 bytes of additional block ID data. The value to add to (combine with) the above block ID to form the true block ID in the range 0 to 4095. 4 bits per block. Combining is done by shifting this value to the left 8 bits and then adding it to the block ID from above.
 * : 2048 bytes of block data additionally defining parts of the terrain. 4 bits per block.
 * : 2048 bytes recording the amount of block-emitted light in each block. Makes load times faster compared to recomputing at load time. 4 bits per block.
 * : 2048 bytes recording the amount of sunlight or moonlight hitting each block. 4 bits per block.
 * : Each TAG_Compound in this list defines an entity in the chunk. See Entity Format below. If this list is empty it will be a list of Byte tags.
 * : Each TAG_Compound in this list defines a tile entity in the chunk. See Tile Entity Format below. If this list is empty it will be a list of Byte tags.
 * : May not exist. Each TAG_Compound in this list is an "active" block in this chunk waiting to be updated. These are used to save the state of redstone machines, falling sand or water, and other activity. See Tile Tick Format below. This tag may not exist.

Block Format
In the Anvil format, block positions are ordered YZX for compression purposes.

The coordinate system is as follows:
 * X increases East, decreases West
 * Y increases upwards, decreases downwards
 * Z increases South, decreases North

This also happens to yield the most natural scan direction, because all indices in the least significant dimension (i.e. X in this case) appear for each index in the next most significant dimension; so one reads an array ordered YZX as one would a book lying with its top northward, all letters (or X-indices) on a single line (or Z-index) at a time, and all lines on a single page (or Y-index) at a time. For the 2D arrays (i.e. "Biomes" and "HeightMap") the inapplicable Y dimension is simply omitted, as though the book is only one page thick.

Each section in a chunk is a 16x16x16-block area, with up to 16 sections in a chunk. Section 0 is the bottom section of the chunk, and section 15 is the top section of the chunk. To save space, completely empty sections are not saved. Within each section is a byte tag "Y" for the Y index of the section, 0 to 15, and then byte arrays for the blocks. The "Block" byte array has 4096 partial block IDs at 8 bits per block. Another byte array "Add" is used for block with IDs over 255, and is 2048 bytes of the other part of the 4096 block IDs at 4 bits per block. When both the "Block" and "Add" byte arrays exist, the partial ID from the "Add" array is shifted left 8 bits and added to the partial ID from the "Blocks" array to form the true Block ID. The "Data" byte array is also 2048 bytes for 4096 block data values at 4 bits per block. The "BlockLight" and "SkyLight" byte arrays are the same as the "Data" byte array but they are used for block light levels and sky light levels respectively. The "SkyLight" values represent how much sunlight or moonlight can potentially reach the block, independent of the current light level of the sky.

The endianness of the 2048-byte arrays (i.e. "Add," "Data," "BlockLight," & "SkyLight"), which give only 4 bits per block, seems to stand as the one anomalous exception to the otherwise consistent, format-wide standard of big-endian data storage. It also runs counter to the presumably natural human-readable printing direction. If the blocks begin at 0, they are grouped with even numbers preceding odd numbers (i.e. 0 & 1 share a block, 2 & 3 share the next, etc.); under these designations Minecraft stores even-numbered blocks in the least significant half-byte, and odd-numbered blocks in the most significant half-byte. Thus block[0] is byte[0] at 0x0F, block[1] is byte[0] at 0xF0, block[2] is byte[1] at 0x0F, block[3] is byte[1] at 0xF0, etc. ...

The pseudo-code below shows how to access individual block information from a single section. Hover over text to see additional information or comments.

 byte Nibble4( byte [] arr, int index) { return index%2 == 0 ? arr[index/2]&0x0F : (arr[index/2]>>4)&0x0F ; } int BlockPos  = y *16 *16 + z*16 + x; byte BlockID_a = Blocks [BlockPos]; byte BlockID_b = Nibble4(Add, BlockPos); short BlockID = BlockID_a + (BlockID_b << 8) ; byte BlockData = Nibble4(<abbr title="The Data byte array, 4 bits per block">Data, BlockPos); byte <abbr title="The block light for the block">Blocklight = Nibble4(<abbr title="The BlockLight byte array, 4 bits per block">BlockLight, BlockPos); byte <abbr title="The sky light for the block">Skylight = Nibble4(<abbr title="The SkyLight byte array, 4 bits per block">SkyLight, BlockPos);

Entity Format
Every entity is an unnamed TAG_Compound contained in the Entities list of a chunk file. The sole exception is the Player entity, stored in level.dat, or in .dat files on servers. All entities share this base:
 * Entity data
 * : Entity ID. This tag does not exist for the Player entity.
 * : 3 TAG_Doubles describing the current X,Y,Z position of the entity.
 * : 3 TAG_Doubles describing the current dX,dY,dZ velocity of the entity in meters per tick.
 * : Two TAG_Floats representing rotation in degrees.
 * The entity's rotation clockwise around the Y axis (called yaw). Due west is 0. Does not exceed 360 degrees.
 * The entity's declination from the horizon (called pitch). Horizontal is 0. Positive values look downward. Does not exceed positive or negative 90 degrees.
 * : Distance the entity has fallen. Larger values cause more damage when the entity lands.
 * : Number of ticks until the fire is put out. Negative values reflect how long the entity can stand in fire before burning. Default -1 when not on fire.
 * : How much air the entity has, in ticks. Fills to a maximum of 300 in air, giving 15 seconds submerged before the entity starts to drown, and a total of up to 35 seconds before the entity dies (if it has 20 health). Decreases while underwater. If 0 while underwater, the entity loses 1 health per second.
 * : 1 or 0 (true/false) - true if the entity is touching the ground.
 * : Unknown usage; entities are only saved in the region files for the dimension they are in. -1 for The Nether, 0 for The Overworld, and 1 for The End.
 * : 1 or 0 (true/false) - true if the entity should not take damage. This applies to living and nonliving entities alike: mobs will not take damage from any source (including potion effects) and objects such as vehicles and item frames cannot be destroyed unless their supports are removed. Note that these entities also cannot be moved by fishing rods, attacks, explosions, or projectiles.
 * : The number of ticks before which the entity may be teleported back through a portal of any kind. Initially starts at 900 ticks (45 seconds) after teleportation and counts down to 0.
 * : The most significant bits of this entity's Universally Unique IDentifier. This is joined with UUIDLeast to form this entity's unique ID.
 * : The least significant bits of this entity's Universally Unique IDentifier.
 * : The data of the entity being ridden. Note that if an entity is being ridden, the topmost entity in the stack has the Pos tag, and the coordinates specify the location of the bottommost entity. Also note that the bottommost entity controls movement, while the topmost entity determines spawning conditions when created by a mob spawner.
 * See this format (recursive).

Mobs
Mobs are a subclass of Entity with additional tags to store their health, attacking/damaged state, potion effects, and more depending on the mob. Players are a subclass of Mob.

{| class="wikitable" style="float:right;margin-right:0" ! colspan="2" | Mob Entities ! Entity ID ! Name
 * Bat
 * Bat
 * Blaze
 * Blaze
 * CaveSpider
 * Cave Spider
 * Chicken
 * Chicken
 * Cow
 * Cow
 * Creeper
 * Creeper
 * EnderDragon
 * Ender Dragon
 * Enderman
 * Enderman
 * Endermite
 * Endermite
 * Ghast
 * Ghast
 * Giant
 * Giant
 * EntityHorse
 * Horse
 * LavaSlime
 * Magma Cube
 * MushroomCow
 * Mooshroom
 * Ozelot
 * Ocelot
 * Pig
 * Pig
 * PigZombie
 * Zombie Pigman
 * Sheep
 * Sheep
 * Silverfish
 * Silverfish
 * Skeleton
 * Skeleton Wither Skeleton
 * Slime
 * Slime
 * SnowMan
 * Snow Golem
 * Spider
 * Spider
 * Squid
 * Squid
 * Villager
 * Villager
 * VillagerGolem
 * Iron Golem
 * Witch
 * Witch
 * WitherBoss
 * Wither
 * Wolf
 * Wolf
 * Zombie
 * Zombie Zombie Villager
 * colspan="2" |.
 * : Contains the name of the player that tamed the horse. Has no effect on behaviour.
 * : List of items. Only exists if ChestedHorse is true.
 * An item, including the Slot tag. Slots are numbered 2 to 16 for donkeys and mules, and none exist for all other horses.
 * See Item Format
 * : The armor item worn by this horse. May not exist.
 * See Item Format
 * : The saddle item worn by this horse. May not exist.
 * See Item Format
 * :  (removed as of 13w21a)  Armor type. 0 = none, 1 = iron, 2= gold, 3= diamond. Other values lead to loading of random textures.
 * :  (removed as of 13w21a snapshot and added again at 1.6.1 release)  1 or 0 (true/false) - true if there is a saddle on the horse. ''
 * Squid
 * Villager
 * Villager
 * VillagerGolem
 * Iron Golem
 * Witch
 * Witch
 * WitherBoss
 * Wither
 * Wolf
 * Wolf
 * Zombie
 * Zombie Zombie Villager
 * colspan="2" |.
 * : Contains the name of the player that tamed the horse. Has no effect on behaviour.
 * : List of items. Only exists if ChestedHorse is true.
 * An item, including the Slot tag. Slots are numbered 2 to 16 for donkeys and mules, and none exist for all other horses.
 * See Item Format
 * : The armor item worn by this horse. May not exist.
 * See Item Format
 * : The saddle item worn by this horse. May not exist.
 * See Item Format
 * :  (removed as of 13w21a)  Armor type. 0 = none, 1 = iron, 2= gold, 3= diamond. Other values lead to loading of random textures.
 * :  (removed as of 13w21a snapshot and added again at 1.6.1 release)  1 or 0 (true/false) - true if there is a saddle on the horse. ''
 * See Item Format
 * : The armor item worn by this horse. May not exist.
 * See Item Format
 * : The saddle item worn by this horse. May not exist.
 * See Item Format
 * :  (removed as of 13w21a)  Armor type. 0 = none, 1 = iron, 2= gold, 3= diamond. Other values lead to loading of random textures.
 * :  (removed as of 13w21a snapshot and added again at 1.6.1 release)  1 or 0 (true/false) - true if there is a saddle on the horse. ''


 * Ghast has these additional fields:
 * : The radius of the explosion created by the fireballs this ghast fires. Default value of 1.


 * Ozelot has these additional fields:
 * : The ID of the skin the ocelot has. 0 is wild ocelot, 1 is tuxuedo, 2 is tabby and 3 is siamese. Does not determine an ocelot's behavior: it will be wild unless its Owner string is not empty, meaning wild ocelots can look like cats and vice versa.


 * Pig has these additional fields:
 * : 1 or 0 (true/false) - true if there is a saddle on the pig.


 * Sheep has these additional fields:
 * : 1 or 0 (true/false) - true if the sheep has been shorn.
 * : 0 to 15 - see wool data values for a mapping to colors.


 * Skeleton has these additional fields:
 * : 0 for normal skeleton, 1 for wither skeleton.


 * Slime and LavaSlime have these additional fields:
 * : The size of the slime. Note that this value is zero-based, so 0 is the smallest slime, 1 is the next larger, etc. The sizes that spawn naturally are 0, 1, and 3.


 * WitherBoss has these additional fields:
 * : The number of ticks of invulnerability left after being initially created. 0 once invulnerability has expired.


 * Wolf has these additional fields:
 * : 1 or 0 (true/false) - true if the wolf is angry.
 * : The dye color of this wolf's collar. Present even for wild wolves (but does not render); default value is 14.


 * Villagerhead.png Villager has these additional fields:
 * : The ID of the texture used for this villager. This also influences trading options.
 * : Currently unused. Increases by the number of emeralds traded to a villager any time they are traded.
 * : The ID of this villager's career. This also influences trading options and the villager's name in the GUI (if it does not have a CustomName). If 0, the next time offers are refreshed, the game will assign a new Career and reset CareerLevel to 1.
 * : The current level of this villager's trading options. Influences the trading options generated by the villager; if it is greater than their career's maximum level, no new offers are generated. Increments when a trade causes offers to be refreshed. If 0, the next trade to do this will assign a new Career and set CareerLevel to 1.
 * : 1 or 0 (true/false) - true if the villager is willing to mate. Becomes true after certain trades (those which would cause offers to be refreshed), and false after mating.
 * : Each compound tag in this list is an item in the villagers inventory, up to a maximum of 8 slots. Items in two or more slots that can be stacked together will automatically be condensed into one slot. If there are more than 8 slots, the last slot will be removed until the total is 8. If there are 9 slots but two previous slots can be condensed, the last slot will be present after the two other slots are combined.
 * An item in the inventory, excluding the Slot tag.
 * See Item structure.
 * : Is generated when the trading menu is opened for the first time.
 * : List of trade options.
 * A trade option.
 * : 1 or 0 (true/false) - true if this trade will provide XP orb drops.
 * : The maximum number of times this trade can be used before it is disabled. Increases by a random amount from 2 to 12 when offers are refreshed.
 * : The number of times this trade has been used. The trade becomes disabled when this is greater or equal to maxUses.
 * : The first 'cost' item, without the Slot tag.
 * See Item structure.
 * : May not exist. The second 'cost' item, without the Slot tag.
 * See Item structure.
 * : The item being sold for each set of cost items, without the Slot tag.
 * See Item structure.


 * VillagerGolem has these additional fields:
 * : 1 or 0 (true/false) - true if this golem was created by a player.


 * Zombie has these additional fields:
 * : 1 or 0 (true/false) - true if this zombie is an infected villager. May be absent.
 * : 1 or 0 (true/false) - true if this zombie is a baby. May be absent.
 * : -1 when not being converted back to a villager, positive for the number of ticks until conversion back into a villager. The regeneration effect will parallel this.
 * : 1 or 0 (true/false) - true if the zombie can break doors (default value is 0). If the difficulty is set to Hard, all zombies will have this tag set to 1. In any other difficulty, it is always set to 0.


 * PigZombie has these additional fields:
 * All fields from Zombie
 * : Anger level. Determines the aggressivity of the creature towards players. 0 for neutral Zombie Pigmen.

Projectiles
Projectiles are a subclass of Entity and have very obscure tags such as X,Y,Z coordinate tags despite Entity Pos tag, inTile despite inGround, and shake despite most projectiles not being arrows.
 * Projectiles have these additional fields:
 * : X coordinate of the item's position in the chunk.
 * : Y coordinate of the item's position in the chunk.
 * : Z coordinate of the item's position in the chunk.
 * : ID of tile projectile is in.
 * : 1 or 0 (true/false) - If the Projectile is in the ground or hit the ground already (For arrow pickup; you cannot pickup arrows in the air)


 * Projectiles except Fireball, SmallFireball, and WitherSkull have these additional fields:
 * : The "shake" when arrows hit a block.


 * Arrow has these additional fields:
 * : Metadata of tile arrow is in.
 * : 0 = cannot be picked up by players. 1 = can be picked up by players in survival or creative. 2 = can only be picked up by players in creative.
 * : 1 or 0 (true/false) - If pickup is not used, and this is true, the arrow can be picked up by players.
 * : Increments each tick when an arrow is not moving; resets to 0 if it moves. When it ticks to 1200, the arrow despawns.
 * : Unknown how this affects actual damage inflicted by the arrow. May not be a whole number. 2.0 for normal arrows, and increased 0.5 per level of Power enchantment on the firing bow. If the Power enchantment is present, an additional 0.5 is added on (so Power I gives a bonus of 1.0, while Power II gives 1.5).


 * Fireball, SmallFireball, and WitherSkull have these additional fields:
 * : List of 3 doubles. Should be identical to Motion.


 * Fireball has these additional fields:
 * : The power and size of the explosion created by the fireball upon impact. Default value 1.


 * ThrownEnderpearl, ThrownExpBottle, ThrownPotion, and Snowball have these additional fields:
 * : The name of the player this projectile was thrown by.


 * ThrownPotion has these additional fields:
 * : The item that was thrown, without the slot tag.
 * See Item format and Potion Effects tag tag.
 * : If the Potion tag does not exist, this value is used as the damagevalue of the thrown potion.

Items
Items are a subclass of Entity.
 * Items have these additional fields:
 * : The number of ticks the item has been "untouched". After 6000 ticks (5 minutes ) the item is destroyed. If set to -32768, the Age will not decrease, thus the item will not automatically despawn.


 * Item has these additional fields:
 * : The health of the item, which starts at 5. Items take damage from fire, lava, falling anvils, and explosions. The item is destroyed when its health reaches 0.
 * : The number of ticks the item cannot be picked up. Decreases by 1 per tick. If set to 32767, the PickupDelay will not decrease, thus the item can never be picked up.
 * : If not an empty string, only the named player will be able to pick up this item, until it is within 10 seconds of despawning. Used by the give command (and can be set in a summon command) to prevent the wrong player from picking up the spawned item entity.
 * : Set to the name of the player who dropped the item, if dropped by a player. Used by the "Diamonds to you!" achievement.
 * : The inventory item, without the Slot tag.
 * See Item Format.


 * XPOrb has these additional fields:
 * : Same properties as Health in Item. However, this value is stored as a byte in saved data, and read as a short but clipped to the range of a byte. As a result, its range is 0-255, always positive, and values exceeding 255 will overflow.
 * : The amount of experience the orb gives when picked up.

Vehicles
Vehicles are subclasses of Entity.
 * All types of Minecarts may have these additional optional fields:
 * : Optional. 1 or 0 (true/false) - whether to display the custom tile in this minecart.
 * : Optional. The ID of the custom block in the minecart.
 * : Optional. The Data value of the custom block in the minecart.
 * : Optional. The offset of the block displayed in the Minecart. Positive values move the block upwards, while negative values move it downwards. A value of 16 will move the block up by exactly one multiple of its height.
 * : Optional. The custom name of this minecart. ("@" by default for command block minecarts)


 * Minecart  (deprecated since 13w02a)  has these additional fields:
 * : Type of the cart: 0 - empty, 1 - with a chest, 2 - with a furnace.
 * All fields from MinecartRideable, MinecartChest or MinecartFurnace depending on Type.


 * MinecartChest and MinecartHopper have these additional fields:
 * : List of items.
 * An item, including the Slot tag. Slots are numbered 0 to 26 for chests, and 0 to 4 for hoppers.
 * See Item Format


 * MinecartFurnace have these additional fields:
 * : Force along X axis, used for smooth acceleration/deceleration.
 * : Force along Z axis, used for smooth acceleration/deceleration.
 * : The number of ticks until the minecart runs out of fuel.


 * MinecartHopper has these additional fields:
 * : Time until the next transfer, between 1 and 8, or 0 if there is no transfer.


 * MinecartTNT has these additional fields:
 * : Time until explosion or -1 if deactivated.


 * MinecartSpawner has these additional fields:
 * All fields from the MobSpawner Tile Entity, excluding the base Tile Entity fields.


 * MinecartCommandBlock has these additional fields:
 * : The command entered into the minecart.
 * : Represents the strength of the analog signal output by redstone comparators attached to this minecart. Only updated when the minecart is activated with an activator rail.
 * : The last line of output generated by the minecart. Still stored even if the gamerule commandBlockOutput is false. Appears in the GUI of the minecart when right-clicked, and includes a timestamp of when the output was produced.
 * : 1 or 0 (true/false) - Unknown.

Dynamic Tiles
Dynamic tiles are a subclass of Entity and are used to simulate realistically moving blocks.
 * PrimedTnt has these additional fields:
 * : Ticks until explosion. Default is 80 (4 seconds).


 * FallingSand has these additional fields:
 *  (deprecated) : The Block ID. Not limited to only sand, gravel, dragon eggs, or anvils. Although deprecated, this value is always present.
 * : The Block ID, as above, but now supporting the 1-4095 range. Only prior to 1.8 and its snapshots.
 * : The Block ID using the alphabetical ID format: minecraft:stone. Only in and after 1.8 and its snapshots.
 * : Optional. The tags of the tile entity for this block.
 * : The data value for the block.
 * : The number of ticks the entity has existed. If set to 0, the moment it ticks to 1, it will vanish if the block at its location has a different ID than the entity's TileID. If the block at its location has the same ID as its TileID when Time ticks from 0 to 1, the block will instead be deleted, and the entity will continue to fall, having overwritten it. (This was the result of Mojang's failed attempt to "fix" infinite sand/gravel/dragon egg/anvil/etc. generators by trying to have the falling sand entity delete the duplicated block the next tick) When Time goes above 600, or above 100 while the block is below Y=0, the entity is deleted.
 * : 1 or 0 (true/false) - true if the block should drop an item that can be picked up when it breaks.
 * : 1 or 0 (true/false) - true if the block should hurt entities it falls on.
 * : The maximum number of hitpoints of damage to inflict on entities that intersect this FallingSand. For vanilla FallingSand, always 40 (20 hearts).
 * : Multiplied by the FallDistance to calculate the amount of damage to inflict. For vanilla FallingSand, always 2.

Other
Other entity types that are a subclass of Entity but do not fit into any of the above categories.
 * FireworksRocketEntity has these additional fields:
 * : The number of ticks this fireworks rocket has been flying for.
 * : The number of ticks before this fireworks rocket explodes. This value is randomized when the firework is launched: ((Flight + 1) * 10 + random(0 to 5) + random(0 to 6))
 * : The crafted Firework Rocket item.
 * See Item format and Fireworks tag tag.


 * Paintings and Item Frames share these additional fields:
 * : The X coordinate of the block the painting/item frame is placed on.
 * : The Y coordinate of the block the painting/item frame is placed on.
 * : The Z coordinate of the block the painting/item frame is placed on.
 * : In 1.8 and later, the direction the painting/item frame faces: 0 is south, 1 is west, 2 is north, and 3 is east.
 * : Prior to 1.8, the direction the painting/item frame faces: 0 is south, 1 is west, 2 is north, and 3 is east.
 * : Same as Direction, except the meaning of values 2 and 0 are swapped. Ignored if Direction is present.


 * ItemFrame has these additional fields:
 * : The item, without the slot tag. If the item frame is empty, this tag does not exist.
 * See Item Structure.
 * : The chance the item will drop when the item frame breaks. 1.0 by default.
 * : The number of times the item has been rotated 45 degrees clockwise.


 * Painting has these additional fields:
 * : The name of this Painting's art.

Tile Entity Format
Tile Entities (not related to Entities) are used by Minecraft to store information about blocks that can't be stored in the 4-bits of block data the block has. All tile entities share this base:
 * Tile entity data
 * : Tile entity ID
 * : X coordinate of the Tile Entity.
 * : Y coordinate of the Tile Entity.
 * : Z coordinate of the Tile Entity.


 * Various containers may have these additional fields:
 * : Optional. The name of this container, which will display in its GUI where the default name ordinarily is. For Command Blocks, the name will replace the usual '@' when using commands such as "say" and "tell".


 * : Optional. When not blank, prevents the container from being opened unless the opener is holding an item whose name matches this string.
 * : Optional. When not blank, prevents the container from being opened unless the opener is holding an item whose name matches this string.


 * Beacon has these additional fields:
 * : The number of levels available from the pyramid.
 * : The primary power selected, see Potion effects for IDs. 0 means none.
 * : The secondary power selected, see Potion effects for IDs. 0 means none.


 * Cauldron has these additional fields:
 * : List of items in the brewing stand.
 * : An item, including the slot tag. Slots are numbered 0 to 3.
 * See Item Format.
 * : The number of ticks the potions have been brewing for.


 * Chest has these additional fields:
 * : List of items in the chest.
 * : An item, including the slot tag. Chest slots are numbered 0-26 with 0 in the top left corner.
 * See Item Format.


 * Comparator has these additional fields:
 * : Represents the strength of the analog signal output by this redstone comparator. Likely used because the block itself uses its four bits of metadata to determine its rotation, powered state, and subtraction mode state, and comparators can hold a specific amount of power even in circuits without redstone wire.


 * Control has these additional fields:
 * : The command to issue to the server.
 * : Represents the strength of the analog signal output by redstone comparators attached to this command block. Only updated when the command block is activated with a redstone signal.
 * : The last line of output generated by the command block. Still stored even if the gamerule commandBlockOutput is false. Appears in the GUI of the block when right-clicked, and includes a timestamp of when the output was produced.
 * : 1 or 0 (true/false) - Unknown.


 * FlowerPot has these additional fields:
 * : The Block ID of the plant in the pot. Known valid blocks are 6, 31, 32, 40, 37, 38, 39, 81. Other block and item IDs may be used, but most will not render. Together with Data, this determines the item dropped by the pot when destroyed.
 * : The data value to use in conjunction with the above Block ID. For example if Item is 6 (a sapling block), the Data is used to indicate the type of sapling. See Data Values for details.


 * Furnace has these additional fields:
 * : Number of ticks left before the current fuel runs out.
 * : Number of ticks the item has been smelting for. The item finishes smelting when this value reaches 200 (10 seconds). Is reset to 0 if BurnTime reaches 0.
 * : Number of ticks It takes for the item to be smelted.
 * : List of items in the furnace slots.
 * : An item in the furnace, including the slot tag: Slot 0: The item(s) being smelted. Slot 1: The item(s) to use as the next fuel source. Slot 2: The item(s) in the result slot.
 * See Item Format.


 * Hopper has these additional fields:
 * : List of items in the hopper slots.
 * : An item in the hopper, including the slot tag.
 * See Item Format.
 * : Time until the next transfer, naturally between 1 and 8 or 0 if there is no transfer.


 * MobSpawner has these additional fields:
 * : Optional. List of possible entities to spawn. If this tag does not exist, but SpawnData exists, Minecraft will generate it the next time the spawner tries to spawn an entity. The generated list will contain a single entry derived from the EntityId and SpawnData tags.
 * : A potential future spawn. After the spawner makes an attempt at spawning, it will choose one of these entries at random and use it to prepare for the next spawn.
 * : Overwrites EntityId when preparing the next spawn.
 * : The chance that this spawn will be picked as compared to other spawn weights. Must be non-negative and at least 1.
 * : Overwrites the contents of SpawnData when preparing the next spawn. Not optional; an empty one will be created if it does not exist.
 * : The Entity ID of the next entity(s) to spawn. Both Mob Entity IDs and other Entity IDs will work. Warning: If SpawnPotentials exists, this tag will get overwritten after the next spawning attempt: see above for more details.
 * : Contains tags to copy to the next spawned entity(s) after spawning. Any of the Entity or Mob tags may be used. Note that if a spawner specifies any of these tags, almost all variable data such as mob equipment, villager profession, sheep wool color, etc., will no longer be automatically generated, and must also be manually specified (note that this does not apply to position data, which will be randomized as normal unless Pos is specified. Similarly, unless Size and Health are specified for a Slime or Magma Cube, these will still be randomized). This, together with EntityId, also determines the appearance of the miniature entity spinning in the spawner cage. Note: this tag is optional: if it does not exist, the next spawned entity will use the default vanilla spawning properties for this mob, including potentially randomized armor (this is true even if SpawnPotentials does exist). Warning: If SpawnPotentials exists, this tag will get overwritten after the next spawning attempt: see above for more details.
 * : How many mobs to attempt to spawn each time.
 * : The radius around which the spawner attempts to place mobs randomly. The spawn area is square, includes the block the spawner is in, and is centered around the spawner's x,z coordinates - not the spawner itself. It is 2 blocks high, centered around the spawner's y coordinate (its bottom), allowing mobs to spawn as high as its top surface and as low as 1 block below its bottom surface. Vertical spawn coordinates are integers, while horizontal coordinates are floating point and weighted towards values near the spawner itself. Default value is 4.
 * : Ticks until next spawn. If 0, it will spawn immediately when a player enters its range. If set to -1 (this state never occurs in a natural spawner; it seems to be a feature accessed only via NBT editing), the spawner will reset its Delay, and (if SpawnPotentials exist) EntityID and SpawnData as though it had just completed a successful spawn cycle, immediately when a player enters its range. Note that setting Delay to -1 can be useful if you want the game to properly randomize the spawner's Delay, EntityID, and SpawnData, rather than starting with pre-defined values.
 * : The minimum random delay for the next spawn delay. May be equal to MaxSpawnDelay.
 * : The maximum random delay for the next spawn delay. Warning: Setting this value to 0 crashes Minecraft. Set to at least 1.
 * : Overrides the maximum number of nearby (within a box of spawnrange*2+1 x spawnrange*2+1 x 8 centered around the spawner block) entities whose IDs match this spawner's entity ID. Note that this is relative to a mob's hitbox, not their physical position. Also note that all entities within all chunk sections (16x16x16 cubes) overlapped by this box are tested for their ID and hitbox overlap, rather than just entities which are within the box, meaning a large amount of entities outside the box (or within it, of course) can cause substantial lag.
 * : Overrides the block radius of the sphere of activation by players for this spawner. Note that for every gametick, a spawner will check all players in the current world to test whether a player is within this sphere.
 *  (removed) : Unknown.
 *  (removed) : Unknown.
 *  (removed) : Unknown.
 *  (removed) : Unknown.
 *  (removed) : Unknown.


 * Music has these additional fields:
 * : Pitch (number of right-clicks).


 * Piston has these additional fields:
 * : Block_IDs of the block being moved.
 * : Data value of the block being moved.
 * : Direction in which the block will be pushed.
 * : How far the block has been moved.
 * : 1 or 0 (true/false) - true if the block is being pushed.


 * RecordPlayer has these additional fields:
 * : Record currently playing. 0 is no record. Otherwise, it is the item ID of the record (e.g. 2261 for the "mall" record). Other IDs can be used to make other items or blocks pop out with a data value of 0. This is always overridden by the ID in RecordItem.
 * : The item, without the Slot tag.
 * See Item Format.


 * Sign has these additional fields:
 * : First row of text.
 * : Second row of text.
 * : Third row of text.
 * : Fourth row of text. Only the first 16 characters of each line are read, the rest are discarded.


 * Skull has these additional fields:
 * : The type of the skull, similar to the Item IDs. (See Data values)
 * : Name of the player this is a skull of for pre-1.8.
 * : The orientation, similar to signs. (See Data values)
 * : 1.8's definition for the skull's owner.
 * : UUID of owner.
 * : Username of owner.
 * : An individual texture.
 * : An individual texture.
 * : An individual texture.


 * Trap and Dropper have these additional fields:
 * : List of items in the dispenser/dropper
 * : An item, including the slot tag. Slots are numbered 0-8.
 * See Item Format.

Tile Tick Format
Tile Ticks represent block updates that need to happen because they could not happen before the chunk was saved. Examples reasons for tile ticks include redstone circuits needing to continue updating, water and lava that should continue flowing, recently placed sand or gravel that should fall, etc. Tile ticks are not used for purposes such as leaf decay, where the decay information is stored in the leaf block data values and handled by Minecraft when the chunk loads. For map makers, tile ticks can be used to update blocks after a period of time has passed with the chunk loaded into memory.


 * A Tile Tick
 * : The ID of the block as an integer prior to 1.8 snapshots and a string after 1.8 snapshots; used to activate the correct block update procedure.
 * : The number of ticks until processing should occur. May be negative when processing is overdue.
 * : If multiple tile ticks are scheduled for the same tick, tile ticks with lower p will be processed first. If they also have the same p, the order is unknown.
 * : X position
 * : Y position
 * : Z position