Fake vehicle enter on join.

This commit is contained in:
asofold 2016-05-16 00:20:43 +02:00
parent ddc0111f73
commit 6fb52915ab
2 changed files with 47 additions and 2 deletions

View File

@ -1568,6 +1568,13 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// if (LocUtil.needsDirectionCorrection(useLoc.getYaw(), useLoc.getPitch())) {
// DataManager.getPlayerData(player).task.correctDirection();
// }
// Check for vehicles.
// TODO: Order / exclusion of items.
if (player.isInsideVehicle()) {
vehicleChecks.onPlayerVehicleEnter(player, player.getVehicle());
}
if (data.debug) {
// Log location.
debug(player, tag + ": " + loc);

View File

@ -515,14 +515,52 @@ public class VehicleChecks extends CheckListener {
if (!(entity instanceof Player)) {
return;
}
final Player player = (Player) entity;
onPlayerVehicleEnter((Player) entity, event.getVehicle());
}
/**
* Assume entering a vehicle, event or join with being inside a vehicle.
*
* @param player
* @param vehicle
*/
public void onPlayerVehicleEnter(final Player player, final Entity vehicle) {
final MovingData data = MovingData.getData(player);
// Check for nested vehicles.
final Entity lastVehicle = CheckUtils.getLastNonPlayerVehicle(vehicle);
if (lastVehicle == null) {
data.clearVehicleData();
if (data.debug) {
debug(player, "Vehicle enter: Skip on nested vehicles, possibly with multiple players involved, who would do that?");
}
return;
}
else if (!lastVehicle.equals(vehicle)) {
// Nested vehicles.
// TODO: Should in general skip checking these? Set backs don't yet work with these anyway (either... or ...).
dataOnVehicleEnter(player, lastVehicle, data);
}
else {
// Proceed normally.
dataOnVehicleEnter(player, vehicle, data);
}
}
/**
* Adjust data with given last non player vehicle.
*
* @param player
* @param vehicle
*/
private void dataOnVehicleEnter(final Player player, final Entity vehicle, final MovingData data) {
// Adjust data.
final MovingConfig cc = MovingConfig.getConfig(player);
// TODO: Scheduled set-backs.
data.joinOrRespawn = false;
data.removeAllVelocity();
// Event should have a vehicle, in case check this last.
final Entity vehicle = event.getVehicle();
final Location vLoc = vehicle.getLocation(useLoc1);
data.vehicleConsistency = MoveConsistency.getConsistency(vLoc, null, player.getLocation(useLoc2));
// TODO: Check the set-back for consistency, verify if it is the same?