diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/blockplace/BlockPlaceListener.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/blockplace/BlockPlaceListener.java index 447da316..47c826e1 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/blockplace/BlockPlaceListener.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/blockplace/BlockPlaceListener.java @@ -108,12 +108,9 @@ public class BlockPlaceListener extends CheckListener { if (fastPlace.check(player, block)) cancelled = true; else{ - // Combined speed. - if (Improbable.check(player, 0.5f, System.currentTimeMillis())){ - cancelled = true; - } + // Feed the improbable. + Improbable.feed(player, 0.5f, System.currentTimeMillis()); } - } // Second, the no swing check (player doesn't swing his arm when placing a lily pad). diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/CombinedListener.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/CombinedListener.java index 4b196092..0c271020 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/CombinedListener.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/CombinedListener.java @@ -74,12 +74,6 @@ public class CombinedListener extends CheckListener { event.setCancelled(true); } - @EventHandler(priority=EventPriority.LOW) - public void onPlayerToggleSprint(final PlayerToggleSprintEvent event){ - // Check also in case of cancelled events. - if (Improbable.check(event.getPlayer(), 0.35f, System.currentTimeMillis())) event.setCancelled(true); - } - /** * A workaround for cancelled PlayerToggleSprintEvents. * @@ -93,13 +87,15 @@ public class CombinedListener extends CheckListener { // and rewards them by reducing their hunger bar as if they were walking instead of sprinting. if (event.isCancelled() && event.isSprinting()) event.setCancelled(false); + // Feed the improbable. + Improbable.feed(event.getPlayer(), 0.35f, System.currentTimeMillis()); } - @EventHandler(priority=EventPriority.LOW) + @EventHandler(priority=EventPriority.MONITOR) public void onPlayerToggleSneak(final PlayerToggleSneakEvent event){ // Check also in case of cancelled events. - // TODO: Maybe this is not good to cancel. - if (Improbable.check(event.getPlayer(), 0.35f, System.currentTimeMillis())) event.setCancelled(true); + // Feed the improbable. + Improbable.feed(event.getPlayer(), 0.35f, System.currentTimeMillis()); } @EventHandler(priority=EventPriority.LOWEST) diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/Improbable.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/Improbable.java index 32f0a387..6d0c5f04 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/Improbable.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/combined/Improbable.java @@ -26,7 +26,17 @@ public class Improbable extends Check { public static final boolean check(final Player player, final float weight, final long now){ return instance.checkImprobable(player, weight, now); } - + + /** + * Feed the check but no violations processing (convenience method). + * @param player + * @param weight + * @param now + */ + public static final void feed(final Player player, final float weight, final long now){ + CombinedData.getData(player).improbableCount.add(now, weight); + } + //////////////////////////////////// // Instance methods. /////////////////////////////////// diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java index c9c6e9ad..e6281477 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java @@ -110,11 +110,16 @@ public class FightListener extends CheckListener { // Run through the main checks. if (!cancelled && speed.isEnabled(player)){ - if (speed.check(player, now)) + if (speed.check(player, now)){ cancelled = true; - // Combined speed: - else if (Improbable.check(player, 1f, now)) - cancelled = true; + // Still feed the improbable. + Improbable.feed(player, 1f, now); + } + else if (Improbable.check(player, 1f, now)){ + // Feed improbable in case of ok-moves too. + // TODO: consider only feeding if attacking with higher average speed (!) + cancelled = true; + } } if (angle.isEnabled(player)) { diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/Reach.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/Reach.java index a44412dd..560383a2 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/Reach.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/fight/Reach.java @@ -116,9 +116,10 @@ public class Reach extends Check { data.reachLastViolationTime = System.currentTimeMillis(); } else if (lenpRel - distanceLimit * reachMod > 0){ + // Silent cancel. data.reachLastViolationTime = Math.max(data.reachLastViolationTime, System.currentTimeMillis() - cc.reachPenalty / 2); cancel = true; - Improbable.check(player, (float) (lenpRel - distanceLimit * reachMod) / 2f, System.currentTimeMillis()); + Improbable.feed(player, (float) (lenpRel - distanceLimit * reachMod) / 2f, System.currentTimeMillis()); } else{ // Player passed the check, reward him. diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java index f7b597e4..bbc8f3bf 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java @@ -172,10 +172,8 @@ public class InventoryListener extends CheckListener { // The check requested the event to be cancelled. event.setCancelled(true); } - else if (Improbable.check(player, 0.7f, System.currentTimeMillis())){ - // Combined speed: -// event.setCancelled(true); - } + // Feed the improbable. + Improbable.feed(player, 0.7f, System.currentTimeMillis()); } } }