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
Each village has a center, a claimed bell placed in the village's boundary. For each player, the village with the center nearest to that player is a candidate for a siege when the player is less than the village's size + 1 blocks away from the center (by euclidean distance).

In other words, the player must essentially be within the village for a siege to be considered.

If the candidate village has fewer than 10 beds, fewer than 20 villagers, or the village has not been "stable" (no beds added or removed) for at least 20 ticks (1 second), the next player's village is considered.

Ten attempts are made to choose a random siege starting point on a circle with a radius 0.9 times that of the village's size centered upon a village that is not within the bounds of any other village. The Y value of the chosen point is that of the center of the village. If all ten attempts fail, the entire siege attempt fails, but another siege may be attempted on the next game tick.

If a valid siege starting point is found, 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. Otherwise, the next player's village is considered.

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 within a 16×16×6 box 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: Note in particular that siege zombies can spawn inside transparent blocks such as slabs that normally prevent mob spawning.
 * The spawning block must be transparent and non-fluid.
 * The block directly below it must have a solid top surface.
 * This includes upside down stairs and slabs.
 * The block directly below it must not be bedrock.
 * The block directly above it must be transparent as well.
 * The block must be within the target 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.

For the most part, 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. However, if the zombies happen to wander away a certain distance (greater than the size of the village) from the center of the village, they return toward the village center if they are not actively pursuing a target. 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. The village remain safe from future sieges until the population reaches 20. 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 cannot occur on mushroom fields, but zombies can spawn outside of the mushroom biome and walk into a nearby village.

Gallery
Most images are prior to Village & Pillage update