Procedural animated texture generation

Prior to Java Edition 1.5 snapshot 13w02a, the textures for animated blocks were generated on-the-fly using certain algorithms, rather than being defined image files.

In cases such as when the texture could not be loaded, dedicated placeholder textures would be loaded instead.

Fluids
Fluid textures are generated via 3-layer non-deterministic cellular automata, which modify the RGB and alpha values of the texture accordingly, along with shifting of the texture to emulate flowing. Each layer is represented as an array of floats, each with 256 elements, corresponding to the 256 (16x16) texture pixels within the block.

As can be seen when loading up a world with water or lava in view, the textures start as a solid color before the cellular automaton starts generating the texture.

Indexes which end up outside of the bounds of the texture reappear at the opposite respective side.

For the purposes of explanation, the variables used have been named (arbitrarily) as attributes of a boiling pot of soup over a fire. The first layer represents the flame_heat value (which can be either negative or positive), the second layer represents the pot_heat value and the third layer represents the soup_heat value.

Note that and  used different pseudorandom generators for generating all random numbers in the game (Java Edition using a LCG whereas Pocket Edition used a MT19937), which includes the random numbers used for water and lava. Due to being random, however, this likely has negligible visual impact.