From a4805dbd77da057cc1ea0bf344379bc6e53ca1f6 Mon Sep 17 00:00:00 2001 From: bendude56 Date: Sun, 7 Jul 2013 21:52:41 -0600 Subject: [PATCH] Allow teleportation of entities on vehicles. Fixes BUKKIT-4210 Up until Minecraft version 1.5 it was not possible to teleport entities within vehicles. With the 1.5 update came the change in the Minecraft teleportation logic to dismount before teleporting the entity, if applicable. This commit ammends the existing CraftBukkit logic for rejecting teleportation for entities in vehicles to permit the action. Due to this change, CraftBukkit is now in-line with Minecraft 1.5 teleportation logic. --- src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | 5 ++++- src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index fe0f2006e5..b8a9a14888 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -201,10 +201,13 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { } public boolean teleport(Location location, TeleportCause cause) { - if (entity.vehicle != null || entity.passenger != null || entity.dead) { + if (entity.passenger != null || entity.dead) { return false; } + // If this entity is riding another entity, we must dismount before teleporting. + entity.mount(null); + entity.world = ((CraftWorld) location.getWorld()).getHandle(); entity.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); // entity.setLocation() throws no event, and so cannot be cancelled diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 9760f8f95d..bbf310b080 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -458,7 +458,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return false; } - if (entity.vehicle != null || entity.passenger != null) { + if (entity.passenger != null) { return false; } @@ -475,6 +475,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return false; } + // If this player is riding another entity, we must dismount before teleporting. + entity.mount(null); + // Update the From Location from = event.getFrom(); // Grab the new To Location dependent on whether the event was cancelled.