From 6767bd7eec26ab7b8aaf4c502e60b0badb17a70e Mon Sep 17 00:00:00 2001 From: asofold Date: Fri, 21 Mar 2014 20:42:32 +0100 Subject: [PATCH] Ensure no fall distance remains for leaving players who could fly. --- .../fr/neatmonster/nocheatplus/checks/moving/NoFall.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/NoFall.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/NoFall.java index 2d2e26d8..9dfc9e5b 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/NoFall.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/NoFall.java @@ -211,14 +211,17 @@ public class NoFall extends Check { final MovingData data = MovingData.getData(player); final float fallDistance = player.getFallDistance(); if (data.noFallFallDistance - fallDistance > 0.0) { + final double playerY = player.getLocation(useLoc).getY(); + useLoc.setWorld(null); if (player.getAllowFlight() || player.isFlying() || player.getGameMode() == GameMode.CREATIVE) { // Forestall potential issues with flying plugins. player.setFallDistance(0f); + data.noFallFallDistance = 0f; + data.noFallMaxY = playerY; } else { // Might use tolerance, might log, might use method (compare: MovingListener.onEntityDamage). // Might consider triggering violations here as well. - final float yDiff = (float) (data.noFallMaxY - player.getLocation(useLoc).getY()); - useLoc.setWorld(null); + final float yDiff = (float) (data.noFallMaxY - playerY); final float maxDist = Math.max(yDiff, Math.max(data.noFallFallDistance, fallDistance)); player.setFallDistance(maxDist); }