How do Minecraft biomes work?

I've never seen any information about the distribution of biomes in a generated world.

First, are all types of biomes, guaranteed to exist in a world? Will I always find snow somewhere, and desert somewhere? I've got one world that doesn't seem to have cactus (so I guess the sand is beaches, no actual desert).

Second, is there any kind of pattern or relation to biomes? Is snow to the North, and desert South, for example?

Third, how about density of biomes? If all types do exist, would I find them all within distance X of my spawnpoint, or have to travel for weeks to find a given type?


Solution 1:

Since the world of Minecraft is infinite, (see Notch's blog post about that interesting subject,) all worlds should have all biomes, if you search far enough for them. It is possible that some seeds randomly generate very large biomes, but this is only due to the random nature of terrain generation.


For versions starting with 1.7 snapshots

From Jeb's blog post:

Biomes have been put into four main categories: snow-covered, cold, medium, and dry/warm. Biomes will avoid getting placed next to a biome that is too different to itself (sometimes this still happens, but it’s very rare now and not all over the place)

[...] Most biomes have uncommon/rare variations that you may run into.


For versions starting with Beta 1.8

In Beta 1.8, biomes got an overhaul. They are no longer determined by randomized metrics such as rainfall and temperature. Rather, they appear to be assigned randomly to fractal sections of the world, as determined by the world's seed.

This was done to better allow new biomes to be inserted. Rather than changing the entire temperature/rainfall simulation, new biomes can simply be generated when new chunks are explored. This is also why biome information is now stored in the anvil file format itself, rather than regenerated every time the game is run. In this way, even if generation code changes occur, currently-explored biomes should not change.

Lastly, new "technical" biomes were introduced to support transitioning from one specific biome to another.


For versions prior to Beta 1.8

Biomes are defined using different aspects of environment such as a rainfall and temperature, which presumably are defined in a similar manner to height (ie. a Perlin Noise map overlaying the world.) These are used to determine the biome for that area, with deserts being hot and dry, rainforests being hot and wet, etc. The Minecraft Wiki has some great illustrations of biomes, with one of the most informative being this one:

Minecraft Biomes

Assuming rainfall and temperature are evenly distributed, the distribution of each biome should be relative to their size in the graphic above. (This may not be a true assumption, though, and would take some digging into the source code to tell.)

To answer your final question, "North" and "South" are abstract and irrelevant, due to the infinite nature of Minecraft. Minecraft worlds do not simulate a planet, but a massive, flat world.


For those of you interested in a more procedural biome-generation method, check out dungeonleague.com, and this post and few preceding posts in particular.