Skip to content

spawners.yml

spawners.yml is the catalogue of spawner types: what each one drops, how much experience it gives, its five upgrade axes and their prices, its spawn-egg rule, and what it costs to place, mine or stack. It carries no config-version and is not merged with the shipped copy on update — a type you delete stays deleted, and anything your copy does not name still answers from the jar’s own copy.

A spawner is a type, not a mob. In DROPS mode nothing is ever spawned — the entity named is only the drop-table key and the figure turning in the cage. Every vanilla mob is already a type before this file is read; an entry in the file overrides one of those by id, or adds an id no mob owns (a diamond or coal spawner) for a type with no mob behind it.

items:
ruby: { material: EMERALD, name: '<red>Ruby', model: 1001 }

Only needed for a drop that wants a name, a CustomModelData, or another plugin’s item instead of a plain material. A plain material is named where it is used and its own name is its store id; two types dropping BONE bank into the same count.

Every type starts from DEFAULT and only names what it changes. A field not named in a type falls back to DEFAULT’s value for that field, except drops, which always replaces the inherited list rather than merging into it.

spawners:
DEFAULT:
mode: DROPS # DROPS | MOBS
entity: <mob or NONE> # the figure in the cage / what MOBS mode spawns
experience: 5 # a number, or a range like 1-3
drops:
- { material: ROTTEN_FLESH, amount: 0-2, chance: 100 }
upgrades: # axes: range, delay, amount, capacity, xp
range: { enabled: true, base: 16, increase: 4, max-level: 5, price: { formula: '2500 * <level>' } }
delay: { enabled: true, base: 400, increase: -40, max-level: 5, price: { formula: '2500 * <level>' } }
amount: { enabled: true, base: 4, increase: 2, max-level: 5, price: { formula: '2500 * <level>' } }
capacity: { enabled: true, base: 1728, increase: 1728, max-level: 5, price: { formula: '2500 * <level>' } }
xp: { enabled: true, base: 100000, increase: 100000, max-level: 5, price: { formula: '2500 * <level>' } }
eggs:
enabled: true
allowed: [] # type ids an egg may convert to; [] = any
price: { mine: 0, place: 0, stack: 0 }
  • mode: DROPS never spawns a mob — the type produces drops and experience directly, and a hundred spawners stacked into one block produce exactly what a hundred spread over a field produce. mode: MOBS is the vanilla spawner with the upgrade values written onto the block; the server does the work, but vanilla’s own nearby-mob cap applies, so the equal-output promise does not hold for MOBS (see How spawners work). A type with no entity is always DROPS, whatever mode says.
  • Each upgrade axis’s value at a level is base + (level - 1) × increase. price is either a formula or a list of manual per-level prices; level 1 is always free.
  • eggs.enabled: false makes a type untouchable from both ends of an egg change — nothing turns into it and it turns into nothing. eggs.allowed only ever narrows the list; an egg change that would move a spawner onto a type charging different upgrade prices is refused regardless of this list.
cow:
experience: 1-3
drops:
- { material: BEEF, amount: 1-3, chance: 100 }
- { material: LEATHER, amount: 0-2, chance: 100 }
upgrades:
amount:
price: { formula: '1000 * <level>' }
price:
place: 10000

Only the fields a type names are overridden; everything else — including the other four upgrade axes — is still inherited from DEFAULT.

A price formula takes + - * / ^, brackets, and exactly three placeholders:

  • <level> — the level being bought.
  • <max> — the tier’s max-level.
  • <stack> — how many spawners the block holds.

The shipped prices omit <stack>, so one purchase upgrades every spawner in the block for one price — this rewards stacking and is cheaper for the server to run. To charge per spawner in the block instead, multiply by it:

price: { formula: '2500 * <level> * <stack>' }

A type with no vanilla mob — coal, iron, diamond, and similar — adds a few extra fields:

diamond:
display: '<aqua>Diamond Spawner'
entity: NONE
eggs:
enabled: false
stack-limit: 4
drops:
- { material: DIAMOND, amount: 1-2, chance: 100 }
upgrades:
amount:
price: { formula: '250000 * (<level> - 1)' }
  • display — a MiniMessage string that becomes the whole item name, in place of the default messages.yml name template.
  • stack-limit — caps how many of this type may share one block, on top of (never above) whatever stacking.limit in config.yml allows.
  • mythic-mob — a MythicMobs mob name, spawned by the plugin’s own timer in MOBS mode. Never inherited from DEFAULT.
  • model — a model id another plugin (ModelEngine, BetterModel) draws in the cage instead of the vanilla figure. Never inherited from DEFAULT.

The jar ships roughly thirty types across five price bands — animals (10,000), common hostiles (25,000, DEFAULT’s own band), useful hostiles (75,000), rare mobs (200,000), and resources (25,000 to 600,000, priced against what the ore is worth). Every vanilla mob not otherwise listed is still a spawnable type at DEFAULT’s values.