[BREAKING] Don't use TelelportCause.PLUGIN to avoid confusion (p+v).

Players and vehicles:
Instead always use UNKNOWN, as that is what results from
PlayerMoveEvent.setTo(newTo), as we use it for setting back players.

This should break functionality that relies on TeleportCause.PLUGIN
being used, possibly more likely with vehicles.
This commit is contained in:
asofold 2017-04-01 14:29:57 +02:00
parent e3d5b70db8
commit 6aeef95fb7
5 changed files with 23 additions and 10 deletions

View File

@ -27,7 +27,6 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import fr.neatmonster.nocheatplus.NCPAPIProvider;
import fr.neatmonster.nocheatplus.checks.CheckListener;
@ -35,6 +34,7 @@ import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.checks.moving.MovingConfig;
import fr.neatmonster.nocheatplus.checks.moving.util.MovingUtil;
import fr.neatmonster.nocheatplus.command.CommandUtil;
import fr.neatmonster.nocheatplus.compat.BridgeMisc;
import fr.neatmonster.nocheatplus.components.registry.feature.INotifyReload;
import fr.neatmonster.nocheatplus.components.registry.feature.JoinLeaveListener;
import fr.neatmonster.nocheatplus.config.ConfPaths;
@ -221,7 +221,8 @@ public class ChatListener extends CheckListener implements INotifyReload, JoinLe
if (MovingUtil.shouldCheckUntrackedLocation(player, loc)) {
final Location newTo = MovingUtil.checkUntrackedLocation(loc);
if (newTo != null) {
if (mcc.passableUntrackedCommandTryTeleport && player.teleport(newTo, TeleportCause.PLUGIN)) {
if (mcc.passableUntrackedCommandTryTeleport
&& player.teleport(newTo, BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION)) {
NCPAPIProvider.getNoCheatPlusAPI().getLogManager().info(Streams.TRACE_FILE, player.getName() + " runs the command '" + message + "' at an untracked location: " + loc + " , teleport to: " + newTo);
} else {
// TODO: Allow disabling cancel?

View File

@ -322,7 +322,8 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
useLoc.setWorld(null);
// Teleport.
data.prepareSetBack(target); // Should be enough. | new Location(target.getWorld(), target.getX(), target.getY(), target.getZ(), target.getYaw(), target.getPitch());
player.teleport(target, TeleportCause.PLUGIN);// TODO: schedule / other measures ?
// TODO: schedule / other measures ?
player.teleport(target, BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION);
}
else {
// Reset bed ...
@ -2111,7 +2112,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
final Location newTo = enforceLocation(player, player.getLocation(useLoc), data);
if (newTo != null) {
data.prepareSetBack(newTo);
player.teleport(newTo, TeleportCause.PLUGIN);
player.teleport(newTo, BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION);
}
}
if (!rem.isEmpty()) {

View File

@ -21,7 +21,6 @@ import java.util.Set;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.potion.PotionEffectType;
import fr.neatmonster.nocheatplus.NCPAPIProvider;
@ -43,6 +42,7 @@ import fr.neatmonster.nocheatplus.checks.moving.velocity.VelocityFlags;
import fr.neatmonster.nocheatplus.checks.workaround.WRPT;
import fr.neatmonster.nocheatplus.compat.Bridge1_9;
import fr.neatmonster.nocheatplus.compat.BridgeEnchant;
import fr.neatmonster.nocheatplus.compat.BridgeMisc;
import fr.neatmonster.nocheatplus.compat.blocks.changetracker.BlockChangeTracker;
import fr.neatmonster.nocheatplus.compat.blocks.changetracker.BlockChangeTracker.Direction;
import fr.neatmonster.nocheatplus.components.modifier.IAttributeAccess;
@ -1995,7 +1995,7 @@ public class SurvivalFly extends Check {
if (data.hasSetBack()) {
final Location newTo = data.getSetBack(loc);
data.prepareSetBack(newTo);
player.teleport(newTo, TeleportCause.PLUGIN);
player.teleport(newTo, BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION);
}
else {
// Solve by extra actions ? Special case (probably never happens)?

View File

@ -24,6 +24,7 @@ import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.inventory.meta.ItemMeta;
@ -51,6 +52,13 @@ public class BridgeMisc {
public static final Material FIREWORK = Material.getMaterial("FIREWORK");
/**
* Correction of position: Used for ordinary setting back. <br>
* NOTE: Currently it's not distinguished, if we do it as a proactive
* measure, or due to an actual check violation.
*/
public static final TeleportCause TELEPORT_CAUSE_CORRECTION_OF_POSITION = TeleportCause.UNKNOWN;
/**
* Return a shooter of a projectile if we get an entity, null otherwise.
*/

View File

@ -17,7 +17,6 @@ package fr.neatmonster.nocheatplus.utilities;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import fr.neatmonster.nocheatplus.NCPAPIProvider;
import fr.neatmonster.nocheatplus.checks.CheckType;
@ -26,6 +25,7 @@ import fr.neatmonster.nocheatplus.checks.moving.MovingData;
import fr.neatmonster.nocheatplus.checks.moving.model.VehicleMoveData;
import fr.neatmonster.nocheatplus.checks.moving.util.AuxMoving;
import fr.neatmonster.nocheatplus.checks.workaround.WRPT;
import fr.neatmonster.nocheatplus.compat.BridgeMisc;
import fr.neatmonster.nocheatplus.utilities.location.LocUtil;
import fr.neatmonster.nocheatplus.utilities.location.TrigUtil;
@ -69,7 +69,8 @@ public class TeleportUtil {
else if (playerIsPassenger) { // && vehicle.equals(player.getVehicle).
// Attempt to only teleport the entity first. On failure use eject.
// TODO: Probably needs a guard depending on version.
// if (vehicle.teleport(location, TeleportCause.PLUGIN)) {
// if (vehicle.teleport(location,
// BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION)) {
// // Check success.
// if (vehicle.getLocation(useLoc).equals(location) && player.equals(vehicle.getPassenger())) {
// vehicleTeleported = true;
@ -82,11 +83,13 @@ public class TeleportUtil {
if (!playerTeleported){
vehicle.eject(); // NOTE: VehicleExit fires, unknown TP fires.
// TODO: Confirm eject worked, handle if not.
vehicleTeleported = vehicle.teleport(LocUtil.clone(location), TeleportCause.PLUGIN);
vehicleTeleported = vehicle.teleport(LocUtil.clone(location),
BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION);
}
}
else if (passenger == null) {
vehicleTeleported = vehicle.teleport(location, TeleportCause.PLUGIN);
vehicleTeleported = vehicle.teleport(location,
BridgeMisc.TELEPORT_CAUSE_CORRECTION_OF_POSITION);
}
if (!playerTeleported && player.isOnline() && !player.isDead()) {
// Mask player teleport as a set-back.