Zombie siege

Zombie sieges are in-game events where many zombies spawn in and attack a village, regardless of how well lit or walled off a village is.

Mechanics
At midnight each night (tick 18000 in Minecraft time), there is a 10% chance for the game to attempt a zombie siege that night. If a siege is to occur, attempts are made each tick to start the siege until either a siege is successfully started or the sun rises. Specifically, the siege attempt is abandoned when the sky light level reaches 12. However, inclement weather can allow siege start attempts to continue well past dawn since it reduces the sky light level.

Siege start checks
A player is a candidate for a siege if they are in a village and that player is not in spectator mode or in a biome with the  tag.

Ten attempts are made to choose a random siege starting point: first, a point 32 blocks away from the player in a random horizontal direction is chosen, and then a location is chosen (as described below) as if to spawn one zombie. If that succeeds in finding a valid zombie spawning point, the siege is started at the chosen starting point. If all ten attempts fail, the entire siege attempt fails, but another siege may be attempted on the next game tick.

Players are always checked in order, so as long as one player remains a valid candidate later players will not be checked.

Zombie spawning
During a siege, 20 attempts are made to spawn a zombie over the course of 3 seconds. For each zombie, 10 attempts are made to randomly choose a valid spawning point on the surface (i.e. on the highest block in any column) within a 16×16 horizontal distance around the chosen point. If a valid spawn point is found, a zombie is spawned.

Zombies spawned within a siege ignore player proximity and the presence of other mobs. Only the minimal spawning conditions are checked:
 * Light level must be appropriate for hostile mob spawning.
 * The surface block must not prevent spawning.
 * The block must be within a village.

Zombie villagers, husks and drowned are never spawned as part of a siege, but all other variations (e.g. baby, jockey, and equipment) are determined as for normal random spawns.

The zombies that spawn as part of a siege behave in the same manner as normally-spawned zombies; they attack all villagers within sight, and villagers and iron golems react accordingly. The zombies despawn as usual if the player is far enough away.

Recovery
If at least two villagers survive the siege, the villagers can breed and repopulate the village. Without player intervention, however, it is likely for villages to be wiped out by sieges and randomly-spawned zombies, and all the villagers would be either dead or zombified.

Even if no villagers survive, a village may be repopulated by curing zombie villagers, or by luring in villagers from another village.

Trivia

 * Sieges can occur on mushroom fields if the triggering player is in an adjacent biome.