Skip to content

Residual vanilla Dirt survives total-conversion terrain replacement #255

Closed

Description

@SkyBlade1978

Environment

  • Minecraft 1.18.2
  • Forge 40.3.0
  • OreSpawn 4.0.6.118021 (published CurseForge dependency)
  • CakeWorld master-1.18.2, provider revision 56
  • CakeWorld cakeworld:edible_world total-conversion template

Summary

Literal minecraft:dirt survives in fresh CakeWorld chunks after OreSpawn terrain and biome-surface replacement. The remaining blocks are small underground/underwater surface-system pockets surrounded by CakeWorld materials, not minecraft:ore_dirt placed features.

CakeWorld must be able to declare that natural Dirt, Grass, Gravel, Sand, Clay and similar vanilla terrain sources are converted without using global ore suppression or implementing a child-mod cleanup sweep.

Reproduction

A focused GameTest is present in the current CakeWorld validation worktree at:

D:\CakeWorld\CakeWorld 118\CakeWorld\src\main\java\com\mcmoddev\cakeworld\gametest\EdibleWorldIntegrityGameTests.java

From D:\CakeWorld\CakeWorld 118\CakeWorld with Java 17:

$env:JAVA_HOME='C:\Users\johnb\.jdks\jdk-17.0.1'
$env:GRADLE_USER_HOME='D:\CakeWorld\.gradle-verify-cache'

.\gradlew.bat runGameTestServer --no-daemon `
  -PcakeworldFreshWorldgenRuntime=true `
  -PcakeworldFreshWorldgenRunDirectory=run-edible-integrity-repro `
  -PcakeworldGameTestNamespaces=cakeworld_edible_integrity

The test pre-generates an 11-by-11 chunk halo, then scans the inner 9-by-9 region in the Overworld, Nether and End. Bedrock is the only accepted literal vanilla geology exception.

Actual result

fixedWorldContainsNoUnexpectedNaturalBlocks fails with:

  • 66 minecraft:dirt blocks
  • 63 in cakeworld:candy_plains
  • 3 in cakeworld:soda_ocean
  • Y range 46 through 61
  • adjacent blocks include 197 Chocolate Sponge faces, 49 Lemonade faces, 23 Biscuit Crumbs faces and CakeWorld geology/resources

The Dirt count and positions remain stable after save/reload.

The companion feature-ownership test passes: registered CakeWorld biomes contain no minecraft:ore_dirt, vanilla tree placed features or vanilla ore placed features. Fresh generation also contains all eight expected CakeWorld Overworld resource roles and all three Nether roles, with no literal vanilla coal or other vanilla resource ores in the scanned region.

Expected result

Fresh total-conversion chunks contain no naturally generated literal vanilla Dirt. Existing chunks remain untouched.

Likely boundary

  • StoneReplacer replaces OreSpawn's supported stone-family terrain throughout the chunk.
  • BiomeSurfaceFeature.findOpenGround selects the top open ground in a column, and applyGround replaces only that block plus the configured filler depth.
  • Vanilla surface-generated Dirt beside underground or underwater openings can therefore remain outside both replacement passes.

This is not fixed by vanilla-ore takeover: Dirt is not a resource ore, and global suppression would incorrectly affect unknown third-party ore features.

Required capability / acceptance

Please add a pre-baked, provider-declared way for terrain replacement to convert additional natural source blocks such as Dirt, Grass, Coarse/Rooted Dirt, Gravel, Sand, Clay and Terracotta.

Acceptance expectations:

  • generation-only; no silent rewrite of existing chunks;
  • preserves Bedrock, fluids and block entities;
  • does not rewrite player-authored blocks or unknown third-party blocks;
  • does not require suppress_all_ore_features or a CakeWorld-owned cleanup feature;
  • fresh fixed-seed and same-save reload integrity scans both report zero unexpected vanilla terrain;
  • no meaningful world-generation performance regression.

Activity

  1. SkyBlade1978 commented on Aug 26, 2026

    @SkyBlade1978
    ContributorAuthor

    Fixed for Forge 1.15.2 in the planned OreSpawn 4.0.9.115021

    The 1.15 test reproduced the problem: provider declared natural terrain was being replaced after some later worldgen stages. The existing StoneReplacer now runs at the start of local modifications, before provider surfaces, while ores/fluids and bedrock keep their original stages.

    Fresh and exact-reload tests now replace all 108 marked natural sources, including 54 cave and 54 underwater pockets, while preserving 108 later structure blocks, 108 vegetation blocks, bedrock, fluids and chest block entities.

  2. self-assigned this
    on Aug 26, 2026
  3. SkyBlade1978 commented on Aug 26, 2026

    @SkyBlade1978
    ContributorAuthor

    Forge 1.16.5 is fixed in 4.0.9.116051 (PR #257).

    The fresh/reload regression converted all 108 provider-declared natural terrain sources while preserving matching blocks placed later by structures and vegetation, plus cave/underwater pockets, bedrock, fluids and block entities. Existing chunks are not rewritten.

    This has passed automated and manual 1.16.5 testing; leaving the issue open while the remaining Minecraft branches are fixed.

  4. SkyBlade1978 commented on Aug 27, 2026

    @SkyBlade1978
    ContributorAuthor

    Forge 1.17.1 is fixed in OreSpawn 4.0.9.117011 (PR #258).

    The target-native fresh/reload regression converted all 117 provider-declared natural terrain sources, including the 1.17 Rooted Dirt case, while preserving 117 matching structure blocks, 117 vegetation blocks, 54 cave pockets, 63 underwater pockets, bedrock and block entities. Existing chunks are not rewritten.

    Hosted build/audit, wrapper validation, CodeQL and manual Eclipse/world testing passed. Leaving this issue open while the remaining Minecraft branches are qualified.

  5. SkyBlade1978 commented on Sep 9, 2026

    @SkyBlade1978
    ContributorAuthor

    Closing as completed. The natural-host repair landed from the 4.0.9 line onward: provider-declared natural terrain is converted during the existing early geology pass, while air, fluids, bedrock, block entities and later authored structure/vegetation blocks remain protected. Existing chunks are not rewritten.

    The reported 1.18.2 case is included in #259/#270, and the repair or target-native legacy equivalent is now merged across the full Forge/NeoForge campaign through the final 1.10.2 merge in #300. Fresh and exact-save reload coverage retained the natural-source and sentinel contracts on each applicable target.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions