--- a/net/minecraft/world/level/block/RedStoneOreBlock.java
+++ b/net/minecraft/world/level/block/RedStoneOreBlock.java
@@ -37,14 +_,27 @@
 
     @Override
     protected void attack(BlockState state, Level level, BlockPos pos, Player player) {
-        interact(state, level, pos);
+        interact(state, level, pos, player); // CraftBukkit - add entityhuman
         super.attack(state, level, pos, player);
     }
 
     @Override
     public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) {
         if (!entity.isSteppingCarefully()) {
-            interact(state, level, pos);
+            // CraftBukkit start
+            if (entity instanceof Player player) {
+                org.bukkit.event.player.PlayerInteractEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(player, org.bukkit.event.block.Action.PHYSICAL, pos, null, null, null);
+                if (!event.isCancelled()) {
+                    RedStoneOreBlock.interact(level.getBlockState(pos), level, pos, entity); // add entity
+                }
+            } else {
+                org.bukkit.event.entity.EntityInteractEvent event = new org.bukkit.event.entity.EntityInteractEvent(entity.getBukkitEntity(), level.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()));
+                level.getCraftServer().getPluginManager().callEvent(event);
+                if (!event.isCancelled()) {
+                    RedStoneOreBlock.interact(level.getBlockState(pos), level, pos, entity); // add entity
+                }
+            }
+            // CraftBukkit end
         }
 
         super.stepOn(level, pos, state, entity);
@@ -57,7 +_,7 @@
         if (level.isClientSide) {
             spawnParticles(level, pos);
         } else {
-            interact(state, level, pos);
+            interact(state, level, pos, player); // CraftBukkit - add entityhuman
         }
 
         return (InteractionResult)(stack.getItem() instanceof BlockItem && new BlockPlaceContext(player, hand, stack, hitResult).canPlace()
@@ -65,9 +_,14 @@
             : InteractionResult.SUCCESS);
     }
 
-    private static void interact(BlockState state, Level level, BlockPos pos) {
+    private static void interact(BlockState state, Level level, BlockPos pos, Entity entity) { // CraftBukkit - add Entity
         spawnParticles(level, pos);
         if (!state.getValue(LIT)) {
+            // CraftBukkit start
+            if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, state.setValue(RedStoneOreBlock.LIT, true))) {
+                return;
+            }
+            // CraftBukkit end
             level.setBlock(pos, state.setValue(LIT, Boolean.valueOf(true)), 3);
         }
     }
@@ -80,6 +_,11 @@
     @Override
     protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
         if (state.getValue(LIT)) {
+            // CraftBukkit start
+            if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockFadeEvent(level, pos, state.setValue(RedStoneOreBlock.LIT, false)).isCancelled()) {
+                return;
+            }
+            // CraftBukkit end
             level.setBlock(pos, state.setValue(LIT, Boolean.valueOf(false)), 3);
         }
     }
@@ -87,9 +_,17 @@
     @Override
     protected void spawnAfterBreak(BlockState state, ServerLevel level, BlockPos pos, ItemStack stack, boolean dropExperience) {
         super.spawnAfterBreak(state, level, pos, stack, dropExperience);
+        // CraftBukkit start - Delegated to getExpDrop
+    }
+
+    @Override
+    public int getExpDrop(BlockState state, ServerLevel level, BlockPos pos, ItemStack stack, boolean dropExperience) {
         if (dropExperience) {
-            this.tryDropExperience(level, pos, stack, UniformInt.of(1, 5));
+            return this.tryDropExperience(level, pos, stack, UniformInt.of(1, 5));
         }
+
+        return 0;
+        // CraftBukkit end
     }
 
     @Override
