--- a/net/minecraft/world/level/block/SaplingBlock.java
+++ b/net/minecraft/world/level/block/SaplingBlock.java
@@ -26,7 +_,7 @@
     protected static final float AABB_OFFSET = 6.0F;
     protected static final VoxelShape SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 12.0, 14.0);
     protected final TreeGrower treeGrower;
-    public static org.bukkit.TreeType treeType; // CraftBukkit
+    public static final ThreadLocal<org.bukkit.TreeType> treeTypeRT = new ThreadLocal<>(); // CraftBukkit // Folia - region threading
 
     @Override
     public MapCodec<? extends SaplingBlock> codec() {
@@ -56,18 +_,19 @@
             level.setBlock(pos, state.cycle(STAGE), 4);
         } else {
             // CraftBukkit start
-            if (level.captureTreeGeneration) {
+            io.papermc.paper.threadedregions.RegionizedWorldData worldData = level.getCurrentWorldData(); // Folia - region threading
+            if (worldData.captureTreeGeneration) { // Folia - region threading
                 this.treeGrower.growTree(level, level.getChunkSource().getGenerator(), pos, state, random);
             } else {
-                level.captureTreeGeneration = true;
+                worldData.captureTreeGeneration = true; // Folia - region threading
                 this.treeGrower.growTree(level, level.getChunkSource().getGenerator(), pos, state, random);
-                level.captureTreeGeneration = false;
-                if (!level.capturedBlockStates.isEmpty()) {
-                    org.bukkit.TreeType treeType = SaplingBlock.treeType;
-                    SaplingBlock.treeType = null;
+                worldData.captureTreeGeneration = false; // Folia - region threading
+                if (!worldData.capturedBlockStates.isEmpty()) { // Folia - region threading
+                    org.bukkit.TreeType treeType = SaplingBlock.treeTypeRT.get(); // Folia - region threading
+                    SaplingBlock.treeTypeRT.set(null); // Folia - region threading
                     org.bukkit.Location location = org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level.getWorld());
-                    java.util.List<org.bukkit.block.BlockState> blocks = new java.util.ArrayList<>(level.capturedBlockStates.values());
-                    level.capturedBlockStates.clear();
+                    java.util.List<org.bukkit.block.BlockState> blocks = new java.util.ArrayList<>(worldData.capturedBlockStates.values()); // Folia - region threading
+                    worldData.capturedBlockStates.clear(); // Folia - region threading
                     org.bukkit.event.world.StructureGrowEvent event = null;
                     if (treeType != null) {
                         event = new org.bukkit.event.world.StructureGrowEvent(location, treeType, false, null, blocks);
