--- a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
@@ -37,16 +_,16 @@
     private static final int EFFECT_DURATION = 13;
     private static final float ROTATION_SPEED = -0.0375F;
     private static final int MIN_ACTIVE_SIZE = 16;
-    private static final int MIN_KILL_SIZE = 42;
+    public static final int MIN_KILL_SIZE = 42;
     private static final int KILL_RANGE = 8;
     private static final Block[] VALID_BLOCKS = new Block[]{Blocks.PRISMARINE, Blocks.PRISMARINE_BRICKS, Blocks.SEA_LANTERN, Blocks.DARK_PRISMARINE};
     public int tickCount;
     private float activeRotation;
     private boolean isActive;
     private boolean isHunting;
-    private final List<BlockPos> effectBlocks = Lists.newArrayList();
+    public final List<BlockPos> effectBlocks = Lists.newArrayList();
     @Nullable
-    private EntityReference<LivingEntity> destroyTarget;
+    public EntityReference<LivingEntity> destroyTarget;
     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,20 +_,25 @@
         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 updateAndAttackTarget(ServerLevel level, BlockPos pos, BlockState state, ConduitBlockEntity blockEntity, boolean canDestroy) {
+    // CraftBukkit start - add "damageTarget" boolean
+        updateAndAttackTarget(level, pos, state, blockEntity, canDestroy, true);
+    }
+    public static void updateAndAttackTarget(ServerLevel level, BlockPos pos, BlockState state, ConduitBlockEntity blockEntity, boolean canDestroy, boolean damageTarget) {
+    // CraftBukkit end - add "damageTarget" boolean
         EntityReference<LivingEntity> entityReference = updateDestroyTarget(blockEntity.destroyTarget, level, pos, canDestroy);
         LivingEntity livingEntity = EntityReference.getLivingEntity(entityReference, level);
-        if (livingEntity != null) {
+        if (damageTarget && livingEntity != null) { // CraftBukkit
+            if (livingEntity.hurtServer(level, level.damageSources().magic().eventBlockDamager(level, pos), 4.0F)) // CraftBukkit - move up
             level.playSound(
                 null, livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(), SoundEvents.CONDUIT_ATTACK_TARGET, SoundSource.BLOCKS, 1.0F, 1.0F
             );
-            livingEntity.hurtServer(level, level.damageSources().magic(), 4.0F);
         }
 
         if (!Objects.equals(entityReference, blockEntity.destroyTarget)) {
@@ -198,7 +_,7 @@
     }
 
     @Nullable
-    private static EntityReference<LivingEntity> updateDestroyTarget(
+    public static EntityReference<LivingEntity> updateDestroyTarget(
         @Nullable EntityReference<LivingEntity> destroyTarget, ServerLevel level, BlockPos pos, boolean canDestroy
     ) {
         if (!canDestroy) {
@@ -219,7 +_,7 @@
         return entitiesOfClass.isEmpty() ? null : EntityReference.of(Util.getRandom(entitiesOfClass, level.random));
     }
 
-    private static AABB getDestroyRangeAABB(BlockPos pos) {
+    public static AABB getDestroyRangeAABB(BlockPos pos) {
         return new AABB(pos).inflate(8.0);
     }
 
