diff --git a/src/main/java/net/knarcraft/stargate/portal/teleporter/VehicleTeleporter.java b/src/main/java/net/knarcraft/stargate/portal/teleporter/VehicleTeleporter.java index 87c3288..1215616 100644 --- a/src/main/java/net/knarcraft/stargate/portal/teleporter/VehicleTeleporter.java +++ b/src/main/java/net/knarcraft/stargate/portal/teleporter/VehicleTeleporter.java @@ -165,7 +165,7 @@ public class VehicleTeleporter extends EntityTeleporter { private void teleportLivingVehicle(Location exit, List passengers, Portal origin) { teleportingVehicle.eject(); teleportingVehicle.teleport(exit); - handleVehiclePassengers(passengers, teleportingVehicle, 2, origin); + handleVehiclePassengers(passengers, teleportingVehicle, 2, origin, exit.getDirection()); } /** @@ -194,19 +194,20 @@ public class VehicleTeleporter extends EntityTeleporter { teleportingVehicle.remove(); //Set rotation, add passengers and restore velocity newVehicle.setRotation(exit.getYaw(), exit.getPitch()); - handleVehiclePassengers(passengers, newVehicle, 1, origin); + handleVehiclePassengers(passengers, newVehicle, 1, origin, exit.getDirection()); scheduler.scheduleSyncDelayedTask(Stargate.getInstance(), () -> newVehicle.setVelocity(newVelocity), 1); } /** * Ejects, teleports and adds all passengers to the target vehicle * - * @param passengers

The passengers to handle

- * @param vehicle

The vehicle the passengers should be put into

- * @param delay

The amount of milliseconds to wait before adding the vehicle passengers

- * @param origin

The portal the vehicle teleported from

+ * @param passengers

The passengers to handle

+ * @param vehicle

The vehicle the passengers should be put into

+ * @param delay

The amount of milliseconds to wait before adding the vehicle passengers

+ * @param origin

The portal the vehicle teleported from

+ * @param exitRotation

The rotation of any passengers exiting the stargate

*/ - private void handleVehiclePassengers(List passengers, Vehicle vehicle, long delay, Portal origin) { + private void handleVehiclePassengers(List passengers, Vehicle vehicle, long delay, Portal origin, Vector exitRotation) { for (Entity passenger : passengers) { passenger.eject(); scheduler.scheduleSyncDelayedTask(Stargate.getInstance(), () -> { @@ -214,7 +215,7 @@ public class VehicleTeleporter extends EntityTeleporter { //Teleport any creatures leashed by the player in a 15-block range teleportLeashedCreatures(player, origin); } - teleportAndAddPassenger(vehicle, passenger); + teleportAndAddPassenger(vehicle, passenger, exitRotation); }, delay); } } @@ -227,9 +228,10 @@ public class VehicleTeleporter extends EntityTeleporter { * * @param targetVehicle

The vehicle to add the passenger to

* @param passenger

The passenger to teleport and add

+ * @param exitDirection

The direction of any passengers exiting the stargate

*/ - private void teleportAndAddPassenger(Vehicle targetVehicle, Entity passenger) { - if (!passenger.teleport(targetVehicle.getLocation())) { + private void teleportAndAddPassenger(Vehicle targetVehicle, Entity passenger, Vector exitDirection) { + if (!passenger.teleport(targetVehicle.getLocation().clone().setDirection(exitDirection))) { Stargate.debug("handleVehiclePassengers", "Failed to teleport passenger"); } if (!targetVehicle.addPassenger(passenger)) {