--- a/net/minecraft/world/level/block/RedstoneLampBlock.java
+++ b/net/minecraft/world/level/block/RedstoneLampBlock.java
@@ -11,50 +11,65 @@
 import net.minecraft.world.level.block.state.BlockState;
 import net.minecraft.world.level.block.state.StateDefinition;
 import net.minecraft.world.level.block.state.properties.BooleanProperty;
+import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
 
 public class RedstoneLampBlock extends Block {
+
     public static final MapCodec<RedstoneLampBlock> CODEC = simpleCodec(RedstoneLampBlock::new);
     public static final BooleanProperty LIT = RedstoneTorchBlock.LIT;
 
     @Override
     public MapCodec<RedstoneLampBlock> codec() {
-        return CODEC;
+        return RedstoneLampBlock.CODEC;
     }
 
     public RedstoneLampBlock(BlockBehaviour.Properties settings) {
         super(settings);
-        this.registerDefaultState(this.defaultBlockState().setValue(LIT, Boolean.valueOf(false)));
+        this.registerDefaultState((BlockState) this.defaultBlockState().setValue(RedstoneLampBlock.LIT, false));
     }
 
     @Nullable
     @Override
     public BlockState getStateForPlacement(BlockPlaceContext ctx) {
-        return this.defaultBlockState().setValue(LIT, Boolean.valueOf(ctx.getLevel().hasNeighborSignal(ctx.getClickedPos())));
+        return (BlockState) this.defaultBlockState().setValue(RedstoneLampBlock.LIT, ctx.getLevel().hasNeighborSignal(ctx.getClickedPos()));
     }
 
     @Override
     protected void neighborChanged(BlockState state, Level world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) {
         if (!world.isClientSide) {
-            boolean bl = state.getValue(LIT);
-            if (bl != world.hasNeighborSignal(pos)) {
-                if (bl) {
-                    world.scheduleTick(pos, this, 4);
+            boolean flag1 = (Boolean) state.getValue(RedstoneLampBlock.LIT);
+
+            if (flag1 != world.hasNeighborSignal(pos)) {
+                if (flag1) {
+                    world.scheduleTick(pos, (Block) this, 4);
                 } else {
-                    world.setBlock(pos, state.cycle(LIT), 2);
+                    // CraftBukkit start
+                    if (CraftEventFactory.callRedstoneChange(world, pos, 0, 15).getNewCurrent() != 15) {
+                        return;
+                    }
+                    // CraftBukkit end
+                    world.setBlock(pos, (BlockState) state.cycle(RedstoneLampBlock.LIT), 2);
                 }
             }
+
         }
     }
 
     @Override
     protected void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
-        if (state.getValue(LIT) && !world.hasNeighborSignal(pos)) {
-            world.setBlock(pos, state.cycle(LIT), 2);
+        if ((Boolean) state.getValue(RedstoneLampBlock.LIT) && !world.hasNeighborSignal(pos)) {
+            // CraftBukkit start
+            if (CraftEventFactory.callRedstoneChange(world, pos, 15, 0).getNewCurrent() != 0) {
+                return;
+            }
+            // CraftBukkit end
+            world.setBlock(pos, (BlockState) state.cycle(RedstoneLampBlock.LIT), 2);
         }
+
     }
 
     @Override
     protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
-        builder.add(LIT);
+        builder.add(RedstoneLampBlock.LIT);
     }
 }
