Rustic Recrafted Dynamic Trees 1.21.1 worldgen integration

Natural Olive and Ironwood placement is owned exclusively by RusticNaturalTreesFeature,
including biome tags, the native config probabilities and attempt counts.
The Dynamic Trees tree pack still defines families, leaves, species and JoCodes,
but world_gen/default.json is intentionally [] to prevent two generators fighting.

With enableDynamicTreesCompat=true AND Dynamic Trees loaded and species registered:
RusticNaturalTreesFeature calls Species.generate(DynamicTreeGenerationContext)
via a loader-independent reflective bridge. On a failed call it falls back to the
original Rustic generator. Without Dynamic Trees, or with the compatibility flag
false, Rustic generates only its native trees. Config chance=0 means no spawning
for that species regardless of mode. Changing worldgen settings affects NEW chunks.

This is a code-level implementation, NOT a claim of passed in-game tests. Verify
that DT Species.generate accepts these worldgen coordinates and that the runtime
species registry uses the namespace rustic on BOTH Fabric and NeoForge.

2026-10-22: Fabric DT pre-setup registers primitive leaves alongside logs before Tree Pack parsing. DT generation failures no longer place static trees on the same site. Existing chunks with removed ironwood_root and radius > 8 are not automatically migrated; test in fresh chunks.
