--- a/net/minecraft/world/entity/ai/behavior/BabyFollowAdult.java
+++ b/net/minecraft/world/entity/ai/behavior/BabyFollowAdult.java
@@ -24,8 +_,19 @@
                     if (!mob.isBaby()) {
                         return false;
                     } else {
-                        AgeableMob ageableMob = instance.get(nearestVisibleAdult);
+                        LivingEntity ageableMob = instance.get(nearestVisibleAdult); // CraftBukkit - type
                         if (mob.closerThan(ageableMob, followRange.getMaxValue() + 1) && !mob.closerThan(ageableMob, followRange.getMinValue())) {
+                            // CraftBukkit start
+                            org.bukkit.event.entity.EntityTargetLivingEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetLivingEvent(mob, ageableMob, org.bukkit.event.entity.EntityTargetEvent.TargetReason.FOLLOW_LEADER);
+                            if (event.isCancelled()) {
+                                return false;
+                            }
+                            if (event.getTarget() == null) {
+                                nearestVisibleAdult.erase();
+                                return true;
+                            }
+                            ageableMob = ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getTarget()).getHandle();
+                            // CraftBukkit end
                             WalkTarget walkTarget1 = new WalkTarget(
                                 new EntityTracker(ageableMob, false), speedModifier.apply(mob), followRange.getMinValue() - 1
                             );
