# Custom Mobs

## Custom mobs

TCP-WildSpawners works with vanilla mobs out of the box, but the real value shows up when you wire it into a custom-mob plugin.

This page covers each supported provider — how to set it up, how mob ids work, and the gotchas to expect.

### Vanilla

```yaml
provider: vanilla
normal-mobs:
  - minecraft:zombie
  - minecraft:skeleton
ominous-mobs:
  - minecraft:wither_skeleton
```

**Always include the `minecraft:` prefix.** `minecraft:cow`, not `cow`. The plugin uses Bukkit's `Material.matchMaterial`-equivalent for entity types and the prefix matches Minecraft's namespaced-id format.

Vanilla provider is the only one that supports cage cycling — the spawner cage's mini-entity display will cycle through your configured mobs. Set `cycle-cage-mobs: true` (default for vanilla) to enable.

#### What works

Any non-boss living entity with a spawn egg. The full list is the same as vanilla's spawn-egg picker — the GUI's vanilla mob picker shows you exactly what's available.

#### What doesn't work

* Bosses (Ender Dragon, Wither, Warden) — vanilla refuses to spawn them via the trial-spawner mechanism.
* Non-living entities (item frames, paintings, projectiles).
* Custom-textured vanilla mobs (e.g. armour-stand-based "custom models") — those need a non-vanilla provider.

### MythicMobs

```yaml
provider: mythicmobs
normal-mobs:
  - Goblin
  - GoblinArcher
ominous-mobs:
  - GoblinChief
```

Mob ids are MythicMobs' own ids — the keys under `Mobs:` in your MythicMobs config. **Do not** prefix them with `minecraft:` or `mythic:` — bare ids only.

#### Setup

1. Install MythicMobs alongside this plugin.
2. Define your mobs in MythicMobs as usual (any modern version compatible with Paper 1.21.x).
3. Reference the mob ids in your `wild-presets.yml`.

#### Cage cycling

Falls back to a zombie placeholder for the cage display. MythicMobs' custom entities can't be rendered in the vanilla cage without a hard dependency on MythicMobs' bukkit-side rendering pipeline.

#### Failure modes

If a mob id doesn't exist in MythicMobs, the spawn is logged as a warning and skipped. The wave continues, just with one less mob.

If MythicMobs isn't loaded but a preset references it, the preset loads but every spawn attempt logs a warning. The console will be loud — fix it by either installing MythicMobs or removing the preset.

### EliteMobs

```yaml
provider: elitemobs
normal-mobs:
  - Boss_DesertGuard
ominous-mobs:
  - Boss_LegendaryDragon
```

Mob ids are EliteMobs' custom-boss ids — the filename of each custom-boss YAML under `plugins/EliteMobs/customBosses/` (without the `.yml` extension).

EliteMobs procedurally levels mobs by difficulty zone — placed spawners use the spawner's location for level calculation, so a spawner placed deep in a wilderness biome will spawn higher-level mobs than one placed near spawn.

### EcoMobs

```yaml
provider: ecomobs
normal-mobs:
  - GiantSpider
  - VenomSnake
```

Mob ids are EcoMobs' config ids — defined in `plugins/EcoMobs/mobs/*.yml`.

EcoMobs is more lightweight than MythicMobs — most servers run both or neither, depending on their custom-mob preference.

### LevelledMobs

```yaml
provider: levelledmobs
normal-mobs:
  - minecraft:zombie
  - minecraft:skeleton
```

LevelledMobs **modifies vanilla mobs in place** — it doesn't introduce new entity types. The mob ids you reference are still vanilla `minecraft:` namespaced ids; LevelledMobs intercepts the spawn and applies its level-based scaling.

Use this provider when you want vanilla mobs but with LevelledMobs' XP-based difficulty curves applied to spawner-spawned mobs.

### InfernalMobs

```yaml
provider: infernalmobs
normal-mobs:
  - minecraft:zombie
  - minecraft:skeleton
```

Same pattern as LevelledMobs — vanilla mob ids, with InfernalMobs' "infernal" elite-mob mechanics applied at spawn time. The mob has a configurable chance to be promoted to an Infernal Mob with the plugin's standard ability suite.

### Citizens

```yaml
provider: citizens
normal-mobs:
  - shopkeeper_npc
  - quest_giver
```

Mob ids are **NPC names or ids** from your Citizens database. Citizens NPCs aren't really "mobs" in the wave-combat sense — this provider exists for **decorative spawners** where the spawner cycles through NPC characters as wave participants.

Almost always paired with `allow-empty: true` and used for visual flair in adventure servers, not actual combat content.

### Mixing providers

Each preset has **one** provider — you can't mix vanilla mobs with MythicMobs in the same preset's mob list. To get a mixed wave, create one preset per provider and either:

* Issue both spawners as a "matched pair" gift.
* Or place them adjacent to each other so their activation ranges overlap.

### What the GUI does for non-vanilla providers

The admin GUI's "+ Add Mob" button has two behaviours:

* **Vanilla provider** → opens a paginated spawn-egg picker. Click any egg to add the corresponding mob to the list. No typing.
* **Non-vanilla provider** → opens a chat-input prompt. Type the mob id (or `cancel`); it's added to the list as you typed it.

The GUI doesn't enumerate non-vanilla providers' registries — that would require hard dependencies on each one. Chat-input is the universal fallback.

### Server load

Each spawner runs on the region thread that owns its block (under Folia) or the main thread (under Paper). The mob spawn itself is exactly as expensive as a vanilla trial spawner — the plugin doesn't add per-tick work beyond the existing scan loop.

A server with 100+ wild spawners placed simultaneously will see the same TPS impact as 100 vanilla trial chambers (which is to say, negligible — trial spawners are very cheap).

***

Next: **Distributing spawners →** · **The admin GUI →**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://darkstarworks.gitbook.io/darkstarworks-plugins/tcp-documentation/tcp-wildspawners/your-first-spawner/custom-mobs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
