Fixed the PLAYER_TELEPORT event so event.getTo().getWorld() is correct. (#451)

This commit is contained in:
Byron Shelden
2011-03-22 23:50:14 -07:00
committed by Erik Broes
parent d08ee17352
commit 376ac51cea
3 changed files with 56 additions and 19 deletions

View File

@@ -258,30 +258,47 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
}
public void a(double d0, double d1, double d2, float f, float f1) {
// CraftBukkit start
// CraftBukkit start -- Delegate for a(double, double, double, float, float)
public boolean teleport(Location dest) {
// Note: the world in location is used only for the event
// Inter-world teleportation is handled in CraftPlayer.teleport()
Player player = getPlayer();
Location from = player.getLocation();
Location to = new Location(player.getWorld(), d0, d1, d2, f, f1);
Location to = dest.clone();
PlayerMoveEvent event = new PlayerMoveEvent(Type.PLAYER_TELEPORT, player, from, to);
server.getPluginManager().callEvent(event);
from = event.getFrom();
to = event.isCancelled() ? from : event.getTo();
double d0, d1, d2;
float f, f1;
d0 = to.getX();
d1 = to.getY();
d2 = to.getZ();
f = to.getYaw();
f1 = to.getPitch();
// CraftBukkit end
// net.minecraft.server start
this.l = false;
this.i = d0;
this.j = d1;
this.k = d2;
this.e.b(d0, d1, d2, f, f1);
this.e.a.b((Packet) (new Packet13PlayerLookMove(d0, d1 + 1.6200000047683716D, d1, d2, f, f1, false)));
// net.minecraft.server end
// Returns TRUE if the teleport was successful
return !event.isCancelled();
}
// CraftBukkit end
public void a(double d0, double d1, double d2, float f, float f1) {
// CraftBukkit start -- Delegate to teleport(Location)
teleport(new Location(getPlayer().getWorld(), d0, d1, d2, f, f1));
// CraftBukkit end
}
public void a(Packet14BlockDig packet14blockdig) {