--- a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
+++ b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
@@ -41,9 +_,19 @@
     private static final ThreadLocal<Direction> NOCLIP = ThreadLocal.withInitial(() -> null);
     private float progress;
     private float progressO;
-    private long lastTicked;
+    private long lastTicked = Long.MIN_VALUE; // Folia - region threading
     private int deathTicks;
 
+    // Folia start - region threading
+    @Override
+    public void updateTicks(long fromTickOffset, long fromRedstoneTimeOffset) {
+        super.updateTicks(fromTickOffset, fromRedstoneTimeOffset);
+        if (this.lastTicked != Long.MIN_VALUE) {
+            this.lastTicked += fromRedstoneTimeOffset;
+        }
+    }
+    // Folia end - region threading
+
     public PistonMovingBlockEntity(BlockPos pos, BlockState blockState) {
         super(BlockEntityType.PISTON, pos, blockState);
     }
@@ -150,8 +_,8 @@
 
                                 entity.setDeltaMovement(d1, d2, d3);
                                 // Paper - EAR items stuck in slime pushed by a piston
-                                entity.activatedTick = Math.max(entity.activatedTick, net.minecraft.server.MinecraftServer.currentTick + 10);
-                                entity.activatedImmunityTick = Math.max(entity.activatedImmunityTick, net.minecraft.server.MinecraftServer.currentTick + 10);
+                                entity.activatedTick = Math.max(entity.activatedTick, io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick() + 10); // Folia - region threading
+                                entity.activatedImmunityTick = Math.max(entity.activatedImmunityTick, io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick() + 10); // Folia - region threading
                                 // Paper end
                                 break;
                             }
@@ -292,7 +_,7 @@
     }
 
     public static void tick(Level level, BlockPos pos, BlockState state, PistonMovingBlockEntity blockEntity) {
-        blockEntity.lastTicked = level.getGameTime();
+        blockEntity.lastTicked = level.getRedstoneGameTime(); // Folia - region threading
         blockEntity.progressO = blockEntity.progress;
         if (blockEntity.progressO >= 1.0F) {
             if (level.isClientSide && blockEntity.deathTicks < 5) {
