Hiding — AntiESP and AntiXray
The hiding family does not flag anyone. It removes the information an ESP or Xray client would
need, by not sending it. There is no violation level, no threshold and no punishment here — only
what each client is allowed to know.
Both halves are off by default, because they change what every player receives.
AntiESP — hiding.entity
Hides entities a player cannot actually see, so an ESP module has nothing to render.
hiding:
entity:
enabled: false
types:
- "*"
show-distance: 48.0
show-y: -60.0
use-fov: false
fov-degrees: 70.0
move-threshold: 0.5
rot-threshold: 5.0
check-interval-ticks: 4| Key | Meaning |
|---|---|
types |
Entity types the cull may hide, as Minecraft registry names, case-insensitive. "*" means all types |
show-distance |
Beyond this distance an entity is never sent, visible or not |
show-y |
Entities below this Y are always sent regardless |
use-fov / fov-degrees |
Also cull entities outside the player's field of view |
move-threshold |
Blocks the player must move before the cull re-runs |
rot-threshold |
Degrees the player must turn before the cull re-runs |
check-interval-ticks |
How often the cull runs. 4 is 200 ms |
Tip
Set types to ["player"] if you only care about combat ESP. Culling every entity type costs
more and can make mobs and dropped items pop in noticeably.
AntiXray — hiding.block
Replaces blocks a player cannot see with ordinary rock, and reveals them once they genuinely come into view.
hiding:
block:
enabled: false
reveal-distance: 16
reveal-pocket: 3
reveal-hysteresis-ticks: 10
max-raycasts-per-tick: 64
max-updates-per-tick: 2048
move-threshold: 1.0
replacement-block: STONE
deep-replacement-block: DEEPSLATE
exclude-bedrock: true| Key | Meaning |
|---|---|
reveal-distance |
How far a block may be and still be revealed once visible |
reveal-pocket |
Everything this close is always real — stops mining or parkour hitting a block that is not there |
reveal-hysteresis-ticks |
Consecutive sweeps a revealed block must stay out of sight before it is hidden again |
max-raycasts-per-tick |
Line-of-sight samples per sweep. Higher is snappier and costs more CPU |
max-updates-per-tick |
Cap on block updates in one sweep — protects against teleport and elytra bursts |
move-threshold |
Blocks moved before the reveal sweep re-runs |
replacement-block / deep-replacement-block |
The disguise used above and below the deepslate transition |
exclude-bedrock |
Bedrock clients through Geyser or Floodgate skip obfuscation entirely |
Which blocks are hidden
hiding.block.hidden-blocks is the list replaced at any Y until the player can see them. It ships
covering ores (overworld, nether and ancient debris), containers (chests, barrels, hoppers,
dispensers, droppers), spawners including trial spawners, redstone components, and every shulker
box colour.
The list takes any Minecraft registry name, case-insensitive — add or remove entries freely.
HideStructure
Fills caves, mineshafts, strongholds and stashed bases with natural rock, so cave-finder and map mods see solid terrain. Revealed the same way ores are: by walking into it.
hiding:
block:
structure:
enabled: false
hide-level: 16
smart-fill: true
seed-from-borders: false
max-flood-cells: 40000
hidden-blocks:
- RAIL
- TORCH
- COBWEB
- STONE_BRICKS
worlds:
world_nether:
hide-level: 40
world_the_end:
hide-level: 32| Key | Meaning |
|---|---|
hide-level |
Y below which structures and caves are sealed |
smart-fill |
Blend the fill into the surrounding blocks instead of a flat grey box |
seed-from-borders |
true is conservative — air touching a chunk border counts as open, so cross-chunk caves stay visible. false hides mineshafts |
max-flood-cells |
Reachability budget per chunk. A chunk that blows the budget is left untouched |
hidden-blocks |
Blocks disguised below hide-level even when exposed — the giveaways of a built structure |
worlds |
Per-world overrides. Any key you omit falls back to the values above |
The structure.hidden-blocks list is separate from the top-level one, and is about built
structures rather than ores: rails, planks, fences, torches, cobwebs and the stone-brick family.
Freecam pocket
Keeps only a bubble around the player real. Everything past it is solid rock, so panning a freecam through a wall shows nothing.
hiding:
block:
freecam:
enabled: false
pocket-radius: 24
max-y: 16max-y defaults to structure.hide-level when unset.
Cost
The hiding checks are the only part of Ecstacy that does real per-tick work on your server, so they are the only part worth profiling:
/ecstacy profiler antixray on
/ecstacy profiler antixray
/ecstacy profiler antiespmax-raycasts-per-tick and max-updates-per-tick are the two knobs that trade responsiveness for
CPU. Lower them first if the profiler shows the sweep costing more than you want.
Warning
reveal-pocket exists to keep the world honest at arm's length. Setting it to 0 means a
player can mine into a block the client believes is stone and get an ore — visually jarring, and
a support ticket waiting to happen. Leave it at 3 unless you have a reason.