Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Links
Tags
Creators
Details
Entity Detective
Entity Detective is a server-side Fabric mod that gives admins surgical visibility into entity accumulation — find exactly where mobs, persistent creatures, and dropped items are piling up across every loaded dimension, without needing a client mod. Works in singleplayer without enabling cheats.
What it does
- Per-dimension summaries — See every entity type sorted by count, one block per dimension, across overworld, nether, and end simultaneously
- Clickable teleport links — Every chunk header and individual entity line is clickable in chat and pastes
/tp @s x y zdirectly to the chunk centre or exact entity location - Lazy mob detection — Pinpoint mobs stranded in chunks with no player within 128 blocks — the exact threshold Minecraft uses for despawn checks — where the server will never clean them up naturally
- Persistent mob detection — Find name-tagged mobs, item-holders, leashed animals, and vehicle riders that will never despawn even when they do tick
- MSPT profiling — Measure how many milliseconds per tick any entity type is consuming, or profile every type at once sorted by cost, over a configurable rolling window
- Live mob cap — Check current vs. maximum entities per category with colour-coded saturation so you can spot mob cap pressure at a glance
Command structure
/entitydetective
├── mob <category>
│ │ category: monster | creature | ambient | axolotls | water_creature | water_ambient
│ │ (bare) — Type-count summary per dimension
│ │ --lazy-only — Type-count table, non-persistent mobs in lazy chunks
│ │ --persistent — Type-count table, persistent mobs only
│ │ --world <dim> — Scope to overworld | nether | end
│ │ --range <chunks> — Scope to (2N+1)×(2N+1) chunk square (0 = single chunk)
│ │ --detail — Expand to chunk-grouped entity list with clickable /tp links
│ └── cap — Live mob cap (current vs max, colour-coded)
│
├── entity
│ │ (bare) — Summary of all entity types by count, per dimension
│ │ --lazy-only — Type-count table, non-persistent entities in lazy chunks
│ │ --persistent — Type-count table, persistent entities only
│ │ --world <dim> — Scope to a specific dimension
│ │ --detail — Expand to chunk-grouped entity list with clickable /tp links
│ ├── --range <chunks> — Instant census of every entity type within range (0 = single chunk; no tick window)
│ ├── locate <type> — Locate any entity type (tab-complete from live world, substring match)
│ │ --lazy-only, --world <dim>, --range <chunks>, --detail
│ ├── profile <type> [ticks]
│ │ Measure MSPT cost over a tick window (default 100 ticks / 5 s; max 6 000 ticks / 5 min)
│ │ --range <chunks>
│ └── profile all [ticks]
│ Profile every entity type simultaneously, sorted by MSPT cost descending
│ (bare): all dimensions | --world <dim>: one dimension | --range <chunks>: local
│
└── item
│ (bare) — Dropped item summary per dimension, colour-coded by severity
│ --lazy-only — Type-count table, lazy chunks only
│ --world <dim> — Scope to a specific dimension
│ --range <chunks> — Scope to chunk square around your position
│ --detail — Expand to chunk-grouped item list with clickable /tp links
└── locate <item_id>
Find chunks with a specific item type (tab-complete, substring match)
--lazy-only, --world <dim>, --range <chunks>, --detail
--detail must always be the last flag. --range and --world are mutually exclusive.
Why lazy and persistent mobs matter
Lazy mobs are non-persistent mobs in chunks with no player within 128 blocks — the exact threshold Minecraft's despawn logic uses. Because those chunks never tick entities, the normal despawn check never runs. Mobs accumulate there indefinitely. Use
--lazy-onlyto get a type-count table of what's building up, then add--detailfor chunk-grouped clickable/tplinks to teleport directly to the problem.
Persistent mobs are flagged by the game engine to never despawn, even in fully-ticking chunks. This includes name-tagged mobs, any mob that has picked up a dropped item off the ground, leashed animals, and mobs riding vehicles. Because they never despawn, they accumulate over time and increase the server's tick cost. Use
--persistentto see where they are building up.
Sample output
/entitydetective mob monster --lazy-only (type-count table)
-- lazy monster [overworld]: 45 entities --
minecraft:zombie 28
minecraft:skeleton 12
minecraft:creeper 5
Total: 45 entities across 3 types
/entitydetective mob monster --lazy-only --detail (chunk-grouped, clickable)
-- monster [overworld] (lazy, --detail): 45 entities in 2 chunks --
Chunk (12, -4) × 31 → /tp @s 192 ~ -64
[196, 63, -61] — minecraft:zombie
[191, 64, -68] — minecraft:skeleton "Bob" (name tagged)
...
/entitydetective entity profile all --range 10
-- Base Profile: 10-chunk range (100 ticks) --
3.636mspt TOTAL ×102
1.779mspt avg: 0.040ms piglin ×44
1.188mspt avg: 0.043ms hoglin ×28
0.402mspt avg: 0.040ms strider ×10
3.636mspt TOTAL ×102
/entitydetective item (severity-coloured)
-- Item Types [overworld]: 2 847 items --
2 130 items (142 entities) minecraft:cobblestone ← red
480 items ( 48 entities) minecraft:gravel ← yellow
12 items ( 4 entities) minecraft:diamond ← green
No client mod required · Works cross-dimension · Singleplayer compatible · Respects LuckPerms
Singleplayer world owner has full access without enabling cheats. On servers, requires op level 2 or the entitydetective.command LuckPerms node.
Releases · Source · License: MIT


