--- a/net/minecraft/server/CommandTeleport.java
+++ b/net/minecraft/server/CommandTeleport.java
@@ -12,6 +12,11 @@
 import java.util.Iterator;
 import java.util.Set;
 import javax.annotation.Nullable;
+// CraftBukkit start
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.CraftWorld;
+import org.bukkit.event.entity.EntityTeleportEvent;
+// CraftBukkit end
 
 public class CommandTeleport {
 
@@ -128,9 +133,9 @@
                 }
 
                 if (worldserver == entity.world) {
-                    ((EntityPlayer) entity).playerConnection.a(d0, d1, d2, f, f1, set);
+                    ((EntityPlayer) entity).playerConnection.a(d0, d1, d2, f, f1, set, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.COMMAND); // CraftBukkit
                 } else {
-                    ((EntityPlayer) entity).a(worldserver, d0, d1, d2, f, f1);
+                    ((EntityPlayer) entity).a(worldserver, d0, d1, d2, f, f1, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.COMMAND); // CraftBukkit
                 }
 
                 entity.setHeadRotation(f);
@@ -139,6 +144,21 @@
                 float f3 = MathHelper.g(f1);
 
                 f3 = MathHelper.a(f3, -90.0F, 90.0F);
+                // CraftBukkit start - Teleport event
+                Location to = new Location(worldserver.getWorld(), d0, d1, d2, f2, f3);
+                EntityTeleportEvent event = new EntityTeleportEvent(entity.getBukkitEntity(), entity.getBukkitEntity().getLocation(), to);
+                worldserver.getServer().getPluginManager().callEvent(event);
+                if (event.isCancelled()) {
+                    return;
+                }
+
+                d0 = to.getX();
+                d1 = to.getY();
+                d2 = to.getZ();
+                f2 = to.getYaw();
+                f3 = to.getPitch();
+                worldserver = ((CraftWorld) to.getWorld()).getHandle();
+                // CraftBukkit end
                 if (worldserver == entity.world) {
                     entity.setPositionRotation(d0, d1, d2, f2, f3);
                     entity.setHeadRotation(f2);