--- a/net/minecraft/server/commands/SetBlockCommand.java
+++ b/net/minecraft/server/commands/SetBlockCommand.java
@@ -80,10 +_,21 @@
         );
     }
 
+    // Folia start - region threading
+    private static void sendMessage(CommandSourceStack src, CommandSyntaxException ex) {
+        src.sendFailure((Component)ex.getRawMessage());
+    }
+    // Folia end - region threading
+
     private static int setBlock(
         CommandSourceStack source, BlockPos pos, BlockInput state, SetBlockCommand.Mode mode, @Nullable Predicate<BlockInWorld> predicate
     ) throws CommandSyntaxException {
         ServerLevel level = source.getLevel();
+        // Folia start - region threading
+        io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue(
+                level, pos.getX() >> 4, pos.getZ() >> 4, () -> {
+                    try {
+                        // Folia end - region threading
         if (predicate != null && !predicate.test(new BlockInWorld(level, pos, true))) {
             throw ERROR_FAILED.create();
         } else {
@@ -102,9 +_,16 @@
             } else {
                 level.blockUpdated(pos, state.getState().getBlock());
                 source.sendSuccess(() -> Component.translatable("commands.setblock.success", pos.getX(), pos.getY(), pos.getZ()), true);
-                return 1;
+                return; // Folia - region threading
             }
         }
+        // Folia start - region threading
+                } catch (CommandSyntaxException ex) {
+                    sendMessage(source, ex);
+                }
+            });
+        return 1;
+        // Folia end - region threading
     }
 
     public interface Filter {
