Procedural, biome-aware custom trees that generate through vanilla worldgen.
LeafTreeGen adds dozens of custom tree species. Trees are mathematically defined in JSON and baked into vanilla .nbt structure templates at startup, then added to jigsaw template pools so the game's own worldgen handles placement. No runtime block-placement listeners.
Made as a cross-platform utility based on the Python code I originally wrote for my personal Iris world using .iob files. Iris now adopts my procedural engine in its latest builds.
I've reworked it so you can optionally run it once for datapack (.nbt-based) generation, or keep it around for its ability to manage procedural generation and custom saplings.

Cherry Grove Giant - a towering cherry-blossom giant anchors its matching biome above a grove of smaller cherry trees.

Dark forest canopy - dense overlapping high canopies with scattered giant mushrooms, viewed from above the treeline.

Dark Forest Mushroom.

Custom savanna trees.

Christmas Tree - all trees are placeable via NBT-tagged saplings.
/leaftree give hands out NBT-tagged saplings that grow into a random variant when planted in a valid biome/leaftree reload rebakes all variants and regenerates the datapack/leaftree command) everywhere| Category | Examples |
|---|---|
| Temperate | Forest, Birch Forest, Old-Growth Birch, Maple-Birch Giants, Ashwood |
| Tropical | Jungle, Cherry Grove, Jacaranda Grove |
| Cold | Taiga, Old-Growth Pine Taiga, Glacier Pine |
| Dark & Exotic | Dark Forest Giants, Spiral-Crown Forest, Rainbow Grove, Glowcap |
| Command | Description |
|---|---|
/leaftree generate species=<id> |
Place a tree at your cursor (admin test) |
/leaftree give species=<id> [player] [amount] |
Hand out custom saplings |
/leaftree list [species=<id>] |
List registered species or variants |
/leaftree reload |
Apply config changes and regenerate the datapack |
Requires the leaftreegen.admin permission node.
Species are defined as JSON files in the species/ folder. Biome assignments and placement tuning (spacing, separation, salt) live in config.yml, with per-species overrides.
generation-mode: DATAPACK # DATAPACK | PROCEDURAL | BOTH | NONE
placement:
glacierpine:
spacing: 6
separation: 3
biomes:
- minecraft:snowy_taiga
- minecraft:grove
{
"name": "glacierpine",
"procedural": {
"trunk-block": "minecraft:spruce_log",
"leaf-block": "minecraft:spruce_leaves",
"height-min": 10,
"height-max": 18,
"trunk-shape": "LINEAR",
"canopy": [
{ "yOffset": 0, "radius": 4 },
{ "yOffset": 3, "radius": 3 },
{ "yOffset": 6, "radius": 2 }
]
}
}
Unsupported
Required
Условия использования, изменения и распространения этого товара.
12.06.2026 · Modrinth
Initial release.
Скриншоты и изображения из оригинальной страницы Modrinth.










Опубликованные версии и оригинальные файлы Modrinth.
12.06.2026 · 207 загрузки
Initial release.
/leaftree give, delivered as NBT-tagged items that grow into a random variant of the species when planted in a valid biome./leaftree generate species=<id> - place a tree at your cursor (admin test)./leaftree give species=<id> [player] [amount] - hand out custom saplings./leaftree list [species=<id>] - list registered species or variants./leaftree reload - apply config changes and regenerate the datapack.leaftreegen.admin permission node.species/ folder, with biome assignments and placement tuning (spacing, separation, salt) in config.yml, overridable per-species.DATAPACK, PROCEDURAL, BOTH, and NONE.