The bug
The required free area for 2 × 2 trees to grow is larger in the negative directions.
How to reproduce
Build a 2 × 2 area of dirt
Build a stone tower one block away in the positive x- or z-direction, see
Place jungle saplings on the dirt and increase the
randomTickSpeed
gamerule value/gamerule randomTickSpeed 1000
→ The tree grows
Repeat steps 1 to 3 but this time build the stone tower in the negative x- or z-direction, see
→ The tree does not grow
Note: Some blocks like logs and leaves don't obstruct tree growth. Saplings however do.
Code analysis
Based on 1.12 decompiled using MCP 9.40 PRE 1
2 × 2 trees generate beginning at the sapling in the negative x- and z-direction, however the free area checks (jungle and spruce: net.minecraft.world.gen.feature.WorldGenHugeTrees.isSpaceAt(World, BlockPos, int)
, dark oak: net.minecraft.world.gen.feature.WorldGenCanopyTree.placeTreeOfHeight(World, BlockPos, int)
) offset the sapling position equally in negative and positive directions instead of offsetting it further in the positive directions.
Relates to MC-123468 and MC-112975. Might relates to MC-109121.