--- a/net/minecraft/world/level/block/BasePressurePlateBlock.java
+++ b/net/minecraft/world/level/block/BasePressurePlateBlock.java
@@ -17,8 +17,10 @@
 import net.minecraft.world.phys.AABB;
 import net.minecraft.world.phys.shapes.CollisionContext;
 import net.minecraft.world.phys.shapes.VoxelShape;
+import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
 
 public abstract class BasePressurePlateBlock extends Block {
+
     protected static final VoxelShape PRESSED_AABB = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 0.5D, 15.0D);
     protected static final VoxelShape AABB = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 1.0D, 15.0D);
     protected static final AABB TOUCH_AABB = new AABB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.25D, 0.9375D);
@@ -29,7 +31,7 @@
 
     @Override
     public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
-        return this.getSignalForState(state) > 0 ? PRESSED_AABB : AABB;
+        return this.getSignalForState(state) > 0 ? BasePressurePlateBlock.PRESSED_AABB : BasePressurePlateBlock.AABB;
     }
 
     protected int getPressedTime() {
@@ -48,23 +50,27 @@
 
     @Override
     public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
-        BlockPos blockPos = pos.below();
-        return canSupportRigidBlock(world, blockPos) || canSupportCenter(world, blockPos, Direction.UP);
+        BlockPos blockposition1 = pos.below();
+
+        return canSupportRigidBlock(world, blockposition1) || canSupportCenter(world, blockposition1, Direction.UP);
     }
 
     @Override
     public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
         int i = this.getSignalForState(state);
+
         if (i > 0) {
-            this.checkPressed((Entity)null, world, pos, state, i);
+            this.checkPressed((Entity) null, world, pos, state, i);
         }
 
     }
 
     @Override
     public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
+        if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.v1_19_R2.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper
         if (!world.isClientSide) {
             int i = this.getSignalForState(state);
+
             if (i == 0) {
                 this.checkPressed(entity, world, pos, state, i);
             }
@@ -73,26 +79,41 @@
     }
 
     protected void checkPressed(@Nullable Entity entity, Level world, BlockPos pos, BlockState state, int output) {
-        int i = this.getSignalStrength(world, pos);
-        boolean bl = output > 0;
-        boolean bl2 = i > 0;
-        if (output != i) {
-            BlockState blockState = this.setSignalForState(state, i);
-            world.setBlock(pos, blockState, 2);
+        int j = this.getSignalStrength(world, pos);
+        boolean flag = output > 0;
+        boolean flag1 = j > 0;
+
+        // CraftBukkit start - Interact Pressure Plate
+        org.bukkit.World bworld = world.getWorld();
+        org.bukkit.plugin.PluginManager manager = world.getCraftServer().getPluginManager();
+
+        if (flag != flag1) {
+            BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(bworld.getBlockAt(pos.getX(), pos.getY(), pos.getZ()), output, j);
+            manager.callEvent(eventRedstone);
+
+            flag1 = eventRedstone.getNewCurrent() > 0;
+            j = eventRedstone.getNewCurrent();
+        }
+        // CraftBukkit end
+
+        if (output != j) {
+            BlockState iblockdata1 = this.setSignalForState(state, j);
+
+            world.setBlock(pos, iblockdata1, 2);
             this.updateNeighbours(world, pos);
-            world.setBlocksDirty(pos, state, blockState);
+            world.setBlocksDirty(pos, state, iblockdata1);
         }
 
-        if (!bl2 && bl) {
+        if (!flag1 && flag) {
             this.playOffSound(world, pos);
             world.gameEvent(entity, GameEvent.BLOCK_DEACTIVATE, pos);
-        } else if (bl2 && !bl) {
+        } else if (flag1 && !flag) {
             this.playOnSound(world, pos);
             world.gameEvent(entity, GameEvent.BLOCK_ACTIVATE, pos);
         }
 
-        if (bl2) {
-            world.scheduleTick(new BlockPos(pos), this, this.getPressedTime());
+        if (flag1) {
+            world.scheduleTick(new BlockPos(pos), (Block) this, this.getPressedTime());
         }
 
     }
