Description
SpawnForce is a lightweight Fabric mod that forces specific mobs to actually spawn when a datapack or worldgen mod asks for them. Many modded mobs (AdventureZ orcs/shamans/fungi, Soulslike Weaponry bosses, and similar) ship with strict vanilla spawn predicates (light, hardcoded biome lists, block type under feet) that silently refuse them in custom biomes even when the biome entry explicitly lists them. SpawnForce lets you whitelist entity IDs in a config file and bypasses those checks only for them, with a configurable anti-death list so forced mobs never spawn on lava or other killing blocks.
Core rule
The mod only touches entity IDs listed in force_spawn_entities. Any mob not in the list is completely ignored, no mixin side effect. No hidden global flag, no per-mob profile to maintain.
What it does
For each listed mob, at spawn time the mod:
- Verifies the block below the spawn position is solid (or a snow layer, for snow biomes).
- Verifies that block is NOT in
denied_blocks_below(lava, magma, fire, cactus, etc). - If both checks pass: forces
SpawnHelper.canSpawn,SpawnRestriction.canSpawnandMobEntity.canSpawnto returntrue, bypassing vanilla's strict predicate. - If the block below is denied: forces the call to return
false, guaranteeing the mob never spawns on a killing block even if vanilla would have allowed it.
The three bypass points are guarded independently by global toggles, so you can narrow the scope if a mod conflict appears.
Full configuration
{
"enabled": true,
"bypass_spawn_helper": true,
"bypass_spawn_restriction": true,
"bypass_mob_canspawn": true,
"debug": {
"enabled": false,
"log_bypass": true,
"log_spawn_result": true,
"log_rejection": true,
"summary_interval_seconds": 10
},
"denied_blocks_below": [
"minecraft:magma_block",
"minecraft:lava",
"minecraft:fire",
"minecraft:soul_fire",
"minecraft:cactus",
"minecraft:sweet_berry_bush",
"minecraft:powder_snow",
"minecraft:campfire",
"minecraft:soul_campfire"
],
"force_spawn_entities": [
"adventurez:orc",
"adventurez:shaman",
"adventurez:red_fungus"
]
}
Root keys
- enabled: master switch.
false= mod does nothing. - bypass_spawn_helper: toggle for the first vanilla gate (block / solid support / location).
- bypass_spawn_restriction: toggle for the second gate (light / biome predicate).
- bypass_mob_canspawn: toggle for
MobEntity.canSpawn, which vanilla hostile mobs use to enforce darkness. Required for hostile mobs to spawn on the surface. - denied_blocks_below: list of block IDs that ALWAYS reject a forced spawn, even if vanilla would have allowed it. Anti-death net. Missing = use built-in defaults shown above.
- force_spawn_entities: plain list of entity IDs to force-spawn. Only these mobs are affected.
- debug.*: see below.
Debug flags
All under debug.*:
enabled: master toggle for all logs below.false= no logs.log_bypass: logs each bypass with entity, block below, biome, light level. Sampled (first 5 hits, then every 50) to avoid spam.log_spawn_result: logs SPAWN OK / SPAWN FAIL once the entity actually enters the world. Useful to confirm the mob reached the ground.log_rejection: logs REJECT entries when the anti-death list kicks in. Sampled (first 5, then every 200). Leave on during setup to see which blocks you might want to add to the deny list.summary_interval_seconds: reserved for future use.
Typical setup
Drop the jar in
mods/. Start the game once to generateconfig/spawnforce.json.Add the entity IDs you want to force-spawn to
force_spawn_entities.Restart. Check the log at startup for:
[SpawnForce] enabled=true bypass{helper=true,restriction=true,mobCanSpawn=true} debug{…} entries=N denied_below=9 [SpawnForce] + mymod:some_mob
Teleport to a biome that should spawn your mob. With
debug.enabled=trueyou will seeBYPASSandSPAWN OKlines confirming it works.
Conflict and compatibility
- Pure Mixin HEAD inject, no access widener. Compatible with most Fabric performance mods (C2ME, Lithium, FerriteCore).
- Does not touch spawn weight or frequency; natural spawn rates are still governed by biome / datapack spawn entries (
weight,minCount,maxCount). - Chunk-generation spawns use a different code path and do NOT produce a
SPAWN OKlog, but theBYPASSlog confirms the mixin fired. This is normal.
Legacy config
If the mod detects an old format (e.g. nested per-mob profiles with allowed_blocks_below, defaults, mob_cap, etc.), it logs a warning and ignores those blocks. Migrate manually to the flat format above.
Restart the game after editing.
Recommended for
- Modpacks combining mob mods with custom worldgen (Big Globe, Terralith, Biomes O' Plenty, etc.) where modded mobs refuse to spawn in the custom biomes.
- Adventure / RPG packs that need specific hostile mobs on the surface of biomes where vanilla darkness rules would normally block them.
- Anyone who wants the equivalent of
In Control!/"result":"allow"on Fabric, without writing Java patches.
Used in the Legends Reborn: Medieval modpack.


