Gives all passengers the same exit velocity as the root vehicle
This commit is contained in:
parent
a481ccf017
commit
5f4a90aabb
@ -49,6 +49,10 @@ public class PlayerTeleporter extends Teleporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Calculate the exit velocity of the player
|
||||||
|
Vector newVelocityDirection = DirectionHelper.getDirectionVectorFromYaw(portal.getYaw());
|
||||||
|
Vector newVelocity = newVelocityDirection.multiply(velocity * Stargate.getGateConfig().getExitVelocity());
|
||||||
|
|
||||||
//Load chunks to make sure not to teleport to the void
|
//Load chunks to make sure not to teleport to the void
|
||||||
loadChunks();
|
loadChunks();
|
||||||
|
|
||||||
@ -56,7 +60,7 @@ public class PlayerTeleporter extends Teleporter {
|
|||||||
TeleportHelper.teleportLeashedCreatures(player, origin, portal);
|
TeleportHelper.teleportLeashedCreatures(player, origin, portal);
|
||||||
|
|
||||||
if (player.eject()) {
|
if (player.eject()) {
|
||||||
TeleportHelper.handleEntityPassengers(passengers, player, origin, portal, exit.getDirection());
|
TeleportHelper.handleEntityPassengers(passengers, player, origin, portal, exit.getDirection(), newVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
//If no event is passed in, assume it's a teleport, and act as such
|
//If no event is passed in, assume it's a teleport, and act as such
|
||||||
@ -69,8 +73,6 @@ public class PlayerTeleporter extends Teleporter {
|
|||||||
|
|
||||||
//Set the velocity of the teleported player after the teleportation is finished
|
//Set the velocity of the teleported player after the teleportation is finished
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
|
||||||
Vector newVelocityDirection = DirectionHelper.getDirectionVectorFromYaw(portal.getYaw());
|
|
||||||
Vector newVelocity = newVelocityDirection.multiply(velocity * Stargate.getGateConfig().getExitVelocity());
|
|
||||||
player.setVelocity(newVelocity);
|
player.setVelocity(newVelocity);
|
||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import org.bukkit.entity.AbstractHorse;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.scheduler.BukkitScheduler;
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -83,7 +84,8 @@ public abstract class Teleporter {
|
|||||||
loadChunks();
|
loadChunks();
|
||||||
|
|
||||||
if (teleportedEntity.eject()) {
|
if (teleportedEntity.eject()) {
|
||||||
TeleportHelper.handleEntityPassengers(passengers, teleportedEntity, origin, portal, exit.getDirection());
|
TeleportHelper.handleEntityPassengers(passengers, teleportedEntity, origin, portal, exit.getDirection(),
|
||||||
|
new Vector());
|
||||||
}
|
}
|
||||||
teleportedEntity.teleport(exit);
|
teleportedEntity.teleport(exit);
|
||||||
return true;
|
return true;
|
||||||
|
@ -133,7 +133,8 @@ public class VehicleTeleporter extends EntityTeleporter {
|
|||||||
*/
|
*/
|
||||||
private void teleportVehicle(List<Entity> passengers, Location exit, Vector newVelocity, Portal origin) {
|
private void teleportVehicle(List<Entity> passengers, Location exit, Vector newVelocity, Portal origin) {
|
||||||
if (teleportingVehicle.eject()) {
|
if (teleportingVehicle.eject()) {
|
||||||
TeleportHelper.handleEntityPassengers(passengers, teleportingVehicle, origin, portal, exit.getDirection());
|
TeleportHelper.handleEntityPassengers(passengers, teleportingVehicle, origin, portal, exit.getDirection(),
|
||||||
|
newVelocity);
|
||||||
}
|
}
|
||||||
Stargate.debug("VehicleTeleporter::teleportVehicle", "Teleporting " + teleportingVehicle +
|
Stargate.debug("VehicleTeleporter::teleportVehicle", "Teleporting " + teleportingVehicle +
|
||||||
" to final location " + exit + " with direction " + exit.getDirection());
|
" to final location " + exit + " with direction " + exit.getDirection());
|
||||||
@ -172,7 +173,8 @@ public class VehicleTeleporter extends EntityTeleporter {
|
|||||||
}
|
}
|
||||||
//Remove the old vehicle
|
//Remove the old vehicle
|
||||||
if (teleportingVehicle.eject()) {
|
if (teleportingVehicle.eject()) {
|
||||||
TeleportHelper.handleEntityPassengers(passengers, newVehicle, origin, portal, exit.getDirection());
|
TeleportHelper.handleEntityPassengers(passengers, newVehicle, origin, portal, exit.getDirection(),
|
||||||
|
newVelocity);
|
||||||
}
|
}
|
||||||
teleportingVehicle.remove();
|
teleportingVehicle.remove();
|
||||||
scheduler.scheduleSyncDelayedTask(Stargate.getInstance(), () -> newVehicle.setVelocity(newVelocity), 1);
|
scheduler.scheduleSyncDelayedTask(Stargate.getInstance(), () -> newVehicle.setVelocity(newVelocity), 1);
|
||||||
|
@ -79,8 +79,10 @@ public final class TeleportHelper {
|
|||||||
* @param targetVehicle <p>The entity to add the passenger to</p>
|
* @param targetVehicle <p>The entity to add the passenger to</p>
|
||||||
* @param passenger <p>The passenger to teleport and add</p>
|
* @param passenger <p>The passenger to teleport and add</p>
|
||||||
* @param exitDirection <p>The direction of any passengers exiting the stargate</p>
|
* @param exitDirection <p>The direction of any passengers exiting the stargate</p>
|
||||||
|
* @param newVelocity <p>The new velocity of the teleported passenger</p>
|
||||||
*/
|
*/
|
||||||
public static void teleportAndAddPassenger(Entity targetVehicle, Entity passenger, Vector exitDirection) {
|
public static void teleportAndAddPassenger(Entity targetVehicle, Entity passenger, Vector exitDirection,
|
||||||
|
Vector newVelocity) {
|
||||||
Location passengerExit = targetVehicle.getLocation().clone().setDirection(exitDirection);
|
Location passengerExit = targetVehicle.getLocation().clone().setDirection(exitDirection);
|
||||||
if (!passenger.teleport(passengerExit)) {
|
if (!passenger.teleport(passengerExit)) {
|
||||||
Stargate.debug("TeleportHelper::handleVehiclePassengers", "Failed to teleport passenger" +
|
Stargate.debug("TeleportHelper::handleVehiclePassengers", "Failed to teleport passenger" +
|
||||||
@ -96,6 +98,9 @@ public final class TeleportHelper {
|
|||||||
Stargate.debug("TeleportHelper::handleVehiclePassengers", "Added passenger " + passenger +
|
Stargate.debug("TeleportHelper::handleVehiclePassengers", "Added passenger " + passenger +
|
||||||
" to " + targetVehicle);
|
" to " + targetVehicle);
|
||||||
}
|
}
|
||||||
|
Stargate.debug("VehicleTeleporter::teleportVehicle", "Setting velocity " + newVelocity +
|
||||||
|
" for passenger " + passenger);
|
||||||
|
passenger.setVelocity(newVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -106,9 +111,10 @@ public final class TeleportHelper {
|
|||||||
* @param origin <p>The portal the entity teleported from</p>
|
* @param origin <p>The portal the entity teleported from</p>
|
||||||
* @param target <p>The portal the entity is teleporting to</p>
|
* @param target <p>The portal the entity is teleporting to</p>
|
||||||
* @param exitRotation <p>The rotation of any passengers exiting the stargate</p>
|
* @param exitRotation <p>The rotation of any passengers exiting the stargate</p>
|
||||||
|
* @param newVelocity <p>The new velocity of the teleported passengers</p>
|
||||||
*/
|
*/
|
||||||
public static void handleEntityPassengers(List<Entity> passengers, Entity entity, Portal origin, Portal target,
|
public static void handleEntityPassengers(List<Entity> passengers, Entity entity, Portal origin, Portal target,
|
||||||
Vector exitRotation) {
|
Vector exitRotation, Vector newVelocity) {
|
||||||
for (Entity passenger : passengers) {
|
for (Entity passenger : passengers) {
|
||||||
List<Entity> passengerPassengers = passenger.getPassengers();
|
List<Entity> passengerPassengers = passenger.getPassengers();
|
||||||
if (!passengerPassengers.isEmpty()) {
|
if (!passengerPassengers.isEmpty()) {
|
||||||
@ -117,14 +123,14 @@ public final class TeleportHelper {
|
|||||||
}
|
}
|
||||||
if (passenger.eject()) {
|
if (passenger.eject()) {
|
||||||
//Teleport any passengers of the passenger
|
//Teleport any passengers of the passenger
|
||||||
handleEntityPassengers(passengerPassengers, passenger, origin, target, exitRotation);
|
handleEntityPassengers(passengerPassengers, passenger, origin, target, exitRotation, newVelocity);
|
||||||
}
|
}
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
|
||||||
if (passenger instanceof Player player) {
|
if (passenger instanceof Player player) {
|
||||||
//Teleport any creatures leashed by the player in a 15-block range
|
//Teleport any creatures leashed by the player in a 15-block range
|
||||||
teleportLeashedCreatures(player, origin, target);
|
teleportLeashedCreatures(player, origin, target);
|
||||||
}
|
}
|
||||||
teleportAndAddPassenger(entity, passenger, exitRotation);
|
teleportAndAddPassenger(entity, passenger, exitRotation, newVelocity);
|
||||||
}, passenger instanceof Player ? Stargate.getGateConfig().waitForPlayerAfterTeleportDelay() : 0);
|
}, passenger instanceof Player ? Stargate.getGateConfig().waitForPlayerAfterTeleportDelay() : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user