--- a/net/minecraft/server/commands/FillBiomeCommand.java
+++ b/net/minecraft/server/commands/FillBiomeCommand.java
@@ -107,6 +_,16 @@
         return fill(level, from, to, biome, biome1 -> true, message -> {});
     }
 
+    // Folia start - region threading
+    private static void sendMessage(Consumer<Supplier<Component>> src, Supplier<Either<Integer, CommandSyntaxException>> supplier) {
+        Either<Integer, CommandSyntaxException> either = supplier.get();
+        CommandSyntaxException ex = either == null ? null : either.right().orElse(null);
+        if (ex != null) {
+            src.accept(() -> (Component)ex.getRawMessage());
+        }
+    }
+    // Folia end - region threading
+
     public static Either<Integer, CommandSyntaxException> fill(
         ServerLevel level, BlockPos from, BlockPos to, Holder<Biome> biome, Predicate<Holder<Biome>> filter, Consumer<Supplier<Component>> messageOutput
     ) {
@@ -118,6 +_,17 @@
         if (i > _int) {
             return Either.right(ERROR_VOLUME_TOO_LARGE.create(_int, i));
         } else {
+            // Folia start - region threading
+            int buffer = 0; // no buffer, we do not touch neighbours
+            level.moonrise$loadChunksAsync(
+                (boundingBox.minX() - buffer) >> 4,
+                (boundingBox.maxX() + buffer) >> 4,
+                (boundingBox.minZ() - buffer) >> 4,
+                (boundingBox.maxZ() + buffer) >> 4,
+                net.minecraft.world.level.chunk.status.ChunkStatus.FULL,
+                ca.spottedleaf.concurrentutil.util.Priority.NORMAL,
+                (chunks) -> {
+                    sendMessage(messageOutput, () -> {
             List<ChunkAccess> list = new ArrayList<>();
 
             for (int sectionPosMinZ = SectionPos.blockToSectionCoord(boundingBox.minZ());
@@ -158,6 +_,11 @@
                 )
             );
             return Either.left(mutableInt.getValue());
+            // Folia start - region threading
+                    }); // sendMessage
+                    }); // loadChunksASync
+            return Either.left(Integer.valueOf(0));
+            // Folia end - region threading
         }
     }
 
