From 0d3f63e8c3100ccdbfefd7ed554585b8ee152ed2 Mon Sep 17 00:00:00 2001 From: asofold Date: Sun, 17 Feb 2013 18:15:46 +0100 Subject: [PATCH] Fix interact-ray-tracing workaround. --- .../utilities/InteractRayTracing.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/NCPCompat/src/main/java/fr/neatmonster/nocheatplus/utilities/InteractRayTracing.java b/NCPCompat/src/main/java/fr/neatmonster/nocheatplus/utilities/InteractRayTracing.java index 4770ac2e..c756ee64 100644 --- a/NCPCompat/src/main/java/fr/neatmonster/nocheatplus/utilities/InteractRayTracing.java +++ b/NCPCompat/src/main/java/fr/neatmonster/nocheatplus/utilities/InteractRayTracing.java @@ -105,14 +105,23 @@ public class InteractRayTracing extends RayTracing { */ private final boolean allowsWorkaround(final int blockX, final int blockY, final int blockZ) { // TODO: This allows some bypasses for "strange" setups. + // TODO: Consider using distance to target as heuristic ? [should not get smaller !?] + final int dX = blockX - lastBx; + final int dY = blockY - lastBy; + final int dZ = blockZ - lastBz; + final double dSq = dX * dX + dY * dY + dZ * dZ; for (int i = 0; i < 6; i++){ final int[] dir = incr[i]; - final int rX = lastBx + dir[0]; - if (Math.abs(blockX - rX) > 1) continue; - final int rY = lastBy + dir[1]; - if (Math.abs(blockY - rY) > 1) continue; - final int rZ = lastBz + dir[2]; - if (Math.abs(blockZ - rZ) > 1) continue; + final int rX = blockX + dir[0]; + if (Math.abs(lastBx - rX) > 1) continue; + final int rY = blockY + dir[1]; + if (Math.abs(lastBy - rY) > 1) continue; + final int rZ = blockZ + dir[2]; + if (Math.abs(lastBz - rZ) > 1) continue; + final int dRx = rX - lastBx; + final int dRy = rY - lastBy; + final int dRz = rZ - lastBz; + if (dRx * dRx + dRy * dRy + dRz * dRz <= dSq) continue; if (!doesCollide(rX, rY, rZ)){ // NOTE: Don't check "rX == targetBx && rZ == targetBz && rY == targetBy". return true;