EliteMobs: setting up PvE bosses on a Minecraft server (2026)

EliteMobs: setting up PvE bosses on a Minecraft server (2026)

If MythicMobs feels too low level for your taste and you do not want to write every encounter from scratch, EliteMobs by MagmaGuy is the other big name in the PvE plugin space. Out of the box you get level scaled mobs, an Adventurers Guild hub world, instanced dungeons, custom bosses with abilities, custom items with stat ranges, quests, and Discord integration. Below I cover installation on Paper 1.21+, the parts of the config that actually matter, the YAML format for custom bosses, and where the sharp edges are.

What EliteMobs Does and Why You Run It Next to (Not Instead of) MythicMobs

EliteMobs is an open source PvE engine. Where MythicMobs is a kit you build encounters from, EliteMobs is closer to a full PvE game shipped as a plugin: it auto upgrades vanilla mobs into level scaled enemies, drops procedurally generated loot with stats, and gives you a parallel progression layer next to vanilla XP.

The split is roughly:

  • MythicMobs is the right pick when you want full control over every mob, every skill, every line of trigger logic.
  • EliteMobs is the right pick when you want a working PvE economy on a server tonight without writing a hundred YAML files.

Plenty of admins run both. EliteMobs handles overworld grinding and dungeons, MythicMobs powers handcrafted event bosses or custom mobs that need behaviour EliteMobs cannot express. The two plugins do not fight each other, they target different mobs.

What Players Actually Get

  • Vanilla zombies, skeletons, creepers spawn with levels, scaling stats and prefixes like Strong, Heroic, or Tanky.
  • A central Adventurers Guild hub world with NPCs, shops, queue stones for dungeons.
  • Instanced dungeons that load custom Minecraft worlds per party, on demand.
  • Custom bosses with phases, abilities, summons, regeneration mechanics.
  • Quests with NPC dialogue and procedural fetch and kill objectives.
  • Custom items with rolled stats and rarity tiers, sold at shops or dropped by elites.

Installation and First Boot

EliteMobs is published on Modrinth and Hangar. The current major release in 2026 is the 9.x line, requiring Paper 1.21+ and Java 21.

cd /opt/minecraft/plugins/
wget https://github.com/MagmaGuy/EliteMobs/releases/latest/download/EliteMobs.jar

Soft dependencies you will probably want to install at the same time:

  • WorldGuard plus WorldEdit for region exclusion (no elites on spawn).
  • Vault plus an economy plugin (EssentialsX, CMI) so the Adventurers Guild shops actually accept money.
  • DiscordSRV if you want boss spawn broadcasts in Discord.
  • PlaceholderAPI if other plugins need access to player level and currency.

Stop the server (do not /reload), drop the jar, start it again. EliteMobs builds a directory tree under plugins/EliteMobs/ and downloads its content packs from the Magmaguy server. The first start takes a minute longer than usual because it pulls a default content pack and writes about 200 YAML files.

plugins/EliteMobs/
├── config.yml
├── adventurersguild/
├── bosses/
├── customitems/
├── customlootlists/
├── customquests/
├── customschematics/
├── dungeons/
├── mobs/
└── translations/

After every YAML edit run /em reload for a soft reload. A real restart is still safer if you touched config.yml or world related settings.

Base config.yml: the Knobs That Move TPS

The default config.yml is verbose, but only a handful of options actually affect server load. The full reference lives in the GitHub wiki.

general:
  mobLevelCalculationCenter: SPAWN
  mobLevelCalculationRadius: 1500
  doMobsLevelByDistance: true
  preventCreeperGriefing: true
  preventCustomMobLootTheft: true
  defaultMobSpawnLevel: 1

combat:
  damageMitigation: true
  preventTrueDamageOnEliteMobs: true
  enableCombatTagging: true
  combatTagDuration: 30

economy:
  currencyName: 'Elite Coin'
  currencyShorthand: 'EC'
  defaultPlayerCurrencyName: 'gold'

mobLevelCalculationRadius is the single biggest switch. EliteMobs takes the distance from the calculation centre and uses it to assign levels. A radius that is too small dumps level 250 boss zombies fifty blocks past the wall; a radius that is too big leaves the entire map at level 1.

If you run a survival server on a 10k by 10k map, set the centre at spawn and the radius around 4000 to 5000. Players near spawn get level 1 to 10 mobs, players at the border get level 100+, the curve is roughly linear.

Turn off doMobsLevelByDistance only if you plan to use region based level zones via WorldGuard flags instead.

MobTier: How Vanilla Mobs Get Scaled

Every vanilla mob, when it spawns naturally, has a chance to be promoted to an Elite Mob. The upgrade tier is controlled by mobs/<entitytype>.yml:

# mobs/zombie.yml
isEnabled: true
spawnChance: 0.3
canBossSpawn: true
canBossDrop: true
healthMultiplier: 1.4
damageMultiplier: 1.2
xpMultiplier: 1.5

spawnChance: 0.3 means a 30 percent of natural zombie spawns get the elite treatment. On a busy survival server this number is the primary lever for both fun and TPS. Anything above 0.5 starts to feel oppressive in dark caves; anything below 0.1 makes EliteMobs look invisible.

Health and damage multipliers stack on top of the level scaling. A level 50 elite zombie with healthMultiplier: 1.4 ends up at roughly 1.4 times the level 50 base.

Disable a category entirely by setting isEnabled: false, useful if you want elite zombies and skeletons but no elite endermen ruining the End grind.

Adventurers Guild: the Lobby and Job System

The Adventurers Guild is a separate world, generated from a schematic on first run, that acts as a hub. Players warp in with /ag. NPCs in the hub sell custom items, run quests, accept dungeon queue tokens.

The guild also hosts the rank system: each player has a guild level and prestige tier. As you kill elite mobs your guild XP rises and you unlock higher tier shops, harder dungeons, and more inventory slots in the guild storage NPC.

In config.yml:

adventurersGuild:
  enabled: true
  worldName: 'adventurers_guild'
  guildHallChunkLoadingRadius: 3
  generateMaxLevel: 200
  prestigeMaxLevel: 10

If you only care about custom bosses and dungeons and you do not want a hub world, set enabled: false. The plugin still works without the guild, but you will lose the prestige progression layer and the central NPC shops.

Custom Bosses: the YAML Format

This is the meat of the plugin. Boss files live under bosses/, one boss per file. A minimal boss looks like this:

# bosses/lichking.yml
entityType: WITHER_SKELETON
isEnabled: true
name: '&5&l✦ &f&lLich King &5&l✦'
level: 50
health: 4200
damage: 22
isPersistent: true
followRange: 48
movementSpeed: 0.32

helmet: PLAYER_HEAD:eyJ0ZXh0dXJlcyI6...
chestplate: NETHERITE_CHESTPLATE
mainHand: BLAZE_ROD
mainHandEnchantments: 'SHARPNESS,3:KNOCKBACK,1'

powers:
  - bonus_health
  - flames_of_hell
  - summon_skeletons
  - lightning_bolts
  - tracking_skeletal_horse
  - movement_slowness_aura

uniqueLootList:
  - lich_crown:1
  - frostmourne:0.15
  - elite_coin:200

onDeathCommands:
  - 'broadcast &5The Lich King has fallen!'
  - 'tellraw @a {"text":"+200 EC awarded","color":"gold"}'

spawnLocations:
  - 'world,2400,72,-1850'

spawnChance: 1.0
spawnCooldownMinutes: 360

Key fields and what they actually do:

  • entityType is the vanilla base. Wither Skeleton gives you melee with knockback resistance for free.
  • level overrides the area auto level for this specific boss. Set it independently of the zone.
  • powers is a list of reusable scripts under powers/. EliteMobs ships ~60 default powers, you compose them.
  • uniqueLootList references items from customitems/ by file slug, with a drop chance.
  • onDeathCommands runs as console after death, ideal for currency rewards or DiscordSRV broadcasts.
  • spawnLocations is one or more fixed coordinates. With spawnCooldownMinutes you build a respawning world boss without the schematic dance MythicMobs requires.

After saving, run /em reload and check the log. A successful parse logs the boss name; a failure logs the YAML line and the missing field.

Powers (Abilities)

Powers are the action layer. A power is itself a YAML file under powers/ and can be a major (active) power or a minor (passive) power.

Example custom power:

# powers/frost_nova.yml
powerType: MAJOR
fileVersion: 2
warningRange: 16
range: 10
damage: 6
cooldown: 12
chargeUp: 40
visualEffect: SNOWBALL,40,0.5
soundEffect: ENTITY_BLAZE_SHOOT,1.0,0.6
fillerVisualEffect: CLOUD,1.0
applyPotionEffectsToTarget:
  - 'SLOWNESS,80,2'

This builds a frost nova: 16 block warning, 10 block AoE on cast, snow particles on the windup, blaze sound on launch, four seconds of slowness 3 on hit. Drop it into the boss powers: list and it works on the next reload.

Custom Items: Stat Rolls and Drops

customitems/ defines the loot. Each file is one item with optional stat ranges, enchantments, and a rarity tier. Items go into the loot list of a boss or get sold by guild NPCs.

# customitems/frostmourne.yml
material: NETHERITE_SWORD
name: '&3&l❄ Frostmourne ❄'
lore:
  - '&7Forged from the souls'
  - '&7of fallen Lich Kings.'
itemType: UNIQUE
itemRarity: EPIC
levelRequirement: 50

enchantments:
  - 'SHARPNESS,7'
  - 'UNBREAKING,4'
  - 'KNOCKBACK,2'

potionEffects:
  - 'SLOWNESS,5,1'

scalesWithLevel: true

itemType: UNIQUE flags the item as soulbound to the player who picked it up. scalesWithLevel: true means damage scales when wielded by a higher level guild member.

For procedurally generated loot use customitems/ files with itemType: PROCEDURAL and let the engine roll the stats per drop.

Instanced Dungeons: How the Worldgen Works

EliteMobs ships dungeon content packs as schematics and a metadata file. When a party joins a dungeon queue at the guild hub, the engine pastes the schematic into a fresh world (em_dungeon_<id>) and teleports the party in. The world unloads when the party leaves or after a timeout.

Free dungeons live under dungeons/. Premium dungeon packs from magmaguy.com are essentially the same files plus more bosses and a paste schematic for the dungeon environment.

A dungeon descriptor:

# dungeons/lichking_tomb.yml
isEnabled: true
schematicName: 'lichking_tomb'
worldName: 'em_dungeon_lichking'
dungeonSizeCategory: SMALL
minPlayers: 1
maxPlayers: 5
levelRequirement: 45
guildLevelRequirement: 6
permission: 'elitemobs.dungeon.lichking'
bossList:
  - skeletal_warden
  - lich_king
revivePoint: '0,72,0'

Pulling instance worlds in and out of memory is heavier than a regular /tp. On a 4 vCPU node keep the cap at three concurrent instances, beyond that the world load spikes start hitting the main tick.

Integrations Worth Wiring Up

WorldGuard Region Exclusion

Without exclusions, the Adventurers Guild hub gets random elite mobs spawning in the lobby. Drop a region around the hub and add the EliteMobs flag:

//pos1, //pos2, /rg define guild_safezone
/rg flag guild_safezone elitemobs-spawn deny
/rg flag guild_safezone pvp deny
/rg flag guild_safezone mob-spawning deny

The elitemobs-spawn flag is registered by EliteMobs at startup. Setting it to deny blocks both elite upgrades and custom boss spawn locations inside the region.

Vault Economy

EliteMobs uses Vault to read and write the standard server currency. Players spend it at guild NPCs and earn it from elite kills. The currency name in config.yml (defaultPlayerCurrencyName: gold) must match the symbol your Vault provider exposes.

If you want a separate currency only for guild shops set currencyName: 'Elite Coin' and the plugin tracks it independently of the Vault balance. This is the cleaner choice on RPG servers where you do not want regular shop economy and dungeon economy bleeding into each other.

DiscordSRV Boss Broadcasts

DiscordSRV hooks pick up EliteMobs spawn events. Configure the channel mapping in plugins/DiscordSRV/config.yml and use the onSpawnCommands field on bosses to push messages:

onSpawnCommands:
  - 'discordsrv send #elite-bosses **Lich King** has spawned at world,2400,72,-1850'

For a richer integration the EliteMobs DiscordSRV addon (separate jar from the same author) auto broadcasts boss kill events with embeds and player names.

Quests System

Quests live under customquests/. The plugin generates dynamic quests from templates plus you can author static quests by hand.

# customquests/find_lich_relic.yml
isEnabled: true
questName: 'The Lost Lich Relic'
questDescription: |
  &7An ancient lich lord stalks the wastes.
  &7Slay him and bring back the cursed crown.
questGiverFilename: 'guildmaster.yml'
quitCommands: []

questObjectives:
  - 'CUSTOMKILL:lich_king,1'

questRewards:
  currencyReward: 250
  itemRewards:
    - 'lich_crown:1'
  experienceReward: 1500

questGiverFilename references a Citizens NPC config or an EliteMobs NPC under npcs/. The plugin handles dialogue, objective tracking, and reward delivery internally.

Boss YAML Cheat Sheet

FieldRequiredPurpose
entityTypeyesVanilla mob base (ZOMBIE, WITHER_SKELETON, ENDER_DRAGON, ...)
nameyesDisplay name with color codes
levelyesFixed level for stats and matchmaking
healthyesBase HP, multiplied by level scaling
damageyesBase damage
powersnoList of major and minor power filenames
helmet / chestplate / leggings / bootsnoEquipment slots, support player heads
mainHand / offHandnoWeapon slots with optional enchant string
uniqueLootListnoList of customitem:chance pairs
onSpawnCommandsnoConsole commands at spawn
onDeathCommandsnoConsole commands at death
spawnLocationsnoFixed coordinates with cooldown
spawnChancenoFloat 0.0 to 1.0 for natural spawns
regionalBossnoHooks the boss to a WorldGuard region
phasesnoHealth threshold transitions to other bosses
mountedEntitynoSlug of another EliteMobs mob ridden by this one
escapeMechanicsnoDespawn or rage when players retreat

Common Mistakes and How to Spot Them

  • Forgetting /em reload after a YAML edit and assuming the change does not work.
  • Setting spawnLocations outside any region with elite spawning enabled and wondering why the boss never appears.
  • Running EliteMobs on Spigot. The plugin requires Paper or a Paper fork. Spigot is not supported and you will see odd entity behaviour.
  • Putting custom items into both uniqueLootList and a global loot list at high drop chance. The two stack and you end up handing out four legendaries per boss.
  • Leaving mobLevelCalculationRadius at the default 1500 on a 10k map. Mobs at the border end up oversized and one shot newcomers.
  • Loading a content pack made for a different EliteMobs major version. Boss YAML schemas change between 8.x and 9.x; check the migration notes in the GitHub release notes before importing old packs.
  • Running with default Vault economy on a creative server where players have unlimited money. Guild progression breaks because everyone instantly buys top tier items.

FAQ

Can I run EliteMobs and MythicMobs on the same server? Yes. They do not share entity registration logic, custom mob namespaces are separate, and both plugins respect each other's spawn flags. A common setup uses EliteMobs for the open world grind and MythicMobs for handcrafted event bosses where you need finer skill scripting.

Does EliteMobs require Citizens? No. The plugin ships its own NPC system based on armor stand entities. If you already run Citizens you can wire quest givers through Citizens, but it is optional.

How heavy is the dungeon system on TPS? Pasting a schematic the first time costs a few seconds of stutter on a small dungeon and up to ten seconds on a big one. After the world is loaded it costs roughly the same as any other world running with a small player count. Cap concurrent dungeons at three on a 4 vCPU node.

Is there a Bedrock or Geyser compatible version? EliteMobs is Paper only. Players join through Geyser fine, but resource pack styled bosses will look different on Bedrock and a few hover keybinds in the GUIs are awkward without a mouse. The core gameplay works.

What happens during a DDoS attack while a dungeon is loaded? The dungeon world stays loaded as long as the server stays up. If the JVM stays online and the network layer is filtered, players in the instance keep playing. This is exactly the case where putting the server behind dedicated Minecraft DDoS protection at the network edge pays off, the JVM never sees the bad traffic and the dungeon does not unload from a TPS crash.

Can I extend the plugin with my own powers without recompiling? Yes within reason. Powers are YAML configs that compose existing primitives (damage, potion, particle, sound, summon). For genuinely new behaviour you would write a small companion plugin that listens to EliteMobs events. The author has a public API on the GitHub repo.

That covers the production path: install on Paper 1.21+, lock down the level radius, configure MobTier per mob, write a couple of bosses by hand, wire WorldGuard region flags, point Vault at the right currency, and let the rest grow from there. The plugin scales well if you keep an eye on the dungeon cap and you do not chain twenty powers per boss.


Protect Your Server from DDoS Attacks

Free protection with 5-minute setup. 1 TB bandwidth included.

Try for Free


Related Articles