--- /home/matt/mc-dev-private//net/minecraft/server/EntityEnderPearl.java 2015-02-26 22:40:22.523608140 +0000 +++ src/main/java/net/minecraft/server/EntityEnderPearl.java 2015-02-26 22:40:22.523608140 +0000 @@ -1,5 +1,11 @@ package net.minecraft.server; +// CraftBukkit start +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.player.PlayerTeleportEvent; +// CraftBukkit end + public class EntityEnderPearl extends EntityProjectile { private EntityLiving c; @@ -41,13 +47,27 @@ this.world.addEntity(entityendermite); } - if (entityliving.au()) { - entityliving.mount((Entity) null); + // CraftBukkit start - Fire PlayerTeleportEvent + org.bukkit.craftbukkit.entity.CraftPlayer player = entityplayer.getBukkitEntity(); + org.bukkit.Location location = getBukkitEntity().getLocation(); + location.setPitch(player.getLocation().getPitch()); + location.setYaw(player.getLocation().getYaw()); + + PlayerTeleportEvent teleEvent = new PlayerTeleportEvent(player, player.getLocation(), location, PlayerTeleportEvent.TeleportCause.ENDER_PEARL); + Bukkit.getPluginManager().callEvent(teleEvent); + + if (!teleEvent.isCancelled() && !entityplayer.playerConnection.isDisconnected()) { + if (entityliving.au()) { + entityliving.mount((Entity) null); + } + + entityplayer.playerConnection.teleport(teleEvent.getTo()); + entityliving.fallDistance = 0.0F; + CraftEventFactory.entityDamage = this; + entityliving.damageEntity(DamageSource.FALL, 5.0F); + CraftEventFactory.entityDamage = null; } - - entityliving.enderTeleportTo(this.locX, this.locY, this.locZ); - entityliving.fallDistance = 0.0F; - entityliving.damageEntity(DamageSource.FALL, 5.0F); + // CraftBukkit end } } else if (entityliving != null) { entityliving.enderTeleportTo(this.locX, this.locY, this.locZ);