From b320dbea223188e65d66bd95a0cc47fe776a8712 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 18 Jul 2019 21:12:00 -0500 Subject: [PATCH] Fix teleport with vehicle/passenger patch --- ...0044-Teleport-with-vehicle-passenger.patch | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/patches/server/0044-Teleport-with-vehicle-passenger.patch b/patches/server/0044-Teleport-with-vehicle-passenger.patch index bfe91a8f3..2b561eb2c 100644 --- a/patches/server/0044-Teleport-with-vehicle-passenger.patch +++ b/patches/server/0044-Teleport-with-vehicle-passenger.patch @@ -1,18 +1,26 @@ -From cfc0e6ba5c3aca2801275d1785a62d7f8a9efad7 Mon Sep 17 00:00:00 2001 +From fc68549f17bcf959307b34c412f3336c99f65021 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 7 Jul 2019 18:25:05 -0500 Subject: [PATCH] Teleport with vehicle/passenger --- - src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | 4 +++- - src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 4 +++- - 2 files changed, 6 insertions(+), 2 deletions(-) + .../craftbukkit/entity/CraftEntity.java | 21 +++++++++++++++++-- + .../craftbukkit/entity/CraftPlayer.java | 4 +++- + 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 15042943c..45e16f8e9 100644 +index 15042943c9..4dac433fa4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -494,10 +494,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -9,6 +9,7 @@ import java.util.UUID; + import net.minecraft.server.AxisAlignedBB; + import net.minecraft.server.BlockPosition; + import net.minecraft.server.DamageSource; ++import net.minecraft.server.DimensionManager; + import net.minecraft.server.Entity; + import net.minecraft.server.EntityAmbient; + import net.minecraft.server.EntityAnimal; +@@ -494,16 +495,32 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { Preconditions.checkArgument(location != null, "location"); location.checkFinite(); @@ -21,16 +29,37 @@ index 15042943c..45e16f8e9 100644 return false; } -+ if (entity.isVehicle() && !entity.getVehicle().isVehicle()) return entity.getVehicle().getBukkitEntity().teleport(location, cause); // Purpur ++ if (entity.getVehicle() != null) return entity.getVehicle().getBukkitEntity().teleport(location, cause); // Purpur + // If this entity is riding another entity, we must dismount before teleporting. entity.stopRiding(); + // Let the server handle cross world teleports + if (!location.getWorld().equals(getWorld())) { +- entity.teleportTo(((CraftWorld) location.getWorld()).getHandle().getWorldProvider().getDimensionManager(), new BlockPosition(location.getX(), location.getY(), location.getZ())); ++ // Purpur start ++ DimensionManager dimension = ((CraftWorld) location.getWorld()).getHandle().getWorldProvider().getDimensionManager(); ++ BlockPosition position = new BlockPosition(location.getX(), location.getY(), location.getZ()); ++ if(entity.isVehicle()) { ++ Entity passenger = entity.getPassengers().get(0); ++ entity.ejectPassengers(); ++ Entity newEntity = entity.teleportTo(dimension, position); ++ Entity newPassenger = passenger instanceof EntityPlayer ? server.getHandle().moveToWorld((EntityPlayer) passenger, dimension, true, location, true) : passenger.teleportTo(dimension, position); ++ if (newEntity != null && newPassenger != null) { ++ newPassenger.startRiding(newEntity); ++ } ++ } else { ++ entity.teleportTo(dimension, position); ++ } ++ // Purpur end + return true; + } + diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c94944dfe..992a061a0 100644 +index c94944dfe0..cd16edb418 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -752,7 +752,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -752,10 +752,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return false; } @@ -39,15 +68,11 @@ index c94944dfe..992a061a0 100644 return false; } -@@ -769,6 +769,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - return false; - } - -+ if (entity.isVehicle() && !entity.getVehicle().isVehicle()) return entity.getVehicle().getBukkitEntity().teleport(location, cause); // Purpur ++ if (entity.getVehicle() != null) return entity.getVehicle().getBukkitEntity().teleport(location, cause); // Purpur + - // If this player is riding another entity, we must dismount before teleporting. - entity.stopRiding(); - + // From = Players current Location + Location from = this.getLocation(); + // To = Players new Location if Teleport is Successful -- 2.20.1