diff options
Diffstat (limited to 'EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/SpeedCheck.java')
-rw-r--r-- | EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/SpeedCheck.java | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/SpeedCheck.java b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/SpeedCheck.java new file mode 100644 index 000000000..baa7db9c5 --- /dev/null +++ b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/SpeedCheck.java @@ -0,0 +1,81 @@ +package com.earth2me.essentials.anticheat.checks.fight; + +import com.earth2me.essentials.anticheat.NoCheat; +import com.earth2me.essentials.anticheat.NoCheatPlayer; +import com.earth2me.essentials.anticheat.actions.ParameterName; +import com.earth2me.essentials.anticheat.config.Permissions; +import com.earth2me.essentials.anticheat.data.Statistics.Id; +import java.util.Locale; + + +/** + * The speed check will find out if a player interacts with something that's too far away + * + */ +public class SpeedCheck extends FightCheck +{ + public SpeedCheck(NoCheat plugin) + { + super(plugin, "fight.speed", Permissions.FIGHT_SPEED); + } + + public boolean check(NoCheatPlayer player, FightData data, FightConfig cc) + { + + boolean cancel = false; + + final long time = System.currentTimeMillis(); + + // Check if one second has passed and reset counters and vl in that case + if (data.speedTime + 1000L <= time) + { + data.speedTime = time; + data.speedAttackCount = 0; + data.speedVL = 0; + } + + // count the attack + data.speedAttackCount++; + + // too many attacks + if (data.speedAttackCount > cc.speedAttackLimit) + { + // if there was lag, don't count it towards statistics and vl + if (!plugin.skipCheck()) + { + data.speedVL += 1; + incrementStatistics(player, Id.FI_SPEED, 1); + } + + // Execute whatever actions are associated with this check and the + // violation level and find out if we should cancel the event + cancel = executeActions(player, cc.speedActions, data.speedVL); + } + + return cancel; + } + + @Override + public boolean isEnabled(FightConfig cc) + { + return cc.speedCheck; + } + + @Override + public String getParameter(ParameterName wildcard, NoCheatPlayer player) + { + + if (wildcard == ParameterName.VIOLATIONS) + { + return String.format(Locale.US, "%d", getData(player).speedVL); + } + else if (wildcard == ParameterName.LIMIT) + { + return String.format(Locale.US, "%d", getConfig(player.getConfigurationStore()).speedAttackLimit); + } + else + { + return super.getParameter(wildcard, player); + } + } +} |