Use the same Location instance for passable and nofall.

This commit is contained in:
asofold 2013-03-09 19:42:16 +01:00
parent dfc8e7c5a7
commit 0c59487a0a
3 changed files with 13 additions and 7 deletions

View File

@ -560,13 +560,17 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
}
}
// The players location.
// TODO: Change to getLocation(moveInfo.loc) once 1.4.5 support is dropped.
final Location loc = (cc.noFallCheck || cc.passableCheck) ? player.getLocation() : null;
Location newTo = null;
// Check passable first to prevent set-back override.
// TODO: Redesign to set set-backs later (queue + invalidate).
if (newTo == null && cc.passableCheck && !NCPExemptionManager.isExempted(player, CheckType.MOVING_PASSABLE) && !player.hasPermission(Permissions.MOVING_PASSABLE)) {
// Passable is checked first to get the original set-back locations from the other checks, if needed.
newTo = passable.check(player, pFrom, pTo, data, cc);
newTo = passable.check(player, loc, pFrom, pTo, data, cc);
}
// Check which fly check to check.
@ -612,12 +616,12 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
}
// NoFall.
if (checkNf){
noFall.check(player, pFrom, pTo, data, cc);
noFall.check(player, loc, pFrom, pTo, data, cc);
}
}
else{
if (checkNf && cc.sfFallDamage){
noFall.checkDamage(player, data, Math.min(from.getY(), to.getY()));
noFall.checkDamage(player, data, Math.min(Math.min(from.getY(), to.getY()), loc.getY()));
}
}
}
@ -652,6 +656,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// TODO: data.sfHoverTicks ?
// Set new to-location.
// TODO: Clone here for the case of using loc with loc = player.getLocation(moveInfo.loc).
event.setTo(newTo);
// Remember where we send the player to.

View File

@ -1,6 +1,7 @@
package fr.neatmonster.nocheatplus.checks.moving;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
@ -86,7 +87,7 @@ public class NoFall extends Check {
* @param to
* the to
*/
public void check(final Player player, final PlayerLocation from, final PlayerLocation to, final MovingData data, final MovingConfig cc) {
public void check(final Player player, final Location loc, final PlayerLocation from, final PlayerLocation to, final MovingData data, final MovingConfig cc) {
final double fromY = from.getY();
final double toY = to.getY();
@ -115,7 +116,7 @@ public class NoFall extends Check {
// TODO: early returns (...)
final double pY = player.getLocation().getY();
final double pY = loc.getY();
final double minY = Math.min(fromY, Math.min(toY, pY));
if (fromReset){

View File

@ -22,7 +22,7 @@ public class Passable extends Check {
rayTracing.setMaxSteps(60); // TODO: Configurable ?
}
public Location check(final Player player, final PlayerLocation from, final PlayerLocation to, final MovingData data, final MovingConfig cc)
public Location check(final Player player, Location loc, final PlayerLocation from, final PlayerLocation to, final MovingData data, final MovingConfig cc)
{
// Simple check (only from, to, player.getLocation).
@ -51,7 +51,7 @@ public class Passable extends Check {
// Check the players location if different from others.
// (It provides a better set-back for some exploits.)
Location loc = player.getLocation();
// Location loc = player.getLocation();
final int lbX = loc.getBlockX();
final int lbY = loc.getBlockY();
final int lbZ = loc.getBlockZ();