--- a/net/minecraft/server/level/WorldGenRegion.java
+++ b/net/minecraft/server/level/WorldGenRegion.java
@@ -107,6 +_,13 @@
         return this.getLightEngine().getRawBrightness(blockPos, subtract);
     }
     // Paper end - rewrite chunk system
+    // Folia start - region threading
+    private final net.minecraft.world.level.StructureManager structureManager;
+    @Override
+    public net.minecraft.world.level.StructureManager structureManager() {
+        return this.structureManager;
+    }
+    // Folia end - region threading
 
     public WorldGenRegion(ServerLevel level, StaticCache2D<GenerationChunkHolder> cache, ChunkStep generatingStep, ChunkAccess center) {
         this.generatingStep = generatingStep;
@@ -118,6 +_,7 @@
         this.random = level.getChunkSource().randomState().getOrCreateRandomFactory(WORLDGEN_REGION_RANDOM).at(this.center.getPos().getWorldPosition());
         this.dimensionType = level.dimensionType();
         this.biomeManager = new BiomeManager(this, BiomeManager.obfuscateSeed(this.seed));
+        this.structureManager = level.structureManager().forWorldGenRegion(this); // Folia - region threading
     }
 
     public boolean isOldChunkAround(ChunkPos pos, int radius) {
