--- a/net/minecraft/world/level/block/ShelfBlock.java
+++ b/net/minecraft/world/level/block/ShelfBlock.java
@@ -109,6 +_,11 @@
         if (!level.isClientSide()) {
             boolean hasNeighborSignal = level.hasNeighborSignal(pos);
             if (state.getValue(POWERED) != hasNeighborSignal) {
+                // Paper start - Call BlockRedstoneEvent
+                if (!org.bukkit.craftbukkit.event.CraftEventFactory.callBinaryRedstoneChange(level, pos, hasNeighborSignal)) {
+                    return;
+                }
+                // Paper end - Call BlockRedstoneEvent
                 BlockState blockState = state.setValue(POWERED, hasNeighborSignal);
                 if (!hasNeighborSignal) {
                     blockState = blockState.setValue(SIDE_CHAIN_PART, SideChainPart.UNCONNECTED);
