
Dynamic Trees: Universal Compat
Adds broad compatibility between Dynamic Trees and modded wood types. Automatically detects trees, registers species, and integrates growth systems. Built as a scalable framework to support many mods without requiring individual compat patches.
Forge-2.5
Compatibility
Required content
Changes
Dynamic Trees: Universal Compat 2.4 (Forge 1.20.1)
Fixed
- Fixed generated pack crashes when tree shapes sharing a leaves material request different leaves properties types; shared materials now fall back to the default type.
- Fixed block-tag detection crashing when a mod contains nested data directories, such as
integratedterminals/forge/tags/blocks/.... - Invalid block-tag resource locations are now skipped safely during detection.
- Made generated compatibility declarations deterministic across registry/resource/mod enumeration order, and stopped runtime worldgen observations from changing future startup registry membership.
- Added restart-safe generated-pack manifests, descriptor persistence, an authoritative pre-start
server_packoption, and a bounded pre-registry diagnostic handshake. - Preserved unmarked legacy generated packs as a migration backup instead of deleting them.
- Isolated broken foreign lazy placed-feature traversal (including Goety Event Horizon's missing feature reference) so DTC records and skips it rather than crashing startup.
- Persisted the bootstrap worldgen cache at
config/dynamictreescompat/worldgen_cache.json.
Important restart behavior
- A newly changed generated pack still requires one full Minecraft restart so Dynamic Trees can register its species before Forge registries close.
- Existing chunks are not retroactively converted.
Dynamic Trees: Universal Compat 2.3 (Forge 1.20.1)
Added
- Added automatic survival conversion recipes in both directions between source saplings and generated Dynamic Trees seeds, using a Dynamic Trees dirt bucket.
- Added the generated compat pack as server data, so generated recipes load in single-player and dedicated servers.
Fixed
- Fixed mixed and variant foliage receiving unstable, duplicate LeavesProperties registrations that could leave some dynamic leaves unregistered.
- Fixed unchanged generated packs being staged again on every launch; equivalent generated contents now reuse the active pack.
- Updated the Forge 1.20.1 release line to version 2.3.
Important restart behavior
- A newly changed generated pack still requires one full Minecraft restart so Dynamic Trees can register its species before Forge registries close.
- Existing chunks are not retroactively converted.
Earlier development update
Added
- Configured-feature-first tree component discovery using the actual trunk, foliage, branch, and provider block states used by Minecraft worldgen
- Generic topology fingerprinting and Dynamic Trees archetype selection for exact, approximate, and generic fallback generation
- Client model/texture resolution through source blockstates, models, parents, and texture aliases
- Explicit per-candidate compatibility results: generated exact, generated approximate, generic fallback, already supported, intentionally unsupported, incomplete, or failed
- Worldgen execution tracer for claimed-but-still-generating and unclaimed source feature diagnostics
- Persisted runtime observations and source-feature overrides for later restart processing
- Generated-pack staging: newly discovered resources are written to
generated_trees_pending_restartand activated before Dynamic Trees scans them on the next restart - Mandatory client restart screen during the one-time migration from the legacy generated-pack layout
- GabouLibs as a required runtime dependency
Fixed
- Prevented
minecraft:airfrom being accepted as a tree component or worldgen probe block - Prevented structural false positives such as boards, planks, and bundles from becoming trees
- Preserved source-specific descriptors even where different source features share the same primitive materials
- Prevented Dynamic Trees seed/sapling null-registry crashes caused by adding newly discovered species to an already-live resource pack
- Restricted runtime tree worldgen matching to strong vegetation/tree evidence, avoiding fluid, lake, and unrelated feature contamination
- Excluded bamboo from automatic tree conversion
Important restart behavior
- Dynamic Trees registers generated branch, leaves, seed, and sapling blocks only during startup.
- The first launch after migrating from the old generated-pack format intentionally has no active generated compat trees. A non-dismissible screen requires quitting Minecraft; the following launch activates the staged pack.
- Later discovery changes are also staged for a full restart rather than applied through a live datapack reload.
Earlier development additions
- Initial Dynamic Trees compatibility system for modded trees
- Automatic detection of unsupported trees from loaded mods
- First working integration with Atmospheric (rosewood)
- Runtime generation of Dynamic Trees data (species, families, seeds, leaves)
- World generation replacement system for supported trees
- Client asset generation for branches, leaves, saplings, and seeds
- Debug logging for detection, registration, and worldgen
Fixed
- Missing textures for generated trees (pink/black rendering)
- Incorrect asset paths for branch and leaves models
- Worldgen registration not being applied due to incorrect DT data structure
- Feature canceller not handling multiple namespaces properly
Improved
- Switched to proper Dynamic Trees datapack-based registration instead of direct registry usage
- More reliable detection of wood types using Moonlight integration
Known Issues
- Opaque custom worldgen features may not expose enough topology for an exact Dynamic Trees translation and can use an approximate archetype
- Some source placed features remain unclaimed until the tracer/runtime observation pipeline has enough strong identity evidence
- Existing chunks are not retroactively converted
Upcoming
- User-provided custom topology JSON files for exact overrides of approximate trees
- Additional registered topology resolvers for mod-specific custom feature codecs
- Further worldgen mapping and cancellation coverage for opaque/nested feature graphs
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:I3Kxw8uG:J4SZN1nC"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:I3Kxw8uG:J4SZN1nC"
}
