Credits and licence. This project is a derivative of Mob Spawner Control by Pyrofab (Ladysnake), which is open source under the GNU General Public License version 2 (original source). This version is also GPLv2: the licence text and a notice of every change ship inside the jar, and the full source of every file is at https://actuallyop.com/sources. The original author is not involved.
How it differs from the original: the original stops at Forge 1.12.2; this one is rewritten for Minecraft 1.21.4 to 26.3 on Fabric and NeoForge. It fixes the original's per-mob loot lists (they never applied), saves each spawner's count in its block data, uses a properties file instead of the Forge config, and leaves out the custom spawner blocks and the in-game config screen, which need a client mod. The full list is under "What changed from the original" below.
Runs on: Minecraft 26.3 on Fabric, and 1.21.11, 1.21.10, 1.21.8, 1.21.5 and 1.21.4 on Fabric and on NeoForge. Fabric files need Fabric API. Older versions: the original Mob Spawner Control covers Forge up to 1.12.2. Each file was tested on a real dedicated server, next to a control boot without the mod.
Mob spawners that never run out make XP farms too easy. With this mod a spawner wears out: after a set number of mobs (100 by default) it breaks, or switches off and smokes if you prefer. You also choose the experience and items a broken spawner drops, can make spawners torch-proof, and can change the experience and drops of the mobs spawners make.
Drop the jar in mods/ on the server; players install nothing and join with a normal client.
This is a continuation of Mob Spawner Control by Pyrofab (Ladysnake) (about 26 million CurseForge downloads, last released for 1.12.2 in 2019), ported to current versions with full credit; the original author is not involved. Original project: https://www.curseforge.com/minecraft/mc-mods/mob-spawner-control
The config, config/spawnercontrol/spawnercontrol.properties
The original's settings, with the same names and defaults. Lists are separated by ;. Apply changes with /spawnercontrol reload.
- alterVanillaSpawner (true): false leaves spawners as in vanilla
- mobThreshold (100): mobs a spawner may spawn over its lifetime. incrementOnMobDeath (false): count its mobs when they die instead
- breakSpawner (true): false keeps a used-up spawner in the world, switched off and smoking
- spawnRateModifier (1.0): multiplies the spawner's spawn delays with every mob (2.0 doubles them each time)
- xpDropped (15) and randXpVariation (15): experience from a broken spawner, xpDropped plus two random amounts up to randXpVariation
- itemsDropped: items a spawner drops when a player breaks it, modid:item(:count(:meta(:chance)))
- spawnConditions.forceSpawnerMobSpawns: hostile mobs from spawners skip their light and block checks, so torches no longer switch a spawner off; spawnConditions.checkSunlight (true) still keeps them out of daylight under open sky; spawnConditions.forceSpawnerAllSpawns does the same for every mob. Mobs never spawn inside walls
- mobLoot.defaultValues.* (xpMultiplier, flatXpIncrease, removeAllItems, removedItems, addedItems) for every mob from a spawner, and per-mob lists: mobLoot.xpMultipliers (minecraft:blaze:2.0:3), mobLoot.itemDropRemovals (minecraft:blaze,minecraft:blaze_rod), mobLoot.itemDropAdditions (minecraft:skeleton,minecraft:bone:1:0:0.5)
Commands for operators (new): /spawnercontrol info x y z (how many mobs a spawner has used, of how many), set x y z count, reset x y z, and reload.
What changed from the original
- Fixed: the per-mob loot lists never worked in the original (it compared an entity's namespace with its path the wrong way round, and two lists failed on loading); they now apply as described
- Removed: the custom spawner blocks (customSpawners), which need a client mod and textures, and the in-game config screen. Spawner minecarts and trial spawners are not affected, as before
- Settings are a properties file instead of a Forge config; item metadata in entries is read and ignored
- The count is saved with the spawner (spawnercontrol:SpawnedMobsCount in its block data)
What the tests showed on each file, against a control boot where a spawner kept spawning and a lit one spawned nothing: a new spawner counted every mob it spawned; with mobThreshold 8 it broke after exactly eight mobs, and with breakSpawner false it stayed and stopped at eight until /spawnercontrol reset; spawnRateModifier 2.0 doubled the delays with every mob; incrementOnMobDeath counted nothing while the mobs lived and every death after; forceSpawnerMobSpawns made a lit spawner spawn zombies but left animals alone, forceSpawnerAllSpawns let pigs out of a dark stone room, checkSunlight kept zombies off an open spawner at noon until it was set to false; a player breaking a spawner got exactly xpDropped 40 and the two diamonds from itemsDropped, never the 0% item; blazes from a spawner gave 23 experience each with xpMultiplier 2.0 and +3, two diamonds each, and no blaze rods, while a blaze that was not from a spawner kept its 10 experience; the count survived a restart; alterVanillaSpawner false let a spawner run past its limit; a player who is not an operator could not use /spawnercontrol. An operator joined with a vanilla-protocol client throughout.
Not tested: singleplayer and a real game client (the smoke of a switched-off spawner is sent, not seen); spawners in structures players find (only placed ones); other people's mods alongside; the Nether and the End.
Licence. GPL-2.0, as the original's licence file and store page say. The GPL text and a notice listing every change are inside the jar, and the source of every build, with its build scripts, is in the -sources.jar next to it: https://actuallyop.com/sources
Compatibility: Minecraft 26.3 (Java 25) with Fabric Loader and Fabric API, and 1.21.4 to 1.21.11 (Java 21) with Fabric Loader and Fabric API or with NeoForge; pick the file for your version and loader. Do not install it next to the original.
Found a bug or want a feature? Comment here and I will answer.
More free tools: actuallyop.com

