Skip to content

Frequently Asked Questions

Maurice Eisenblätter edited this page Oct 26, 2024 · 25 revisions

Why use Orebfuscator over Paper's built-in anti-xray?

  • Orebfuscator offers a two level cache for already obfuscated chunks to safe on computing power
  • Orebfuscator provides more advanced configuration to tune every little detail to your liking
  • Orebfuscator adds the proximity hider which is able to hide surface blocks and reveal them should a player be close enough to them
    • Support for multiple deobfuscation check such as distance, frustum culling and ray cast culling
    • Less invasive obfuscation thanks to the block below obfuscation mode
  • Orebfuscator is designed to run in the main game thread as little as possible (which will lessen its impact on TPS)
  • Orebfuscator can hide Tile-/Block-Entities (chest, furnace, etc.) correctly without leaving them in chunk packets

What blocks are hidden by the block obfuscation?

The block obfuscation feature in Orebfuscator is designed to hide only blocks that are fully enclosed on all six sides by other opaque blocks, such as stone or dirt. This careful selection ensures that only completely hidden blocks remain obfuscated, allowing surface blocks and partially exposed blocks to stay visible. By preserving the visibility of surface blocks, legitimate players can explore and build without disruption, maintaining a natural and immersive gameplay experience.

What is the proximity hider?

The proximity hider is a specialized feature in Orebfuscator that conceals surface blocks and reveals them only when players come close enough. Surface blocks refer to any blocks exposed to non-full or non-opaque blocks, such as air, water, or transparent blocks. By focusing on obfuscating these exposed blocks, the proximity hider creates a seamless illusion of a natural landscape, preventing players from using x-ray to detect hidden resources near the surface while allowing non-xray players to experience an unobstructed world.

How Does the Proximity Hider Work?

When a player moves within a certain proximity to a hidden surface block, the proximity hider assesses several checks before deciding whether to deobfuscate it:

  1. Distance Check: First, the proximity hider verifies if the player is within a configured range to the surface block. If the player is outside this range, the block remains hidden.
  2. Frustum Culling (Optional): The proximity hider also performs a frustum culling check, calculating the player’s exact field of view. If the block lies outside this view, it remains hidden, requiring x-ray users to rotate their view excessively to uncover blocks.
  3. Ray Cast Culling (Optional): For even more precise control, ray cast checking can be enabled. This method checks whether a direct, unobstructed line of sight exists between the player and the block. When enabled, the optional onlyCheckCenter feature improves performance by focusing on the center of the block, reducing accuracy slightly but minimizing computation.

If all the proximity hider’s checks pass, the block becomes visible to the player, naturally revealing its original state within the player’s view.

What is frustum culling and how does it work?

This is strongly simplified. We calculate the players view frustum (camera view) every proximity update and check if a proximity block is inside the cameras view if it isn't it won't get deobfuscated. The frustum uses the players position, rotation, aspect ratio of 16:9 and the configured FOV to calculate the exact camera view the player would have if he had the same FOV and aspect ratio. This will force x-ray players to spin like crazy if the want to deobfuscate proximity blocks. The frustum culling is just another "bonus" check after the distance check passes meaning the player still has to be close to block for it to appear. (here is the proximity code: https://github.com/Imprex-Developme...ebfuscator/proximity/ProximityWorker.java)

What is ray cast checking?

Ray cast checking is an advanced method used to determine if a player has an unobstructed line of sight to a proximity block within range. By simulating a ray or "line" from the player’s viewpoint to the block, this check can verify whether any objects obstruct visibility. If the ray cast check passes, the proximity block is deobfuscated for the player, making the original block visible for them. However, because it involves tracing multiple paths per proximity block, ray cast checking is computationally intensive and thus disabled by default.

To balance performance with accuracy, Orebfuscator includes the onlyCheckCenter option. When enabled, this option focuses the visibility check on the center of the block instead of examining every edge and corner, significantly reducing the computational load per block. While this option slightly decreases accuracy, it offers a considerable performance boost and is recommended when using ray cast checks to keep the server running smoothly without overloading resources.

How does maxMillisecondPerTick work?

Every time we need to load neighboring chunks we have to do it in the servers main thread. To limit the amount of performance impact on the main thread we try to limit the amount of time we take every tick to get those chunks. The way it works is we check every four chunks we loaded how much time it took and stop loading chunks if the threshold is reached. That would mean that Orebfuscator shouldn't under normal circumstances take more time then the set limit (default 10ms).

What is layerObfuscation and when to use it?

If the layerObfuscation option is enabled for a world, Orebfuscator will consistently utilize the same random block for obfuscation within each y-layer per chunk. This results in smaller packet sizes and better compression rates for chunk data, which leads to reduced network traffic. While this feature may occasionally improve FPS (frames per second) on older systems that struggle with small random air gaps in chunks, its primary purpose is to lessen the strain on your server's network. It's important to note that layerObfuscation should primarily be utilized for this purpose and not for other gameplay-related reasons because it is unknown if sophisticated hacking clients could abuse this feature. Below is an example demonstrating how layerObfuscation might appear in action: layerObfuscation example

Why do we obfuscate bedrock in the default config?

Certain sophisticated hacking clients possess the capability to deduce the world seed by analyzing the bedrock arrangement within your world. Once obtained, this seed can be exploited to recreate the world within the client and pinpoint the locations of valuable blocks such as ores. To counteract this vulnerability, we have implemented bedrock obfuscation in all recent versions of the plugin.

Clone this wiki locally