promotional bannermobile promotional banner
premium banner
Forces specific entities to spawn by bypassing canSpawn checks. Config-driven, mod-agnostic. Works with AdventureZ, Marium's Soulslike Weaponry, and any mod whose mobs refuse to spawn due to restrictive predicates.

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:

  1. Verifies the block below the spawn position is solid (or a snow layer, for snow biomes).
  2. Verifies that block is NOT in denied_blocks_below (lava, magma, fire, cactus, etc).
  3. If both checks pass: forces SpawnHelper.canSpawn, SpawnRestriction.canSpawn and MobEntity.canSpawn to return true, bypassing vanilla's strict predicate.
  4. 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

  1. Drop the jar in mods/. Start the game once to generate config/spawnforce.json.

  2. Add the entity IDs you want to force-spawn to force_spawn_entities.

  3. 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

  4. Teleport to a biome that should spawn your mob. With debug.enabled=true you will see BYPASS and SPAWN OK lines 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 OK log, but the BYPASS log 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.