--- a/net/minecraft/network/protocol/PacketUtils.java
+++ b/net/minecraft/network/protocol/PacketUtils.java
@@ -20,7 +_,7 @@
 
     public static <T extends PacketListener> void ensureRunningOnSameThread(Packet<T> packet, T processor, BlockableEventLoop<?> executor) throws RunningOnDifferentThreadException {
         if (!executor.isSameThread()) {
-            executor.executeIfPossible(() -> {
+            Runnable run = () -> { // Folia - region threading
                 packetProcessing.push(processor); // Paper - detailed watchdog information
                 try { // Paper - detailed watchdog information
                 if (processor instanceof net.minecraft.server.network.ServerCommonPacketListenerImpl serverCommonPacketListener && serverCommonPacketListener.processedDisconnect) return; // Paper - Don't handle sync packets for kicked players
@@ -43,7 +_,24 @@
                     packetProcessing.pop();
                 }
                 // Paper end - detailed watchdog information
-            });
+            // Folia start - region threading
+            };
+            // ignore retired state, if removed then we don't want the packet to be handled
+            if (processor instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) {
+                gamePacketListener.player.getBukkitEntity().taskScheduler.schedule(
+                        (net.minecraft.server.level.ServerPlayer player) -> {
+                            run.run();
+                        },
+                        null, 1L
+                );
+            } else if (processor instanceof net.minecraft.server.network.ServerConfigurationPacketListenerImpl configurationPacketListener) {
+                io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(run);
+            } else if (processor instanceof net.minecraft.server.network.ServerLoginPacketListenerImpl loginPacketListener) {
+                io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(run);
+            } else {
+                throw new UnsupportedOperationException("Unknown listener: " + processor);
+            }
+            // Folia end - region threading
             throw RunningOnDifferentThreadException.RUNNING_ON_DIFFERENT_THREAD;
         }
     }
