diff --git a/Spigot-Server-Patches/0051-Teleport-passenger-vehicle-with-player.patch b/Spigot-Server-Patches/0051-Teleport-passenger-vehicle-with-player.patch new file mode 100644 index 0000000000..85e18e859d --- /dev/null +++ b/Spigot-Server-Patches/0051-Teleport-passenger-vehicle-with-player.patch @@ -0,0 +1,101 @@ +From e70c96da4657c54e7792c134b1ca6f7fe34f2249 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 31 May 2015 01:44:02 -0500 +Subject: [PATCH] Teleport passenger/vehicle with player + + +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index 79837ef..8925697 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -41,6 +41,15 @@ public abstract class Entity implements ICommandListener { + } + // CraftBukikt end + ++ // PaperSpigot start - Teleport passenger/vehicle with player ++ public void retrack() { ++ final EntityTracker entityTracker = ((WorldServer) world).getTracker(); ++ entityTracker.untrackEntity(this); ++ entityTracker.track(this); ++ ++ } ++ // PaperSpigot end ++ + private static final AxisAlignedBB a = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + private static int entityCount; + private int id; +@@ -1953,7 +1962,7 @@ public abstract class Entity implements ICommandListener { + // minecraftserver.getPlayerList().changeWorld(this, j, worldserver, worldserver1); + boolean before = worldserver1.chunkProviderServer.forceChunkLoad; + worldserver1.chunkProviderServer.forceChunkLoad = true; +- worldserver1.getMinecraftServer().getPlayerList().repositionEntity(this, exit, portal); ++ //worldserver1.getMinecraftServer().getPlayerList().repositionEntity(this, exit, portal); // PaperSpigot - Teleport passenger/vehicle with player, no... this entity is dead; + worldserver1.chunkProviderServer.forceChunkLoad = before; + // CraftBukkit end + this.world.methodProfiler.c("reloading"); +@@ -1961,6 +1970,12 @@ public abstract class Entity implements ICommandListener { + + if (entity != null) { + entity.n(this); ++ ++ // PaperSpigot start - Teleport passenger/vehicle with player, move entity to new location ++ exit.getBlock(); // force load ++ entity.setLocation(exit.getX(), exit.getY(), exit.getZ(), exit.getYaw(), exit.getPitch()); ++ // PaperSpigot end ++ + /* CraftBukkit start - We need to do this... + if (j == 1 && i == 1) { + BlockPosition blockposition = this.world.r(worldserver1.getSpawn()); +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index ae75b36..f12cf8a 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -448,7 +448,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + } + + // If this player is riding another entity, we must dismount before teleporting. +- entity.mount(null); ++ // PaperSpigot start - Teleport passenger/vehicle with player ++ //entity.mount(null); ++ ++ Entity vehicle = entity.vehicle; ++ Entity passenger = entity.passenger; ++ if (vehicle != null) { ++ vehicle.passenger = null; ++ vehicle.teleportTo(location, false); ++ vehicle = vehicle.getBukkitEntity().getHandle(); ++ entity.vehicle = vehicle; ++ vehicle.passenger = entity; ++ } ++ ++ if (passenger != null) { ++ passenger.vehicle = null; ++ passenger.teleportTo(location, false); ++ passenger = passenger.getBukkitEntity().getHandle(); ++ entity.passenger = passenger; ++ passenger.vehicle = entity; ++ } ++ // PaperSpigot end + + // Update the From Location + from = event.getFrom(); +@@ -469,6 +489,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + } else { + server.getHandle().moveToWorld(entity, toWorld.dimension, true, to, true); + } ++ ++ // PaperSpigot start - Teleport passenger/vehicle with player ++ if (vehicle != null) { ++ vehicle.retrack(); ++ //entity.retrack(); ++ } ++ if (passenger != null) { ++ passenger.retrack(); ++ } ++ // PaperSpigot end + return true; + } + +-- +2.4.1.windows.1 +