-
-
Notifications
You must be signed in to change notification settings - Fork 0
Anti ESP
X-ray and ESP clients highlight spawner blocks from hundreds of blocks away, which turns any public server into a map of everyone's farms. Anti-ESP makes managed spawners look like ordinary stone to anyone who is not close enough to see them legitimately.
For each player, the plugin keeps track of which nearby spawners they should be able to see, and sends them a client-side block change for the rest:
- Revealed → the real spawner block, with the correct mob spinning inside.
-
Concealed → a camouflage block (
DEEPSLATEin the overworld by default).
The concealment is per player and purely visual. The world is untouched, the block is still a spawner for every purpose, and a concealed spawner still generates loot normally.
A spawner is revealed to a player when any of these is true:
- The player holds
ANTI_ESP.STAFF_BYPASS_PERMISSION(defaultultimatevirtualspawner.admin.spawner.seeall). - The player holds
ultimatevirtualspawner.admin.spawner. - The player is within range and, if
REQUIRE_LINE_OF_SIGHTis on, has an unobstructed view:- within
OWNER_SEE_RADIUS(default 9) if they own it, - within
REVEAL_RADIUS(default 7) otherwise.
- within
Only spawners within TRACKING_RADIUS (default 128) are considered at all — beyond that, nothing
is sent either way.
The line-of-sight test ray-traces from the player's eyes to the nearest face of the spawner block, ignoring fluids. A spawner directly behind a wall stays hidden even when it is two blocks away; standing in water or lava does not hide it.
| Trigger | |
|---|---|
| Player joins | full refresh |
| Player moves to a different block | refresh |
| Player teleports | refresh |
| Player changes world | refresh |
| A spawner is placed, stacked or broken | refresh for everyone within TRACKING_RADIUS
|
| Opening a spawner GUI | refresh for that player |
/spawner reload |
full refresh for everyone |
On shutdown every spawner is revealed again, so nobody is left with a stale fake block in their client after a reload of the server.
ANTI_ESP:
ENABLED: true
REVEAL_RADIUS: 7
OWNER_SEE_RADIUS: 9
TRACKING_RADIUS: 128
REQUIRE_LINE_OF_SIGHT: true
STAFF_BYPASS_PERMISSION: ultimatevirtualspawner.admin.spawner.seeall
CAMOUFLAGE:
OVERWORLD: DEEPSLATE
NETHER: NETHERRACK
THE_END: END_STONE| Key | Default | Notes |
|---|---|---|
ENABLED |
true |
Master switch. |
REVEAL_RADIUS |
7 |
Non-owners. Minimum 1. |
OWNER_SEE_RADIUS |
9 |
Owners. Automatically raised to at least REVEAL_RADIUS. |
TRACKING_RADIUS |
128 |
Automatically raised to at least REVEAL_RADIUS + 8. |
REQUIRE_LINE_OF_SIGHT |
true |
Also require an unobstructed view. |
STAFF_BYPASS_PERMISSION |
…admin.spawner.seeall |
Point this at your own node if you prefer. |
CAMOUFLAGE.OVERWORLD |
DEEPSLATE |
Any solid block material. |
CAMOUFLAGE.NETHER |
NETHERRACK |
|
CAMOUFLAGE.THE_END |
END_STONE |
All of these apply immediately on /spawner reload.
Pick something that is unremarkable at the depth where players build farms. The defaults are chosen for that: deepslate below Y 0, netherrack in the Nether, end stone in the End.
Bad choices give the game away just as effectively as showing the spawner:
-
BEDROCK— obviously wrong anywhere above the world floor. -
AIR— a floating hole in the wall is more visible, not less. -
BARRIER— invisible, so the spawner reads as an empty gap. - Anything with block entities or unusual shapes — chests, stairs, slabs.
Plain full cubes matching the local stone are the right call. If your players mostly build farms in a specific biome or at a specific depth, match that instead of the default.
| Goal | Change |
|---|---|
| Reveal a little earlier | REVEAL_RADIUS: 10 |
| Owners see their own farm across the room | OWNER_SEE_RADIUS: 16 |
| Strictest concealment |
REQUIRE_LINE_OF_SIGHT: true and REVEAL_RADIUS: 4
|
| Cheapest on a laggy server | Lower TRACKING_RADIUS to 64
|
| Off entirely | ENABLED: false |
REVEAL_RADIUS is the setting players notice. Too low and it feels glitchy — the block pops in
as they walk up to their own farm. 6–10 is a comfortable range.
Updates run whenever a player crosses a block boundary, and cover only spawners within
TRACKING_RADIUS in the player's own world. Each update sends at most one block change per
tracked spawner whose state actually changed.
If you run thousands of spawners in one busy area and see movement-related lag, lower
TRACKING_RADIUS first — it is the setting that bounds the per-move work.
Worth being honest about what this does and does not stop:
- It hides managed spawners. Vanilla spawners in dungeons are untouched — an X-ray client still finds those.
- A client that walks the area will still see spawners as it gets close; concealment is about denying free remote mapping, not making farms undiscoverable.
- It does not prevent access. A player who finds a spawner still has to pass the access check to do anything with it — see Permissions.
- spawners.yml — full key reference
-
Permissions — the
seeallbypass node - Performance Tuning
Repository · Releases · Issues · Discord · MIT License
Getting started
Reference
Configuration
Features
Operations
Development