--- a/net/minecraft/world/entity/ai/goal/PathfinderGoalFollowOwner.java
+++ b/net/minecraft/world/entity/ai/goal/PathfinderGoalFollowOwner.java
@@ -15,6 +15,12 @@
 import net.minecraft.world.level.pathfinder.PathType;
 import net.minecraft.world.level.pathfinder.PathfinderNormal;
 
+// CraftBukkit start
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.entity.CraftEntity;
+import org.bukkit.event.entity.EntityTeleportEvent;
+// CraftBukkit end
+
 public class PathfinderGoalFollowOwner extends PathfinderGoal {
 
     public static final int TELEPORT_WHEN_DISTANCE_IS = 12;
@@ -121,7 +127,18 @@
         } else if (!this.a(new BlockPosition(i, j, k))) {
             return false;
         } else {
-            this.tamable.setPositionRotation((double) i + 0.5D, (double) j, (double) k + 0.5D, this.tamable.getYRot(), this.tamable.getXRot());
+            // CraftBukkit start
+            CraftEntity entity = this.tamable.getBukkitEntity();
+            Location to = new Location(entity.getWorld(), (double) i + 0.5D, (double) j, (double) k + 0.5D, this.tamable.getYRot(), this.tamable.getXRot());
+            EntityTeleportEvent event = new EntityTeleportEvent(entity, entity.getLocation(), to);
+            this.tamable.level.getCraftServer().getPluginManager().callEvent(event);
+            if (event.isCancelled()) {
+                return false;
+            }
+            to = event.getTo();
+
+            this.tamable.setPositionRotation(to.getX(), to.getY(), to.getZ(), to.getYaw(), to.getPitch());
+            // CraftBukkit end
             this.navigation.o();
             return true;
         }
