--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
@@ -91,7 +_,7 @@
     private static final float PARTICLE_DENSITY = 0.2F;
     private final BlockState crossState;
     private final RedstoneWireEvaluator evaluator = new DefaultRedstoneWireEvaluator(this);
-    public boolean shouldSignal = true;
+    //public boolean shouldSignal = true; // Folia - region threading - move to regionised world data
 
     @Override
     public MapCodec<RedStoneWireBlock> codec() {
@@ -293,6 +_,11 @@
     // Paper start - Optimize redstone (Eigencraft)
     // The bulk of the new functionality is found in RedstoneWireTurbo.java
     io.papermc.paper.redstone.RedstoneWireTurbo turbo = new io.papermc.paper.redstone.RedstoneWireTurbo(this);
+    // Folia start - region threading
+    private io.papermc.paper.redstone.RedstoneWireTurbo getTurbo(Level world) {
+        return world.getCurrentWorldData().turbo;
+    }
+    // Folia end - region threading
 
     /*
      * Modified version of pre-existing updateSurroundingRedstone, which is called from
@@ -308,7 +_,7 @@
             if (orientation != null) {
                 source = pos.relative(orientation.getFront().getOpposite());
             }
-            turbo.updateSurroundingRedstone(worldIn, pos, state, source);
+            getTurbo(worldIn).updateSurroundingRedstone(worldIn, pos, state, source); // Folia - region threading
             return;
         }
         updatePowerStrength(worldIn, pos, state, orientation, blockAdded);
@@ -336,7 +_,7 @@
                 // [Space Walker] suppress shape updates and emit those manually to
                 // bypass the new neighbor update stack.
                 if (level.setBlock(pos, state, Block.UPDATE_KNOWN_SHAPE | Block.UPDATE_CLIENTS)) {
-                    turbo.updateNeighborShapes(level, pos, state);
+                    this.getTurbo(level).updateNeighborShapes(level, pos, state); // Folia - region threading
                 }
             }
         }
@@ -353,9 +_,9 @@
     }
 
     public int getBlockSignal(Level level, BlockPos pos) {
-        this.shouldSignal = false;
+        io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData().shouldSignal = false; // Folia - region threading
         int bestNeighborSignal = level.getBestNeighborSignal(pos);
-        this.shouldSignal = true;
+        io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData().shouldSignal = true; // Folia - region threading
         return bestNeighborSignal;
     }
 
@@ -450,12 +_,12 @@
 
     @Override
     protected int getDirectSignal(BlockState blockState, BlockGetter blockAccess, BlockPos pos, Direction side) {
-        return !this.shouldSignal ? 0 : blockState.getSignal(blockAccess, pos, side);
+        return !io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData().shouldSignal ? 0 : blockState.getSignal(blockAccess, pos, side); // Folia - region threading
     }
 
     @Override
     protected int getSignal(BlockState blockState, BlockGetter blockAccess, BlockPos pos, Direction side) {
-        if (this.shouldSignal && side != Direction.DOWN) {
+        if (io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData().shouldSignal && side != Direction.DOWN) { // Folia - region threading
             int powerValue = blockState.getValue(POWER);
             if (powerValue == 0) {
                 return 0;
@@ -487,7 +_,10 @@
 
     @Override
     protected boolean isSignalSource(BlockState state) {
-        return this.shouldSignal;
+        // Folia start - region threading
+        io.papermc.paper.threadedregions.RegionizedWorldData worldData = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData();
+        return worldData == null || worldData.shouldSignal;
+        // Folia end - region threading
     }
 
     public static int getColorForPower(int power) {
