Is your feature request related to a problem?
Yes. In the Overworld I need height-based masking to match natural geology and to block sky bases:
- Y < 0 should look like deepslate,
- Y ≥ 0 should look like stone,
- Y ≥ 100 should be masked as air.
raytraced-antixray already supports a height map via replacementBlocks (e.g. 0: STONE, -64: DEEPSLATE). But raytraced-tile-culling only accepts a single replacementBlock. If I try to use a map there, the config gets regenerated. As a result, cheaters can material-filter for STONE at Y<0 and easily spot hidden blocks, and sky bases stay hideable.
Describe the solution you'd like.
Add first-class support for multi-layer (Y-range) replacement in raytraced-tile-culling, similar to replacementBlocks in raytraced-antixray.
Proposed, backward-compatible syntax (first match wins, ranges inclusive):
replacementRules:
- minHeight: 101
maxHeight: 320
replacementBlock: AIR
- minHeight: 0
maxHeight: 100
replacementBlock: STONE
- minHeight: -64
maxHeight: -1
replacementBlock: DEEPSLATE
If replacementRules is absent, keep using the current single replacementBlock. Please also document the equivalent height-map behavior for raytraced-antixray so both modules are consistent.
Describe alternatives you've considered.
Tried alternatives:
- Two configs for the same world (
worldFilters: [world]) split by minBlockHeight/maxBlockHeight with different replacementBlock → only one profile applies globally; the other is ignored.
- Using a height map (
replacementBlocks) inside raytraced-tile-culling (similar to AntiXray) → the config auto-regenerates and removes the map.
- Switching filters from
environment:* to exact world names (world, world_nether, world_the_end) → same result (single active profile).
- Workarounds considered: forbid building above Y≥100 via server rules/Skript; use a single
replacementBlock (e.g., DEEPSLATE) for the whole world. These mitigate but don’t solve the core need: multi-layer masking and AIR above Y≥100.
Agreements
Other
Repro:
- Overworld
world, Imanity Raytraced AntiXray | Ores, Entities, Tiles v0.19.3beta.
- Create two tile-culling configs for
world with different height ranges and different replacementBlock.
- Reload the plugin → only one replacement applies for all heights.
- Add a
replacementBlocks map to tile-culling → the file is regenerated and the map is removed.
Expected: DEEPSLATE below 0, STONE from 0–100, AIR at ≥101 within one world.
Note: this issue text was translated from Russian via ChatGPT. If anything sounds unclear, I can clarify or provide the original.
Is your feature request related to a problem?
Yes. In the Overworld I need height-based masking to match natural geology and to block sky bases:
raytraced-antixrayalready supports a height map viareplacementBlocks(e.g.0: STONE,-64: DEEPSLATE). Butraytraced-tile-cullingonly accepts a singlereplacementBlock. If I try to use a map there, the config gets regenerated. As a result, cheaters can material-filter for STONE at Y<0 and easily spot hidden blocks, and sky bases stay hideable.Describe the solution you'd like.
Add first-class support for multi-layer (Y-range) replacement in
raytraced-tile-culling, similar toreplacementBlocksinraytraced-antixray.Proposed, backward-compatible syntax (first match wins, ranges inclusive):
replacementRules:
maxHeight: 320
replacementBlock: AIR
maxHeight: 100
replacementBlock: STONE
maxHeight: -1
replacementBlock: DEEPSLATE
If
replacementRulesis absent, keep using the current singlereplacementBlock. Please also document the equivalent height-map behavior forraytraced-antixrayso both modules are consistent.Describe alternatives you've considered.
Tried alternatives:
worldFilters: [world]) split byminBlockHeight/maxBlockHeightwith differentreplacementBlock→ only one profile applies globally; the other is ignored.replacementBlocks) insideraytraced-tile-culling(similar to AntiXray) → the config auto-regenerates and removes the map.environment:*to exact world names (world,world_nether,world_the_end) → same result (single active profile).replacementBlock(e.g., DEEPSLATE) for the whole world. These mitigate but don’t solve the core need: multi-layer masking and AIR above Y≥100.Agreements
Other
Repro:
world, Imanity Raytraced AntiXray | Ores, Entities, Tiles v0.19.3beta.worldwith different height ranges and differentreplacementBlock.replacementBlocksmap to tile-culling → the file is regenerated and the map is removed.Expected: DEEPSLATE below 0, STONE from 0–100, AIR at ≥101 within one world.
Note: this issue text was translated from Russian via ChatGPT. If anything sounds unclear, I can clarify or provide the original.