From 2e11cdac0b0ef029be48161ebfa4183725fbbe57 Mon Sep 17 00:00:00 2001 From: asofold Date: Sun, 29 Nov 2015 13:04:22 +0100 Subject: [PATCH] Confine the bunnyhop envelopy by y-Distance further. * Below 1.7 allow ground-to-ground hop with moderate speed. Might be there is more speed possible, shortly tested on 1.6.4. * From 1.7.10 on, hitting the jump envelope or having the head obstructed is demanded. --- .../checks/moving/MovingConfig.java | 10 ++++++--- .../checks/moving/SurvivalFly.java | 21 +++++++++++++------ .../nocheatplus/config/ConfPaths.java | 1 + 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingConfig.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingConfig.java index 78b20f20..be72a931 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingConfig.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingConfig.java @@ -82,7 +82,7 @@ public class MovingConfig extends ACheckConfig { public static final double Y_ON_GROUND_MAX = 0.0626; // TODO: Model workarounds as lost ground, use Y_ON_GROUND_MIN? public static final double Y_ON_GROUND_DEFAULT = 0.016; // Jump upwards, while placing blocks. -// public static final double Y_ON_GROUND_DEFAULT = 0.029; // Bounce off slime blocks. + // public static final double Y_ON_GROUND_DEFAULT = 0.029; // Bounce off slime blocks. public final boolean ignoreCreative; @@ -137,6 +137,11 @@ public class MovingConfig extends ACheckConfig { public final int survivalFlySwimmingSpeed; public final int survivalFlyWalkingSpeed; public final boolean survivalFlyCobwebHack; + /** + * If true, will allow moderate bunny hop without lift off. Applies for + * normal speed on 1.6.4 and probably below. + */ + public final boolean sfGroundHop; public final boolean survivalFlyAccountingH; public final boolean survivalFlyAccountingV; public final boolean sfSetBackPolicyVoid; @@ -177,7 +182,6 @@ public class MovingConfig extends ACheckConfig { public final int traceSize; public final double traceMergeDist; - /** * Instantiates a new moving configuration. * @@ -236,6 +240,7 @@ public class MovingConfig extends ACheckConfig { survivalFlySwimmingSpeed = config.getInt(ConfPaths.MOVING_SURVIVALFLY_SWIMMINGSPEED, 100); survivalFlyWalkingSpeed = config.getInt(ConfPaths.MOVING_SURVIVALFLY_WALKINGSPEED, 100); survivalFlyCobwebHack = config.getBoolean(ConfPaths.MOVING_SURVIVALFLY_COBWEBHACK, true); + sfGroundHop = config.getBoolean(ConfPaths.MOVING_SURVIVALFLY_GROUNDHOP, ServerVersion.compareMinecraftVersion("1.7") == -1); survivalFlyAccountingH = config.getBoolean(ConfPaths.MOVING_SURVIVALFLY_EXTENDED_HACC, false); survivalFlyAccountingV = config.getBoolean(ConfPaths.MOVING_SURVIVALFLY_EXTENDED_VACC); sfSetBackPolicyFallDamage = config.getBoolean(ConfPaths.MOVING_SURVIVALFLY_SETBACKPOLICY_FALLDAMAGE); @@ -291,7 +296,6 @@ public class MovingConfig extends ACheckConfig { } - /* (non-Javadoc) * @see fr.neatmonster.nocheatplus.checks.ICheckConfig#isEnabled(fr.neatmonster.nocheatplus.checks.CheckType) */ diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/SurvivalFly.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/SurvivalFly.java index 22cf1307..26458e45 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/SurvivalFly.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/SurvivalFly.java @@ -1406,7 +1406,7 @@ public class SurvivalFly extends Check { // TODO: Would quick returns make sense for hDistanceAfterFailure == 0.0? // Test bunny early, because it applies often and destroys as little as possible. - hDistanceAboveLimit = bunnyHop(from, to, hDistance, hAllowedDistance, hDistanceAboveLimit, yDistance, sprinting, data); + hDistanceAboveLimit = bunnyHop(from, to, hDistance, hAllowedDistance, hDistanceAboveLimit, yDistance, sprinting, data, cc); // After failure permission checks ( + speed modifier + sneaking + blocking + speeding) and velocity (!). if (hDistanceAboveLimit > 0.0 && !skipPermChecks) { @@ -1434,7 +1434,7 @@ public class SurvivalFly extends Check { // After failure bunny (2nd). if (hDistanceAboveLimit > 0) { // (Could distinguish tags from above call). - hDistanceAboveLimit = bunnyHop(from, to, hDistance, hAllowedDistance, hDistanceAboveLimit, yDistance, sprinting, data); + hDistanceAboveLimit = bunnyHop(from, to, hDistance, hAllowedDistance, hDistanceAboveLimit, yDistance, sprinting, data, cc); } // Horizontal buffer. @@ -1468,7 +1468,7 @@ public class SurvivalFly extends Check { * @param data * @return hDistanceAboveLimit */ - private double bunnyHop(final PlayerLocation from, final PlayerLocation to, final double hDistance, final double hAllowedDistance, double hDistanceAboveLimit, final double yDistance, final boolean sprinting, final MovingData data) { + private double bunnyHop(final PlayerLocation from, final PlayerLocation to, final double hDistance, final double hAllowedDistance, double hDistanceAboveLimit, final double yDistance, final boolean sprinting, final MovingData data, final MovingConfig cc) { // Check "bunny fly" here, to not fall over sprint resetting on the way. boolean allowHop = true; boolean double_bunny = false; @@ -1549,10 +1549,19 @@ public class SurvivalFly extends Check { // TODO: Test bunny spike over all sorts of speeds + attributes. // TODO: Allow slightly higher speed on lost ground? // TODO: LiftOffEnvelope.allowBunny ? - if (data.liftOffEnvelope == LiftOffEnvelope.NORMAL // && yDistance >= 0.4 + if (data.liftOffEnvelope == LiftOffEnvelope.NORMAL && !data.sfLowJump || data.sfNoLowJump - && (data.sfJumpPhase == 0 && from.isOnGround() || data.sfJumpPhase <= 1 && data.noFallAssumeGround || double_bunny) - && !from.isResetCond() && !to.isResetCond() // TODO: !to.isResetCond() should be reviewed. + // Y-distance envelope. + && ( + yDistance > 0.0 + && yDistance > data.liftOffEnvelope.getMaxJumpGain(data.jumpAmplifier) - GRAVITY_SPAN + || yDistance > 0.0 && from.isHeadObstructed() + || cc.sfGroundHop && yDistance >= 0 + && hAllowedDistance > 0.0 && hDistance / hAllowedDistance < 1.35 + ) + // Bad auto indent. + && (data.sfJumpPhase == 0 && from.isOnGround() || data.sfJumpPhase <= 1 && data.noFallAssumeGround || double_bunny) + && !from.isResetCond() && !to.isResetCond() // TODO: !to.isResetCond() should be reviewed. ) { // TODO: Jump effect might allow more strictness. // TODO: Expected minimum gain depends on last speed (!). diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java index 295d8930..3e1a6c0c 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java @@ -562,6 +562,7 @@ public abstract class ConfPaths { public static final String MOVING_SURVIVALFLY_SWIMMINGSPEED = MOVING_SURVIVALFLY + "swimmingspeed"; public static final String MOVING_SURVIVALFLY_WALKINGSPEED = MOVING_SURVIVALFLY + "walkingspeed"; public static final String MOVING_SURVIVALFLY_COBWEBHACK = MOVING_SURVIVALFLY + "cobwebhack"; + public static final String MOVING_SURVIVALFLY_GROUNDHOP = MOVING_SURVIVALFLY + "groundhop"; private static final String MOVING_SURVIVALFLY_EXTENDED = MOVING_SURVIVALFLY + "extended."; public static final String MOVING_SURVIVALFLY_EXTENDED_HACC = MOVING_SURVIVALFLY_EXTENDED + "horizontal-accounting"; public static final String MOVING_SURVIVALFLY_EXTENDED_VACC = MOVING_SURVIVALFLY_EXTENDED + "vertical-accounting";