--- a/net/minecraft/server/commands/FillCommand.java
+++ b/net/minecraft/server/commands/FillCommand.java
@@ -151,6 +_,12 @@
         );
     }
 
+    // Folia start - region threading
+    private static void sendMessage(CommandSourceStack src, CommandSyntaxException ex) {
+        src.sendFailure((Component)ex.getRawMessage());
+    }
+    // Folia end - region threading
+
     private static int fillBlocks(
         CommandSourceStack source, BoundingBox area, BlockInput newBlock, FillCommand.Mode mode, @Nullable Predicate<BlockInWorld> replacingPredicate
     ) throws CommandSyntaxException {
@@ -161,6 +_,18 @@
         } else {
             List<BlockPos> list = Lists.newArrayList();
             ServerLevel level = source.getLevel();
+            // Folia start - region threading
+            int buffer = 32;
+            // physics may spill into neighbour chunks, so use a buffer
+            level.moonrise$loadChunksAsync(
+                    (area.minX() - buffer) >> 4,
+                    (area.maxX() + buffer) >> 4,
+                    (area.minZ() - buffer) >> 4,
+                    (area.maxZ() + buffer) >> 4,
+                    net.minecraft.world.level.chunk.status.ChunkStatus.FULL,
+                    ca.spottedleaf.concurrentutil.util.Priority.NORMAL,
+                    (chunks) -> {
+                        try { // Folia end - region threading
             int i1 = 0;
 
             for (BlockPos blockPos : BlockPos.betweenClosed(area.minX(), area.minY(), area.minZ(), area.maxX(), area.maxY(), area.maxZ())) {
@@ -187,8 +_,13 @@
             } else {
                 int i2 = i1;
                 source.sendSuccess(() -> Component.translatable("commands.fill.success", i2), true);
-                return i1;
+                return; // Folia - region threading
             }
+            // Folia start - region threading
+                } catch (CommandSyntaxException ex) {
+                    sendMessage(source, ex);
+                }
+            }); return 0; // Folia end - region threading
         }
     }
 
