--- a/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -114,7 +_,7 @@
         // this.gameTicks = net.minecraft.server.MinecraftServer.currentTick; // CraftBukkit
         this.gameTicks = (int) this.level.getLagCompensationTick(); // Paper - lag compensate eating
         if (this.hasDelayedDestroy) {
-            BlockState blockState = this.level.getBlockStateIfLoaded(this.delayedDestroyPos); // Paper - Don't allow digging into unloaded chunks
+            BlockState blockState = !ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.level, this.delayedDestroyPos) ? null : this.level.getBlockStateIfLoaded(this.delayedDestroyPos); // Paper - Don't allow digging into unloaded chunks // Folia - region threading - don't destroy blocks not owned
             if (blockState == null || blockState.isAir()) { // Paper - Don't allow digging into unloaded chunks
                 this.hasDelayedDestroy = false;
             } else {
@@ -126,7 +_,7 @@
             }
         } else if (this.isDestroyingBlock) {
             // Paper start - Don't allow digging into unloaded chunks; don't want to do same logic as above, return instead
-            BlockState blockState = this.level.getBlockStateIfLoaded(this.destroyPos);
+            BlockState blockState = !ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.level, this.destroyPos) ? null : this.level.getBlockStateIfLoaded(this.destroyPos); // Folia - region threading - don't destroy blocks not owned
             if (blockState == null) {
                 this.isDestroyingBlock = false;
                 return;
@@ -369,7 +_,7 @@
             } else {
                 // CraftBukkit start
                 org.bukkit.block.BlockState state = bblock.getState();
-                this.level.captureDrops = new java.util.ArrayList<>();
+                this.level.getCurrentWorldData().captureDrops = new java.util.ArrayList<>(); // Folia - region threading
                 // CraftBukkit end
                 BlockState blockState1 = block.playerWillDestroy(this.level, pos, blockState, this.player);
                 boolean flag = this.level.removeBlock(pos, false);
@@ -395,8 +_,8 @@
                     // return true; // CraftBukkit
                 }
                 // CraftBukkit start
-                java.util.List<net.minecraft.world.entity.item.ItemEntity> itemsToDrop = this.level.captureDrops; // Paper - capture all item additions to the world
-                this.level.captureDrops = null; // Paper - capture all item additions to the world; Remove this earlier so that we can actually drop stuff
+                java.util.List<net.minecraft.world.entity.item.ItemEntity> itemsToDrop = this.level.getCurrentWorldData().captureDrops; // Paper - capture all item additions to the world  // Folia - region threading
+                this.level.getCurrentWorldData().captureDrops = null; // Paper - capture all item additions to the world; Remove this earlier so that we can actually drop stuff  // Folia - region threading
                 if (event.isDropItems()) {
                     org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, state, this.player, itemsToDrop); // Paper - capture all item additions to the world
                 }
