From 9c29d32a98bb78dbffe07a53100d2252e4aacca3 Mon Sep 17 00:00:00 2001 From: asofold Date: Sat, 1 Mar 2014 15:23:28 +0100 Subject: [PATCH] Reviewing several places for use of Double.MAX_VALUE and similar. (No game-changing stuff.) --- .../checks/blockbreak/BlockBreakListener.java | 46 ++++++++++++------- .../nocheatplus/checks/fight/FightData.java | 10 +++- .../checks/fight/FightListener.java | 5 +- .../checks/moving/MovingListener.java | 2 +- .../checks/moving/SurvivalFly.java | 25 +++++----- .../nocheatplus/config/DefaultConfig.java | 2 +- 6 files changed, 56 insertions(+), 34 deletions(-) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockbreak/BlockBreakListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockbreak/BlockBreakListener.java index a1d191e4..752d26cc 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockbreak/BlockBreakListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockbreak/BlockBreakListener.java @@ -67,10 +67,12 @@ public class BlockBreakListener extends CheckListener { final Player player = event.getPlayer(); // Illegal enchantments hotfix check. - if (Items.checkIllegalEnchantments(player, player.getItemInHand())) event.setCancelled(true); + if (Items.checkIllegalEnchantments(player, player.getItemInHand())) { + event.setCancelled(true); + } // Cancelled events only leads to resetting insta break. - if (event.isCancelled()){ + if (event.isCancelled()) { isInstaBreak = false; return; } @@ -92,38 +94,45 @@ public class BlockBreakListener extends CheckListener { final GameMode gameMode = player.getGameMode(); // Has the player broken a block that was not damaged before? - if (wrongBlock.isEnabled(player) && wrongBlock.check(player, block, cc, data, isInstaBreak)) + if (wrongBlock.isEnabled(player) && wrongBlock.check(player, block, cc, data, isInstaBreak)) { cancelled = true; + } // Has the player broken more blocks per second than allowed? - if (!cancelled && frequency.isEnabled(player) && frequency.check(player, cc, data)) + if (!cancelled && frequency.isEnabled(player) && frequency.check(player, cc, data)) { cancelled = true; + } // Has the player broken blocks faster than possible? - if (!cancelled && gameMode != GameMode.CREATIVE && fastBreak.isEnabled(player) && fastBreak.check(player, block, isInstaBreak, cc, data)) - cancelled = true; + if (!cancelled && gameMode != GameMode.CREATIVE && fastBreak.isEnabled(player) && fastBreak.check(player, block, isInstaBreak, cc, data)) { + cancelled = true; + } // Did the arm of the player move before breaking this block? - if (!cancelled && noSwing.isEnabled(player) && noSwing.check(player, data)) - cancelled = true; + if (!cancelled && noSwing.isEnabled(player) && noSwing.check(player, data)) { + cancelled = true; + } // Is the block really in reach distance? - if (!cancelled && reach.isEnabled(player) && reach.check(player, block, data)) - cancelled = true; + if (!cancelled && reach.isEnabled(player) && reach.check(player, block, data)) { + cancelled = true; + } // Did the player look at the block at all? - if (!cancelled && direction.isEnabled(player) && direction.check(player, block, data)) - cancelled = true; + if (!cancelled && direction.isEnabled(player) && direction.check(player, block, data)) { + cancelled = true; + } // Destroying liquid blocks. if (!cancelled && BlockProperties.isLiquid(block.getTypeId()) && !player.hasPermission(Permissions.BLOCKBREAK_BREAK_LIQUID) && !NCPExemptionManager.isExempted(player, CheckType.BLOCKBREAK_BREAK)){ cancelled = true; } - // At least one check failed and demanded to cancel the event. - if (cancelled){ + // On cancel... + if (cancelled) { event.setCancelled(cancelled); // Reset damage position: + // TODO: Review this (!), check if set at all !? data.clickedX = block.getX(); data.clickedY = block.getY(); data.clickedZ = block.getZ(); @@ -133,11 +142,12 @@ public class BlockBreakListener extends CheckListener { // data.clickedX = Integer.MAX_VALUE; } - if (isInstaBreak){ + if (isInstaBreak) { data.wasInstaBreak = now; } - else + else { data.wasInstaBreak = 0; + } // Adjust data. data.fastBreakBreakTime = now; @@ -214,7 +224,9 @@ public class BlockBreakListener extends CheckListener { } else if (tick < data.clickedTick) { // Update. } else if (data.fastBreakBreakTime < data.fastBreakfirstDamage && data.clickedX == block.getX() && data.clickedZ == block.getZ() && data.clickedY == block.getY()){ - if (tick - data.clickedTick <= 1 ) return; + if (tick - data.clickedTick <= 1 ) { + return; + } } // (Always set, the interact event only fires once: the first time.) // Only record first damage: diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightData.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightData.java index f91149bf..a35d9fd3 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightData.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightData.java @@ -131,7 +131,7 @@ public class FightData extends ACheckData { // Shared public String lastWorld = ""; public int lastAttackTick = 0; - public double lastAttackedX = Integer.MAX_VALUE; + public double lastAttackedX = Double.MAX_VALUE; public double lastAttackedY; public double lastAttackedZ; @@ -197,4 +197,12 @@ public class FightData extends ACheckData { // Start with full fast-heal buffer. fastHealBuffer = cc.fastHealBuffer; } + + public void onWorldChange() { + angleHits.clear(); + lastAttackedX = Double.MAX_VALUE; + lastAttackTick = 0; + lastWorld = ""; + } + } diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java index 6de2504c..12a33089 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java @@ -114,7 +114,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{ final long msAge; // Milliseconds the ticks actually took. final double normalizedMove; // Blocks per second. // TODO: relative distance (player - target)! - if (data.lastAttackedX == Integer.MAX_VALUE || tick < data.lastAttackTick || worldChanged || tick - data.lastAttackTick > 20){ + if (data.lastAttackedX == Double.MAX_VALUE || tick < data.lastAttackTick || worldChanged || tick - data.lastAttackTick > 20){ // TODO: 20 ? tickAge = 0; targetMove = 0.0; @@ -460,8 +460,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{ @EventHandler(priority = EventPriority.MONITOR) public void onPlayerChangedWorld(final PlayerChangedWorldEvent event){ - final FightData data = FightData.getData(event.getPlayer()); - data.angleHits.clear(); + FightData.getData(event.getPlayer()).onWorldChange(); } @EventHandler(ignoreCancelled = false, priority = EventPriority.MONITOR) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingListener.java index 2aea35d2..1a3827fd 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/moving/MovingListener.java @@ -1325,7 +1325,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo loc = vLoc; // if (data.vehicleConsistency != MoveConsistency.INCONSISTENT) { final Location oldLoc = new Location(pLoc.getWorld(), data.toX, data.toY, data.toZ); - if (MoveConsistency.getConsistency(oldLoc, null, pLoc) != MoveConsistency.INCONSISTENT) { + if (data.toX != Double.MAX_VALUE && MoveConsistency.getConsistency(oldLoc, null, pLoc) != MoveConsistency.INCONSISTENT) { loc = oldLoc; } } 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 375672c4..be983b91 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 @@ -432,7 +432,7 @@ public class SurvivalFly extends Check { } // Invalidation of vertical velocity. - if (data.verticalVelocityUsed > cc.velocityGraceTicks && yDistance <= 0 && data.sfLastYDist > 0) { + if (data.verticalVelocityUsed > cc.velocityGraceTicks && yDistance <= 0 && data.sfLastYDist > 0 && data.sfLastYDist != Double.MAX_VALUE) { // data.verticalFreedom = 0; // TODO: <- why? data.verticalVelocityCounter = 0; data.verticalVelocity = 0; @@ -641,7 +641,7 @@ public class SurvivalFly extends Check { if (cc.survivalFlyAccountingV) { // Currently only for "air" phases. // Vertical. - if (yDirChange && data.sfLastYDist > 0) { + if (yDirChange && data.sfLastYDist > 0) { // (Double.MAX_VALUE is checked above.) // Change to descending phase. data.vDistAcc.clear(); // Allow adding 0. @@ -723,6 +723,7 @@ public class SurvivalFly extends Check { /** * Check on change of y direction. + *
Note: data.sfLastYDist must not be Double.MAX_VALUE when calling this. * @param yDistance * @param vDistanceAboveLimit * @return vDistanceAboveLimit @@ -741,7 +742,9 @@ public class SurvivalFly extends Check { vDistanceAboveLimit = Math.max(vDistanceAboveLimit, Math.abs(yDistance)); tags.add("ychincfly"); } - else tags.add("ychincair"); + else { + tags.add("ychincair"); + } } } else{ @@ -873,7 +876,7 @@ public class SurvivalFly extends Check { allowHop = false; // Magic! // 2x horizontal speed increase detection. - if (hDistance - data.sfLastHDist >= walkSpeed * 0.5 && data.bunnyhopDelay == bunnyHopMax - 1) { + if (data.sfLastHDist != Double.MAX_VALUE && hDistance - data.sfLastHDist >= walkSpeed * 0.5 && data.bunnyhopDelay == bunnyHopMax - 1) { if (data.sfLastYDist == 0.0 && (data.fromWasReset || data.toWasReset) && yDistance >= 0.4) { // TODO: Confine to last was hop (according to so far input on this topic). tags.add(DOUBLE_BUNNY); @@ -964,7 +967,7 @@ public class SurvivalFly extends Check { // Check workarounds. if (yDistance <= 0.5) { // TODO: mediumLiftOff: refine conditions (general) , to should be near water level. - if (data.mediumLiftOff == MediumLiftOff.GROUND && !BlockProperties.isLiquid(from.getTypeIdAbove()) || !to.isInLiquid() || (toOnGround || data.sfLastYDist - yDistance >= 0.010 || to.isAboveStairs())) { + if (data.mediumLiftOff == MediumLiftOff.GROUND && !BlockProperties.isLiquid(from.getTypeIdAbove()) || !to.isInLiquid() || (toOnGround || data.sfLastYDist != Double.MAX_VALUE && data.sfLastYDist - yDistance >= 0.010 || to.isAboveStairs())) { vAllowedDistance = walkSpeed * modSwim + 0.5; vDistanceAboveLimit = yDistance - vAllowedDistance; } @@ -1088,7 +1091,7 @@ public class SurvivalFly extends Check { // Half block step up. if (yDistance <= 0.5 && hDistance < 0.5 && setBackYDistance <= 1.3 + 0.2 * data.jumpAmplifier && to.isOnGround()) { - if (data.sfLastYDist < 0 || from.isOnGround(0.5 - Math.abs(yDistance))) { + if (data.sfLastYDist < 0.0 || from.isOnGround(0.5 - Math.abs(yDistance))) { return applyLostGround(player, from, true, data, "step"); } // else data.stats.addStats(data.stats.getId("sfLostGround_" + "step", true), 0); @@ -1100,9 +1103,9 @@ public class SurvivalFly extends Check { // TODO: Check use of jump-amplifier. // TODO: Might check fall distance. // && data.sfJumpPhase > 3 <- Seems to be a problem with cake on a block + jump over both mini edges (...). - if (data.fromX != Double.MAX_VALUE && yDistance > 0 && data.sfLastYDist < 0 && !to.isOnGround()) { + if (data.fromX != Double.MAX_VALUE && yDistance > 0 && data.sfLastYDist < 0.0 && !to.isOnGround()) { // TODO: Check if last-y-dist or sprinting should be considered. - if (setBackYDistance > 0D && setBackYDistance <= 1.5D + 0.2 * data.jumpAmplifier || setBackYDistance < 0 && Math.abs(setBackYDistance) < 3.0) { + if (setBackYDistance > 0.0 && setBackYDistance <= 1.5D + 0.2 * data.jumpAmplifier || setBackYDistance < 0.0 && Math.abs(setBackYDistance) < 3.0) { // Interpolate from last to-coordinates to the from // coordinates (with some safe-guard). final double dX = from.getX() - data.fromX; @@ -1155,7 +1158,7 @@ public class SurvivalFly extends Check { // TODO: <= 7 might work with speed II, not sure with above. // TODO: account for speed/sprint // TODO: account for half steps !? - if (from.isOnGround(0.6, 0.4, 0, 0L) ) { + if (from.isOnGround(0.6, 0.4, 0.0, 0L) ) { // TODO: further narrow down bounds ? // Temporary "fix". return applyLostGround(player, from, true, data, "pyramid"); @@ -1164,7 +1167,7 @@ public class SurvivalFly extends Check { } // Check for jumping up strange blocks like flower pots on top of other blocks. - if (yDistance == 0 && data.sfLastYDist > 0 && data.sfLastYDist < 0.25 && data.sfJumpPhase <= 6 + data.jumpAmplifier * 3 && setBackYDistance > 1.0 && setBackYDistance < 1.5 + 0.2 * data.jumpAmplifier && !to.isOnGround()) { + if (yDistance == 0.0 && data.sfLastYDist > 0.0 && data.sfLastYDist < 0.25 && data.sfJumpPhase <= 6 + data.jumpAmplifier * 3.0 && setBackYDistance > 1.0 && setBackYDistance < 1.5 + 0.2 * data.jumpAmplifier && !to.isOnGround()) { // TODO: confine by block types ? if (from.isOnGround(0.25, 0.4, 0, 0L) ) { // Temporary "fix". @@ -1174,7 +1177,7 @@ public class SurvivalFly extends Check { } } // Lost ground while falling onto/over edges of blocks. - if (yDistance < 0 && hDistance <= 0.5 && data.sfLastYDist < 0 && yDistance > data.sfLastYDist && !to.isOnGround()) { + if (yDistance < 0 && hDistance <= 0.5 && data.sfLastYDist < 0.0 && yDistance > data.sfLastYDist && !to.isOnGround()) { // TODO: Should this be an extra lost-ground(to) check, setting toOnGround [for no-fall no difference]? // TODO: yDistance <= 0 might be better. // Also clear accounting data. diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java index e4f14070..58756fc1 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java @@ -407,7 +407,7 @@ public class DefaultConfig extends ConfigFile { set(ConfPaths.MOVING_TEMPKICKILLEGAL, true); set(ConfPaths.MOVING_LOADCHUNKS_JOIN, true); set(ConfPaths.MOVING_SPRINTINGGRACE, 2.0); - set(ConfPaths.MOVING_ASSUMESPRINT, false); + set(ConfPaths.MOVING_ASSUMESPRINT, true); set(ConfPaths.MOVING_SPEEDGRACE, 4.0); // TODO: An extra file might suit these.