Skip to content

Anti ESP

BeestoXd edited this page Aug 15, 2026 · 1 revision

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.

How it works

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 (DEEPSLATE in 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.

The reveal check

A spawner is revealed to a player when any of these is true:

  1. The player holds ANTI_ESP.STAFF_BYPASS_PERMISSION (default ultimatevirtualspawner.admin.spawner.seeall).
  2. The player holds ultimatevirtualspawner.admin.spawner.
  3. The player is within range and, if REQUIRE_LINE_OF_SIGHT is on, has an unobstructed view:
    • within OWNER_SEE_RADIUS (default 9) if they own it,
    • within REVEAL_RADIUS (default 7) otherwise.

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.

When it updates

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.

Configuration

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.

Choosing camouflage

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.

Tuning

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.

Cost

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.

Limitations

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.

See also

Clone this wiki locally