- Minecraft Versions
- 1.16.+, 1.17.+, 1.18+, 1.19.+, 1.20.+
RayTraceAntiXray
Paper plugin for server-side async multithreaded ray tracing to hide ores that are exposed to air using Paper Anti-Xray engine-mode 1.
Paper Anti-Xray can't hide ores that are exposed to air in caves for example (see picture below). This plugin is an add-on for Paper Anti-Xray to hide those ores too, using ray tracing to calculate whether or not those ores are visible to players.
How to install
- Download and install Paper 1.20.
- Enable Paper Anti-Xray using engine-mode: 1.
- Download and install ProtocolLib.
- Download and install RayTraceAntiXray. (For older Minecraft versions, browse the update history.)
- Configure RayTraceAntiXray by editing the file plugins/RayTraceAntiXray/config.yml (see default config below).
- See also: Recommended settings below.
- Note that you should restart your server after each of these steps. Don't enable, disable or reload this plugin on a running server under any circumstances (e.g. using /reload, plugin managers, etc.). It won't work properly and will cause issues.
Demo
Default config
Code:
# This is an example configuration. Lines starting with # are comments and are ignored.
#
# settings:
# anti-xray:
# update-ticks: 1 # Time period in Minecraft ticks for sending block updates.
# ms-per-ray-trace-tick: 50 # Target time per ray trace tick in milliseconds.
# ray-trace-threads: 2 # Number of threads that are used for ray tracing.
# world-settings:
# default: # All worlds inherit settings from the default section.
# anti-xray:
# ray-trace: true # Whether or not to enable ray tracing. Note that Paper Anti-Xray must also be enabled using engine-mode: 1.
# ray-trace-third-person: true # Whether or not to ray trace third person back and front view. Note that this is even more resource intensive.
# ray-trace-distance: 64.0 # Maximum distance between player (eye location) and block (center) for ray tracing.
# max-ray-trace-block-count-per-chunk: 30 # Maximum number of ray traced blocks per chunk. Counting starts at the bottom of the world and increases upwards.
# rehide-blocks: true # Whether or not to rehide blocks when they were visible to a player but are no longer visible. If false, blocks are only rehidden when the chunk is resent.
# ray-trace-blocks: # Blocks that are hidden and ray traced. The hidden-blocks specified in the Paper config file are only hidden if they aren't exposed to transparent blocks. If this list is empty, the hidden-blocks specified in the Paper config file are used.
# - diamond_ore
# - deepslate_diamond_ore
# - emerald_ore
# - deepslate_emerald_ore
# lobby: # Example section for the world lobby. Missing settings are inherited from the default section.
# anti-xray:
# ray-trace: false # Disable ray tracing in the world lobby.
settings:
anti-xray:
update-ticks: 1
ms-per-ray-trace-tick: 50
ray-trace-threads: 2
world-settings:
default:
anti-xray:
ray-trace: true
ray-trace-third-person: false
ray-trace-distance: 80.0
max-ray-trace-block-count-per-chunk: 100
rehide-blocks: false
ray-trace-blocks: []
Recommended settings
All settings are documented and explained in the default config file above. Before configuring the plugin you should enable Paper Anti-Xray using engine-mode: 1. Optionally (especially for testing) you can increase the max-block-height. After configuring Paper Anti-Xray you can configure the plugin using the following settings for example.
Optimized
(Faster, but worse gameplay experience and less protection.)
Code:
settings:
anti-xray:
update-ticks: 1
ms-per-ray-trace-tick: 50
# Adjust to available (ideally unused) CPU threads.
ray-trace-threads: 2
world-settings:
default:
anti-xray:
ray-trace: true
ray-trace-third-person: false
ray-trace-distance: 64.0
max-ray-trace-block-count-per-chunk: 30
rehide-blocks: false
ray-trace-blocks:
# You can add further blocks here,
# but the max-ray-trace-block-count-per-chunk setting may need to be adjusted.
- chest
- diamond_ore
- deepslate_diamond_ore
- emerald_ore
- deepslate_emerald_ore
- gold_ore
- deepslate_gold_ore
- lapis_ore
- deepslate_lapis_ore
- spawner
# Adjust world name.
world_nether:
anti-xray:
# Note that ancient_debris never generates naturally exposed to air.
# Normal engine-mode: 1 is sufficient, disable ray tracing in the nether.
ray-trace: false
# Adjust world name.
world_the_end:
anti-xray:
ray-trace: false
More expensive
(Slower, but better gameplay experience and more protection.)
Code:
settings:
anti-xray:
update-ticks: 1
ms-per-ray-trace-tick: 50
# Adjust to available (ideally unused) CPU threads.
ray-trace-threads: 2
world-settings:
default:
anti-xray:
ray-trace: true
# Be aware that this is about three times as resource intensive.
ray-trace-third-person: true
ray-trace-distance: 80.0
max-ray-trace-block-count-per-chunk: 60
rehide-blocks: true
ray-trace-blocks:
# You can add further blocks here,
# but the max-ray-trace-block-count-per-chunk setting may need to be adjusted.
- chest
- diamond_ore
- deepslate_diamond_ore
- emerald_ore
- deepslate_emerald_ore
- gold_ore
- deepslate_gold_ore
- lapis_ore
- deepslate_lapis_ore
- mossy_cobblestone
- spawner
# Adjust world name.
world_nether:
anti-xray:
# Note that ancient_debris never generates naturally exposed to air.
# Normal engine-mode: 1 is sufficient, disable ray tracing in the nether.
ray-trace: false
# Adjust world name.
world_the_end:
anti-xray:
ray-trace: false
Timings
For "timings" you can use the commands/raytraceantixray timings on
and /raytraceantixray timings off
. If you turn it on, the time in ms per ray trace tick is printed to the console each tick. These times shouldn't be greater than 50ms to 100ms. Remember to turn it off as it gets very spammy.