Description
Part of MCM (Minecraft Comes Military), a set of separate military mods: Aircraft, Devices, Hordes and Air Support. Each one works without the others.
Minecraft 1.21.1 · Fabric · mod id mcm_hordes · version 0.1.0 · MIT License
Zombie hordes that behave like hordes: they gather out of sight, walk as one mass, follow noise, and come for the place you live. Every horde is made of this mod's own zombies (vanilla zombie bodies, skins, sounds and drops). Works on its own: no other zombie mod, city, base or other mod of this series is needed.
Requirements
| Minecraft | 1.21.1 |
| Fabric Loader | 0.15 or newer |
| Fabric API | required |
| Distant Horizons | optional: far crowd figures hide behind far hills |
| Entity Texture Features | optional: far crowd figures use its random skins |
Install on the client and the server (it adds entities, items and a network packet).
Where a horde goes
Every horde that heads somewhere picks its target from the player it appears for, in this order (targets.order):
- village – at least 3 villagers within 96 blocks of the player (the middle of the largest group);
- bed – the player's bed (respawn point) in the overworld, if within 192 blocks of the player;
- player – where the player stands.
No coordinates, gates or walls are stored anywhere; the target is worked out again for each horde.
What happens, and when
All of it happens only in the overworld, at a difficulty above Peaceful, with the game rule doMobSpawning on.
Hordes gather only on dry ground in loaded chunks and never within 48 blocks of a player.
| Event | When | What it does |
|---|---|---|
| Night horde | On a horde night: every 3–5 in-game days, once night falls | For every player, a wave gathers 80–144 blocks from their target on the player's side, only where no torch or other light reaches (block light 0), and walks to the target. Size 60 to about 1000 (rolled), at most 160 at once. Sleeping through the night moves the horde night to the next night. |
| Day herd | About once every 1–2 in-game days | A herd of 3 to about 1000 (at most 160 at once) appears 64–160 blocks from a random player. Half of them walk to that player's target, the rest migrate past on a random bearing. |
| Runner surge | Rarely: every 3–7 in-game days, at night, not while a raid is on at the target | 120–220 fast zombies with 1–2 alphas gather 96–144 blocks from the target and charge it. |
| Expedition alpha | Now and then, when a player is more than 256 blocks from their bed (or the world spawn) | An alpha, alone or with up to 4 runners, appears out of sight 36–56 blocks away and hunts that player. Not while flying or riding something off the ground. |
| Great horde | 5 % chance per day, at least 14 days apart | A horde of about 9,600 (default) appears 6–14 km from a player's target. Rumours, then a scout report every morning. Half of them pass by; the others arrive and keep coming for 2–4 days. |
Every event can be switched off or tuned in the config. Chat notices (on by default) tell players within 256 blocks where a horde is gathering, which way and how far, and what it is heading for.
How herds behave
- A herd that has not noticed anyone walks as one mass on a shared heading (no pathfinding per mob, so hundreds stay cheap). Herd mobs drift together and fall in with their neighbours.
- Noise draws them: footsteps, blocks breaking and placed, explosions, doors, gunfire from other mods. Their own groans and music do not.
- Once a herd mob turns towards a noise it keeps walking that way for about 2 minutes, even after the noise stops or its source is out of sight. For the first 20 seconds only a noise at least twice as strong turns it again, and it turns at most about 17° per step, so a herd heads somewhere instead of spinning on the spot.
- A herd mob that sees a player (28 blocks) or a villager, trader or illager (18 blocks), or is attacked, wakes up its own AI and chases. At most 64 are awake at once; the rest stay in the herd.
- Herd mobs farther than 192 blocks from every player, or old, fade away one at a time (never within 48 blocks of a player).
- Herd mobs are zombies of this mod: vanilla zombie health, damage, sounds and drops. They do not burn in daylight (
herds.sunBurn), do not turn into drowned in water, and never break doors.
Runner surge
- Runners are horde zombies with extra speed, health and damage. They do not burn in daylight, ignore noise and lures, and only hunt people: players in survival/adventure and the entity tag
#mcm_hordes:humans(villagers, wandering traders, illagers, witches, and MCA villagers if MCA is installed). Golems, animals and other monsters are left alone. - Alphas (1–2 per surge) are larger (×1.3), much tougher, leap at prey, roar when they spot it and heal when not fighting. They find real paths around walls and over small gaps; the other runners follow the nearest alpha. When the last alpha falls the surge scatters for 8 seconds, then every runner charges on its own.
- Variants: sprinter (the fastest, 10 %), brute (heavier, opens wooden doors and fence gates, throws stones, rises once after falling, 15 %), scorcher (sets alight whatever it touches, rises once, 8 %).
- Wall piles: a runner blocked by a wall climbs it when 4 or more others crowd around it (up to 40 blocks, 16 seconds). No blocks are ever placed or broken; only wooden doors and fence gates are opened (never iron doors or powered doors).
- A surge ends when every runner has fallen, or after one in-game day; what is left then fades like any herd.
Great horde
- It is not simulated while far away: its course is a straight line worked out from the day, so it costs nothing until it is close.
- Day 0: a rumour of the direction. After 2 days: a report every morning (size estimate, distance and direction from its target, coordinates, heading, speed, and whether it will arrive, with a confidence that grows as it nears). Its bearing is picked so that it comes over land rather than from the sea.
- On arrival it appears 300 blocks out as a long column of packs that walks in at about 1.6 blocks per second and piles up 32 blocks from the target. Near players (22–64 blocks from them) the packs turn into real mobs, 16 per second, up to 480 alive. Explosions (vanilla or modded) kill the share of a pack they overlap. Every few minutes a runner surge breaks out of it.
- It ends when its days run out or it is beaten. Its state is saved in the world folder (
mcm_hordes_megahorde.json).
Distant crowds
Packs of a great horde and herd mobs beyond the entity view distance (up to 320 blocks) are drawn on the client as light figures with the zombie skin (resource pack and Entity Texture Features skins are picked up), blended smoothly between updates; the nearest are drawn with the real renderer. The cost per frame is measured and far figures are thinned above 3 ms. With Distant Horizons, figures behind far hills are hidden.
Optional zombie tweaks
| Key | Default | Effect |
|---|---|---|
zombies.huntRaiders |
true | Zombies and horde zombies also attack raiders (pillagers, vindicators, evokers, witches, ravagers), so a horde can be led into a raid. Raiders fight back. |
zombies.noSunBurn |
false | Vanilla zombies (and drowned, zombie villagers) do not burn in daylight. |
Spawn eggs
In the vanilla Spawn Eggs tab: Alpha, Runner, Sprinter, Brute, Scorcher. Each spawns one that belongs to no surge, hunts people nearby and stays until killed. Eggs work anywhere and at any light level.
Entities
mcm_hordes:herd_zombie, runner, sprinter, brute, scorcher and alpha, all zombies of this mod. One made with /summon in the overworld joins the herds; the runner types become a lone runner of that kind, as from a spawn egg.
Commands
All need permission level 2 (general.commandPermissionLevel).
| Command | Effect |
|---|---|
/mcmhordes status |
Herd and runner counts, the running surge, the great horde |
/mcmhordes herd |
A day herd near you now |
/mcmhordes night |
A night horde for you now |
/mcmhordes surge |
A runner surge for you now (any time of day) |
/mcmhordes megahorde status |
The latest scout report |
/mcmhordes megahorde start [arrive|miss] |
A great horde appears far away now |
/mcmhordes megahorde assault |
The great horde arrives now |
/mcmhordes megahorde stop |
Call it off (mobs already out stay) |
/mcmhordes reload |
Reload the config |
Config config/mcm_hordes.json
Created with defaults on first launch; an existing file is never overwritten. 20 ticks = 1 second, 24000 ticks = 1 day. Values are clamped to safe ranges.
| Key | Default | Meaning |
|---|---|---|
general.notices / noticeRadius |
true / 256 | Chat notices to players within this range |
targets.order |
village, bed, player | Target choice order |
targets.villageRadius / villageMinVillagers |
96 / 3 | What counts as a village |
targets.bedMaxDistance |
192 | A bed farther than this from the player is ignored |
herds.nightHordes |
true | Horde nights |
herds.nightIntervalDays / nightJitterDays |
3 / 2 | A horde night every 3 days plus up to 2 more |
herds.nightDistanceMin / Max, nightMinSize |
80 / 144, 60 | Night horde distance from the target and smallest size |
herds.dayHerds, dayIntervalTicks, dayJitterTicks |
true, 24000, 24000 | Day herds and how often |
herds.dayApproachChance |
0.5 | Share of day herds that head for a target |
herds.cap / groupMax / awakeMax |
360 / 160 / 64 | Herd mobs alive, per group, awake at once |
herds.fadeDistance / maxAgeTicks |
192 / 12000 | When herd mobs fade |
herds.hearSounds |
true | Noise draws herds |
herds.spawnRules |
true | Herd mobs never appear on leaves or logs |
herds.avoidLight |
true | Hordes gather only where block light is 0 (false = any light) |
herds.sunBurn |
false | Herd mobs burn in daylight (runners never do) |
runners.enabled, minIntervalTicks, jitterTicks, preferNight |
true, 72000, 96000, true | Runner surge schedule |
runners.spawnDistanceMin / Max |
96 / 144 | Surge distance from the target |
runners.minCount / maxCount / maxActual / maxTotal |
120 / 220 / 220 / 320 | Surge size, alive at once (on top of the herd cap), total with risen ones |
runners.spawnWaveSize / spawnWaveTicks |
30 / 60 | Spawned in waves |
runners.surgeMaxTicks |
24000 | Longest surge |
runners.huntRadius / targetHuntRadius / targetRadius |
48 / 64 / 16 | Hunting ranges |
runners.scatterTicks |
160 | Scatter after the last alpha falls |
runners.runner…, sprinter…, brute…, scorcher… |
see file | Variant shares and multipliers |
runners.bruteOpenDoors, bruteThrowStones, reanimate |
true | Variant abilities |
runners.climbPileThreshold, climbMaxHeight, climbMaxTicks |
4, 40, 320 | Wall piles |
alpha.min / max |
1 / 2 | Alphas per surge |
alpha.scale, healthMultiplier, damageMultiplier, speedMultiplier, armor… |
1.3, 7.5, 3.6, 1.3, 16… | Alpha body |
alpha.leap, pathfind, voice, voiceVolume, regenPerSecond |
true, true, true, 1.6, 2 | Alpha abilities |
expedition.enabled, minDistance, chance, escortMax |
true, 256, 0.02, 4 | Expedition alpha |
megaHorde.enabled, chancePerDay, minDaysBetween |
true, 0.05, 14 | Great horde schedule |
megaHorde.waveSize × plannedWaves (or nominal) |
160 × 60 | Great horde size |
megaHorde.arriveChance, startDistanceMin / Max, speedMin / Max |
0.5, 6000 / 14000, 600 / 1400 | Its course |
megaHorde.assaultDaysMin / Max, maxAlive, streamRate, siegeRadius |
2 / 4, 480, 16, 32 | Its arrival |
megaHorde.runnerWaveEvery / waveIntervalTicks |
3 / 900 | Runner surges out of it |
view.enabled, figures, models, budgetMs, proxies, range, groans |
true, 20000, 48, 3.0, 1500, 320, true | Distant crowds |
zombies.huntRaiders / noSunBurn |
true / false | Optional zombie tweaks |
The schedule of horde nights, day herds and surges is kept in the world folder (mcm_hordes_schedule.json), so short sessions still see them.
Known limitations
- Hordes are overworld only.
- A herd walking on a shared heading may wander into water or off cliffs until it notices someone; real pathfinding is used only by alphas and by mobs that are chasing.
- The great horde's notices go to every player in the overworld; the target it heads for is the one rolled when it appeared.
- Many hundreds of awake mobs are heavy on any server; lower
herds.cap,runners.maxActualandmegaHorde.maxAliveon small servers.
Credits & licenses
- This mod: all code and the alpha skin are original work made for this mod (drawn pixel by pixel), MIT License (
LICENSEin the jar). The spawn eggs are the vanilla spawn egg template tinted with this mod's colours. Herd zombies and runners use the vanilla zombie model, skin, sounds and loot table by name; no vanilla file is included. - Alpha voices: sound effects from Pixabay, used under the Pixabay Content License, cut and converted to
OGG for this mod (
alpha_roar1–5,alpha_screech1). They are not covered by the MIT License and may not be extracted and redistributed on their own. - Fabric API by FabricMC: Apache-2.0. Required, not included.
- Distant Horizons by James Seibel and the Distant Horizons team: LGPL-3.0. Optional, not included; read through its public API by name.
- Entity Texture Features by Traben: LGPL-3.0. Optional, not included; read through its public API by name.
- MCA Reborn: GPL-3.0. Optional; its villagers are only named in the
#mcm_hordes:humanstag. Nothing from it is included.
Community & support
Bug reports, feature requests and build previews live on the Discord:
If you would rather not use Discord, the CurseForge comment thread is read and answered too.






