--- a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
@@ -20,11 +20,14 @@
 import net.minecraft.world.level.gameevent.PositionSource;
 
 public class SculkCatalystBlockEntity extends BlockEntity implements GameEventListener {
-    private final BlockPositionSource blockPosSource = new BlockPositionSource(this.worldPosition);
-    private final SculkSpreader sculkSpreader = SculkSpreader.createLevelSpreader();
+
+    private final BlockPositionSource blockPosSource;
+    private final SculkSpreader sculkSpreader;
 
     public SculkCatalystBlockEntity(BlockPos pos, BlockState state) {
         super(BlockEntityType.SCULK_CATALYST, pos, state);
+        this.blockPosSource = new BlockPositionSource(this.worldPosition);
+        this.sculkSpreader = SculkSpreader.createLevelSpreader();
     }
 
     @Override
@@ -47,24 +50,30 @@
         if (this.isRemoved()) {
             return false;
         } else {
-            GameEvent.Context context = event.context();
+            GameEvent.Context gameevent_a = event.context();
+
             if (event.gameEvent() == GameEvent.ENTITY_DIE) {
-                Entity i = context.sourceEntity();
-                if (i instanceof LivingEntity) {
-                    LivingEntity livingEntity = (LivingEntity)i;
-                    if (!livingEntity.wasExperienceConsumed()) {
-                        int i = livingEntity.getExperienceReward();
-                        if (livingEntity.shouldDropExperience() && i > 0) {
+                Entity entity = gameevent_a.sourceEntity();
+
+                if (entity instanceof LivingEntity) {
+                    LivingEntity entityliving = (LivingEntity) entity;
+
+                    if (!entityliving.wasExperienceConsumed()) {
+                        int i = entityliving.getExperienceReward();
+
+                        if (entityliving.shouldDropExperience() && i > 0) {
                             this.sculkSpreader.addCursors(new BlockPos(event.source().relative(Direction.UP, 0.5D)), i);
-                            LivingEntity livingEntity2 = livingEntity.getLastHurtByMob();
-                            if (livingEntity2 instanceof ServerPlayer) {
-                                ServerPlayer serverPlayer = (ServerPlayer)livingEntity2;
-                                DamageSource damageSource = livingEntity.getLastDamageSource() == null ? DamageSource.playerAttack(serverPlayer) : livingEntity.getLastDamageSource();
-                                CriteriaTriggers.KILL_MOB_NEAR_SCULK_CATALYST.trigger(serverPlayer, context.sourceEntity(), damageSource);
+                            LivingEntity entityliving1 = entityliving.getLastHurtByMob();
+
+                            if (entityliving1 instanceof ServerPlayer) {
+                                ServerPlayer entityplayer = (ServerPlayer) entityliving1;
+                                DamageSource damagesource = entityliving.getLastDamageSource() == null ? DamageSource.playerAttack(entityplayer) : entityliving.getLastDamageSource();
+
+                                CriteriaTriggers.KILL_MOB_NEAR_SCULK_CATALYST.trigger(entityplayer, gameevent_a.sourceEntity(), damagesource);
                             }
                         }
 
-                        livingEntity.skipDropExperience();
+                        entityliving.skipDropExperience();
                         SculkCatalystBlock.bloom(world, this.worldPosition, this.getBlockState(), world.getRandom());
                     }
 
@@ -77,7 +86,9 @@
     }
 
     public static void serverTick(Level world, BlockPos pos, BlockState state, SculkCatalystBlockEntity blockEntity) {
+        org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory.sourceBlockOverride = blockEntity.getBlockPos(); // CraftBukkit - SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep.
         blockEntity.sculkSpreader.updateCursors(world, pos, world.getRandom(), true);
+        org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory.sourceBlockOverride = null; // CraftBukkit
     }
 
     @Override
