Efficiently prevent players from using xray in your server hiding unexposed ores with RayTracing

The plugin is fully API-based with no reflections or version hacks. Works across updates without breaking.
Paper’s Engine Mode 1 is a good basic protection, but it works on a very simple rule: Paper hides a block only if ALL 6 of its faces are fully occluded. If ANY face is exposed (which also counts blocks colliding with water, lava or non obclusing blocks,even if the player cannot actually see it, the ore is revealed to x-ray clients.
Engine Mode 1 is lightweight, but not secure.
EliteAntiXRay uses a precise raytracing-based visibility system: If the player cannot actually see the ore (even diagonally or partially), it is hidden. Not just fully occluded blocks, ANY block that is not truly visible will be replaced with realistic stone.
This means: 100% of x-ray visibility leaks are fixed, no false positives.
EliteAntiXRay simulates real line-of-sight
The plugin calculates:
This is the same information the player would actually see, so x-ray clients get nothing your players shouldn’t have.
Bonus: EliteAntiXRay also works on regular spigot
EliteAntiXRay scans chunks slice-by-slice and locates real ore blocks using a highly optimized asynchronous pipeline.
Players see realistic stone patterns instead of obvious blocked ores. No strange artifacts, no laggy transitions.
When players legitimately expose a block (mining, explosions, piston movement, etc.), the hidden ores are instantly restored.
CONFIG.yml:
# DO NOT CHANGE THIS VALUE MANUALLY AS IT CAN BREAK THE PLUGIN!
file-version: 1
# max-height: The maximum height (Y coordinate) that will be considered for visibility checks.
max-height: 64
# min-real-radius: The radius (in blocks) around the player that will be
# considered as visible even if there are blocks in the way in order to
# not have weird blocks disappearing when the player is very close.
min-real-radius: 3
# max-chunks-per-tick: The maximum number of chunks that can be scanned per tick
# recommended is 4 to 8 depending on your server performance. Higher values can cause
# server lag with many players online/older cpus.
max-chunks-per-tick: 4
# max-chunks-per-tick-startup: The maximum number of chunks that can be scanned per tick
# during server startup. Recommended is 6 to 12 depending on your server performance.
max-chunks-per-tick-startup: 6
# slices-per-chunk: The number of slices to divide the chunk scanning into. More slices means less lag spikes
# but longer time to fully scan chunks.
slices-per-chunk: 8
# max-slices-per-tick: The maximum number of slices that can be processed per tick.
max-slices-per-tick: 3
# worlds: A list of worlds where the plugin is active.
worlds:
- world