6

Minecraft stores world data per region (512x512 blocks) in compressed .mca files. That means that 1 region is equal to 1024 chunks. What, roughly, is the approximate memory size of a chunk as a part of a .mca file?

  • If you have little space left on your HDD, you might consider moving less-used contents to an external drive. Minecraft has a huge range of disk space it uses depending on how much you explore your world, mod, etc. – Patrick Roberts Apr 27 '16 at 18:26
12

The actual terrain is stored in the region, DIM1 and DIM-1 sub-folders of the world save folder.

Each file there contains up to 1024 (32x32) chunks (you can check out What is a chunk). All chunk in a single file are from what is called a "region" of 512x512 potential blocks. The region file may contain less than 1024 chunks if the region is not fully explored and some chunks are not yet generated.

Since each region is generally explored to a different extent, the sizes of region files can vary wildly and an average number is not very useful. We can however make some estimations for the average size of a fully explored region.

Each chunk is split vertically in 16 sections each 16 blocks high (stacked on top of each other). The game stores information only about the bottom sections where there are blocks. For example if the terrain goes up to y=82, the game will store the bottom 6 sections (6*16=96 height, just enough for height 82) and all blocks above y=96 are implicitly considered to be air and are not stored in the file.

Now we are going to make some assumptions. Let's say:

  • the region is fully explored (contains all 1024 chunks)
  • the average section height of each chunk is 5 (ocean level is y=64, so this sounds about right)
  • we are ignoring tile entities like chests, furnaces, signs etc. (they are relatively small percentage of the terrain)
  • we are ignoring entities like mobs, dropped items, arrows, etc. (because they are small number compared to the number of blocks)

This means that the the region file contains 1024 chunks * 5 sections * 16 x * 16 z * 16 y. This makes about 20 million blocks.

To store each block the game needs:

  • 1 byte for block id (0-255)
  • 0.5 bytes (4 bits) for block data (0-15)
  • 0.5 bytes (4 bits) for block light (0-15)
  • 0.5 bytes (4 bits) from sky light (0-15)

So we have 20 million blocks * 2.5 bytes = ~50MB of data.

Before being stored in the file, each chunk is compressed with generic gzip compression, which I'll assume reduces the size to about 10% of the original (Typically, chunks are mostly smooth stone and light level 0, but the compression rate can vary a lot depending on what is actually in the chunk).

So our final estimate would be that a fully explored region file is about 50*0.1 = about 5MB.

Knowing this we can estimate the size of the whole Overworld by simply calculating (number of explored chunks)*5 sections*16x*16y*16x*2.5 bytes*0.1 compression = (number of explored chunks)*5120 bytes.

In the Nether, the average sections in each chunk would be 8 (height = 128).

In The End, the average sections in each chunk around the center would be more like 1, because there is a lot of void around the main island.

| improve this answer | |
  • Does the file format look the same in the Nether? I mean, blocks above set height can't be implicitly considered to be air. Either way, great answer. – Deltharis Apr 28 '16 at 8:34
  • The Nether uses exactly the same format only the height there is always 128 blocks (8 sections). Blocks above y=127 are considered implicitly air. If you go above the nether roof and build a gold farm there, some chunks will have more than 8 sections. – Kcats Apr 28 '16 at 8:58
  • This answer is out of date as of 1.13 (blocks are no longer stored as numbers) – pppery Aug 29 '18 at 21:49
5

1.13 brings changes. I believe they're now saving the block ID (or maybe it's the block state, or both) in a palette for each chunk since they've used up all the block IDs with about 256 different block types now. So the palette only contains the block types used in that chunk. Usually 1 byte (8 bits) is enough since 99% of the time you won't have more than 256 block types in a chunk. A chunk can have 16x256x16=65536 possible block types.

The metadata is also now moved to a block state so it is not limited to 4 bits (only 2^4=16 possible states).

| improve this answer | |
  • And I would expect that the block state is also stored in the block palette. – David Callanan Aug 2 '19 at 17:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.