--- a/net/minecraft/server/CommandTeleport.java +++ b/net/minecraft/server/CommandTeleport.java @@ -14,6 +14,11 @@ import java.util.Set; import java.util.function.Predicate; 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 { @@ -49,7 +54,7 @@ while (iterator.hasNext()) { Entity entity1 = (Entity) iterator.next(); - a(commandlistenerwrapper, entity1, commandlistenerwrapper.getWorld(), entity.locX, entity.locY, entity.locZ, EnumSet.noneOf(PacketPlayOutPosition.EnumPlayerTeleportFlags.class), entity.yaw, entity.pitch, (CommandTeleport.a) null); + a(commandlistenerwrapper, entity1, (WorldServer) entity.world, entity.locX, entity.locY, entity.locZ, EnumSet.noneOf(PacketPlayOutPosition.EnumPlayerTeleportFlags.class), entity.yaw, entity.pitch, (CommandTeleport.a) null); // SPIGOT-4245, MC-128441 - use target world as destination } if (collection.size() == 1) { @@ -120,9 +125,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); @@ -131,6 +136,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);