Use a defensive method for yaw difference for the angle check.

This commit is contained in:
asofold 2012-12-29 16:47:03 +01:00
parent 7f17420606
commit 05c7699937
2 changed files with 21 additions and 2 deletions

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.checks.Check;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.utilities.CheckUtils;
import fr.neatmonster.nocheatplus.utilities.LagMeasureTask;
/*
@ -71,6 +72,7 @@ public class Angle extends Check {
// Browse the locations of the map.
long previousTime = 0L;
// TODO: Don't store locations, but yaws ?
Location previousLocation = null;
for (final long time : data.angleHits.descendingKeySet()) {
final Location location = data.angleHits.get(time);
@ -82,7 +84,7 @@ public class Angle extends Check {
// Calculate the time elapsed between the two hits.
deltaTime += previousTime - time;
// Calculate the difference of the yaw between the two locations.
final float dYaw = (previousLocation.getYaw() - location.getYaw()) % 180;
final float dYaw = CheckUtils.yawDiff(previousLocation.getYaw(), location.getYaw());
deltaYaw += Math.abs(dYaw);
}
// Remember the current time and location.

View File

@ -16,7 +16,7 @@ import org.bukkit.util.Vector;
import fr.neatmonster.nocheatplus.NoCheatPlus;
/**
* Random auxiliary gear, some might have general quality.
* Random auxiliary gear, some might have general quality. Contents are likely to get moved to other classes.
*/
public class CheckUtils {
@ -319,6 +319,23 @@ public class CheckUtils {
else return diff;
}
/**
* Yaw (angle in grad) difference. This ensures inputs are interpreted correctly (for 360 degree offsets).
* @param fromYaw
* @param toYaw
* @return Angle difference to get from fromYaw to toYaw. Result is in [-180, 180].
*/
public static final float yawDiff(float fromYaw, float toYaw){
if (fromYaw <= -360f) fromYaw = -((-fromYaw) % 360f);
else if (fromYaw >= 360f) fromYaw = fromYaw % 360f;
if (toYaw <= -360f) toYaw = -((-toYaw) % 360f);
else if (toYaw >= 360f) toYaw = toYaw % 360f;
float yawDiff = toYaw - fromYaw;
if (yawDiff < -180f) yawDiff += 360f;
else if (yawDiff > 180f) yawDiff -= 360f;
return yawDiff;
}
/**
* @deprecated Use instead: LogUtil.logSevere
* @param msg