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.

checks.yml
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.

checks.yml
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.

checks.yml
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.

checks.yml
hiding:
  block:
    freecam:
      enabled: false
      pocket-radius: 24
      max-y: 16

max-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:

TEXT
/ecstacy profiler antixray on
/ecstacy profiler antixray
/ecstacy profiler antiesp

max-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.

Last updated