"I turned on Paper's anti-xray, I'm covered." That is the sentence you read most often, and it rests on a misunderstanding: the built-in anti-xray does not detect anything. It hides. Those are two different jobs, and confusing them leaves a complete blind spot in your moderation.
What Paper's anti-xray actually does
The principle is server-side obfuscation: before sending terrain data to the client, the server replaces or hides certain blocks. The cheating player sees falsified information. One big advantage worth stressing: because everything happens server-side, no mod, texture pack or modified client can undo the protection.
The three engine modes
| Mode | What it does |
|---|---|
| engine-mode: 1 | Replaces the listed blocks with a dummy block (stone, deepslate, netherrack or end_stone depending on the dimension). Only ores entirely surrounded by solid blocks are hidden. This is the lightest mode. |
| engine-mode: 2 | Replaces both the hidden blocks and the replacement blocks with randomly generated ores. Better protection: the fake ores drown the real ones in noise. |
| engine-mode: 3 | Like mode 2, but the randomisation is applied per chunk layer instead of block by block. Cuts network load on join by a factor of about 2 and compresses chunk packets better. |
Which engine mode should you choose?
| Your situation | Mode | Why |
|---|---|---|
| You want zero impact on players' machines | 1 | The lightest for the client. But ores touching a cave stay visible. |
| You want the strongest protection | 2 | Fake ores drown the real ones. With air in hidden-blocks, ores exposed in caves get covered too. |
| Same as mode 2, with many players joining | 3 | Same principle as mode 2, with about half the network load when a player joins. |
PaperMC's own recommended configuration for modes 2 and 3 includes air in hidden-blocks, while warning that it can drop the FPS of every player, cheaters or not. If players complain after you enable it, removing air from the list is the first thing to try.
Where to configure it
The setting lives in config/paper-world-defaults.yml for every world. To give a dimension its own settings (the Nether does not have the same ores), override it in that world's paper-world.yml. Paper's documentation uses world/dimensions/minecraft/the_nether/paper-world.yml for the Nether; on installs where the Nether has its own world_nether/ folder, the file goes there. On very old versions, the setting lived in paper.yml.
Changes are not applied on the fly, and /reload does not apply them either: restart the server after editing.
Ready-to-use configuration: engine-mode 2
These are the values recommended by PaperMC's documentation. For mode 3, keep the same lists and just change engine-mode: 2 to engine-mode: 3.
Overworld — config/paper-world-defaults.yml (replace the existing anticheat.anti-xray block):
anticheat:
anti-xray:
enabled: true
engine-mode: 2
hidden-blocks:
- air
- copper_ore
- deepslate_copper_ore
- raw_copper_block
- diamond_ore
- deepslate_diamond_ore
- gold_ore
- deepslate_gold_ore
- iron_ore
- deepslate_iron_ore
- raw_iron_block
- lapis_ore
- deepslate_lapis_ore
- redstone_ore
- deepslate_redstone_ore
lava-obscures: false
max-block-height: 64
replacement-blocks:
- chest
- amethyst_block
- andesite
- budding_amethyst
- calcite
- coal_ore
- deepslate_coal_ore
- deepslate
- diorite
- dirt
- emerald_ore
- deepslate_emerald_ore
- granite
- gravel
- oak_planks
- smooth_basalt
- stone
- tuff
update-radius: 2
use-permission: false
Nether — the Nether's paper-world.yml:
anticheat:
anti-xray:
enabled: true
engine-mode: 2
hidden-blocks:
- air
- ancient_debris
- bone_block
- glowstone
- magma_block
- nether_bricks
- nether_gold_ore
- nether_quartz_ore
- polished_blackstone_bricks
lava-obscures: false
max-block-height: 128
replacement-blocks:
- basalt
- blackstone
- gravel
- netherrack
- soul_sand
- soul_soil
update-radius: 2
use-permission: false
End — the End's paper-world.yml. There is nothing to hide there, so obfuscation is turned off:
anticheat:
anti-xray:
enabled: false
Ready-to-use configuration: engine-mode 1
Overworld — config/paper-world-defaults.yml:
anticheat:
anti-xray:
enabled: true
engine-mode: 1
hidden-blocks:
- chest
- coal_ore
- deepslate_coal_ore
- copper_ore
- deepslate_copper_ore
- raw_copper_block
- diamond_ore
- deepslate_diamond_ore
- emerald_ore
- deepslate_emerald_ore
- gold_ore
- deepslate_gold_ore
- iron_ore
- deepslate_iron_ore
- raw_iron_block
- lapis_ore
- deepslate_lapis_ore
- redstone_ore
- deepslate_redstone_ore
lava-obscures: false
max-block-height: 64
replacement-blocks: []
update-radius: 2
use-permission: false
Nether — the Nether's paper-world.yml:
anticheat:
anti-xray:
enabled: true
engine-mode: 1
hidden-blocks:
- ancient_debris
- nether_gold_ore
- nether_quartz_ore
lava-obscures: false
max-block-height: 128
replacement-blocks: []
update-radius: 2
use-permission: false
The End: same as above, enabled: false.
What each setting does
hidden-blocks— the blocks to hide: ores, plusairin modes 2 and 3 to cover ores exposed in caves.replacement-blocks— in modes 2 and 3, common blocks that are also swapped for fake ores, so real ores can't be told apart from them. Unused in mode 1, hence[].max-block-height— nothing above this height is hidden: no point processing the surface. 64 in the Overworld, 128 in the Nether.update-radius— the radius around a block the player interacts with (by mining it, for example) within which real block data is sent back.lava-obscures— also hides what is in contact with lava.use-permission— whentrue, players withpaper.antixray.bypass(staff) see the world without obfuscation.
Turn it on. It is free, built in, effective against the vast majority of opportunistic cheaters, and requires no plugin. Nothing below says otherwise.
The distinction that changes everything: a lock, not a camera
A lock stops people getting in. A camera tells you who tried. Paper's anti-xray is an excellent lock — and there is no camera behind it.
In practice, the built-in anti-xray produces no trace at all: no log, no alert, no name. It cannot tell you that a player attempted anything, let alone who. If somebody gets through — and we are about to see that the official docs describe three ways to do so — they become completely invisible to you.
Several articles claim that "if your diamonds per minute exceed a natural threshold, the system automatically alerts the moderation team". Paper does nothing of the sort. No engine mode counts anything or sends any alert. That feature always comes from a third-party plugin.
The three limits acknowledged by Paper's documentation
These are not outside criticisms: PaperMC documents them itself.
1. Ore exposed to air stays visible
In modes 1, 2 and 3, an ore in contact with air — typically on a cave wall — is not hidden. It is therefore visible to a cheating client just as it is to everyone else.
You can mitigate this in modes 2 and 3 by adding air to hidden-blocks, but the docs warn that it can tank the FPS of all your players, including those who do not cheat. The cure is often worse than the disease.
2. Range extension
Because world generation is deterministic, a client can exploit that regularity to extend what it infers beyond what the server actually sends it.
3. Seed recovery — the fundamental flaw
This is the most serious one. Since the world is generated deterministically from a seed, a client that manages to recover your world's seed knows the real location of every generated ore. Obfuscation then becomes entirely useless: it no longer even needs to look at what the server sends.
Paper's feature-seeds options, combined with the structure seed settings in spigot.yml, make the job harder. But the documentation is explicit: this is not a complete solution, and a client can still get there.
The fourth limit, a structural one
This one appears in no documentation, because it is not a technical defect: anti-xray only protects the future.
The day you enable it, everything that happened before stays out of reach. If a player x-rayed for six months, obfuscation changes nothing about it — your server's economy is already unbalanced, and you still have no way of knowing who is responsible. The only thing that can answer that question is your history.
What that means in practice
The two layers do not replace each other — they complement each other:
| Built-in anti-xray (Paper) | History analysis | |
|---|---|---|
| Role | Prevent | Establish |
| Acts on | What happens after it is enabled | What has already happened |
| Names a player | No, never | Yes |
| If bypassed | No trace at all | The behaviour stays in the logs |
| Cost | Free, built in | Requires history (CoreProtect) and a tool to read it |
The key point is in the second-to-last row: the three documented bypasses above let someone see the ore, but none of them lets them collect it without breaking it. The mining behaviour always ends up in your logs. That is what makes after-the-fact analysis robust exactly where obfuscation gives way.
The logical next step How to detect an x-rayer with CoreProtect: the full method →Key points
- Enable Paper's anti-xray: it is a good first layer, free and impossible to undo client-side.
- But it hides, it does not detect: no log, no alert, no name.
- PaperMC documents three bypasses itself: ore exposed to air, range extension, seed recovery.
- A cheater who gets through leaves no trace on the anti-xray side — only in your block history.
- And none of this says anything about what happened before you turned it on.
Technical details and limits verified against the official PaperMC documentation.
Rather not do all this by hand? TunnelVision is an x-ray detection plugin for Minecraft servers running CoreProtect: it reads your block history, rebuilds every mining session in 3D and ranks the ones worth checking, each with an explained 0-100 score. A moderator still makes the call.
Try the 3D demo → · How TunnelVision's x-ray detection works
Keep reading
The camera missing behind the lock
TunnelVision works on the other half of the problem: it reads back the CoreProtect history your server already records, rebuilds mining sessions and surfaces the ones whose path has no innocent explanation — including for the period before your anti-xray was enabled. Every session comes with the indicators that explain its score, and the decision stays yours.