summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbendude56 <bendude56@gmail.com>2013-07-07 21:52:41 -0600
committerturt2live <travpc@gmail.com>2014-08-17 11:49:27 -0600
commita4805dbd77da057cc1ea0bf344379bc6e53ca1f6 (patch)
tree71200a3190cd8525eea4acd0bc075879f500684a
parent80e8f2ab8709dedc9fa491907f623d5e371f3d3f (diff)
downloadcraftbukkit-a4805dbd77da057cc1ea0bf344379bc6e53ca1f6.tar
craftbukkit-a4805dbd77da057cc1ea0bf344379bc6e53ca1f6.tar.gz
craftbukkit-a4805dbd77da057cc1ea0bf344379bc6e53ca1f6.tar.lz
craftbukkit-a4805dbd77da057cc1ea0bf344379bc6e53ca1f6.tar.xz
craftbukkit-a4805dbd77da057cc1ea0bf344379bc6e53ca1f6.zip
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.
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java5
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java5
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 fe0f2006..b8a9a148 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 9760f8f9..bbf310b0 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.