--- a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
@@ -40,11 +_,11 @@
     private float activeRotation;
     private boolean isActive;
     private boolean isHunting;
-    private final List<BlockPos> effectBlocks = Lists.newArrayList();
-    @Nullable
-    private LivingEntity destroyTarget;
-    @Nullable
-    private UUID destroyTargetUUID;
+    public final List<BlockPos> effectBlocks = Lists.newArrayList();
+    @Nullable
+    public LivingEntity destroyTarget;
+    @Nullable
+    public UUID destroyTargetUUID;
     private long nextAmbientSoundActivation;
 
     public ConduitBlockEntity(BlockPos pos, BlockState blockState) {
@@ -165,8 +_,20 @@
     }
 
     private static void applyEffects(Level level, BlockPos pos, List<BlockPos> positions) {
+        // CraftBukkit start
+        ConduitBlockEntity.applyEffects(level, pos, ConduitBlockEntity.getRange(positions));
+    }
+
+    public static int getRange(List<BlockPos> positions) {
+        // CraftBukkit end
         int size = positions.size();
         int i = size / 7 * 16;
+        // CraftBukkit start
+        return i;
+    }
+
+    private static void applyEffects(Level level, BlockPos pos, int i) { // i = effect range in blocks
+        // CraftBukkit end
         int x = pos.getX();
         int y = pos.getY();
         int z = pos.getZ();
@@ -175,13 +_,19 @@
         if (!entitiesOfClass.isEmpty()) {
             for (Player player : entitiesOfClass) {
                 if (pos.closerThan(player.blockPosition(), i) && player.isInWaterOrRain()) {
-                    player.addEffect(new MobEffectInstance(MobEffects.CONDUIT_POWER, 260, 0, true, true));
+                    player.addEffect(new MobEffectInstance(MobEffects.CONDUIT_POWER, 260, 0, true, true), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONDUIT); // CraftBukkit
                 }
             }
         }
     }
 
     private static void updateDestroyTarget(Level level, BlockPos pos, BlockState state, List<BlockPos> positions, ConduitBlockEntity blockEntity) {
+        // CraftBukkit start - add "damageTarget" boolean
+        ConduitBlockEntity.updateDestroyTarget(level, pos, state, positions, blockEntity, true);
+    }
+
+    public static void updateDestroyTarget(Level level, BlockPos pos, BlockState state, List<BlockPos> positions, ConduitBlockEntity blockEntity, boolean damageTarget) {
+        // CraftBukkit end
         LivingEntity livingEntity = blockEntity.destroyTarget;
         int size = positions.size();
         if (size < 42) {
@@ -200,7 +_,8 @@
             blockEntity.destroyTarget = null;
         }
 
-        if (blockEntity.destroyTarget != null) {
+        if (damageTarget && blockEntity.destroyTarget != null) { // CraftBukkit
+            if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), 4.0F)) // CraftBukkit
             level.playSound(
                 null,
                 blockEntity.destroyTarget.getX(),
@@ -211,7 +_,6 @@
                 1.0F,
                 1.0F
             );
-            blockEntity.destroyTarget.hurt(level.damageSources().magic(), 4.0F);
         }
 
         if (livingEntity != blockEntity.destroyTarget) {
@@ -230,7 +_,7 @@
         }
     }
 
-    private static AABB getDestroyRangeAABB(BlockPos pos) {
+    public static AABB getDestroyRangeAABB(BlockPos pos) {
         int x = pos.getX();
         int y = pos.getY();
         int z = pos.getZ();
