diff options
Diffstat (limited to 'EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/InstanthealCheck.java')
-rw-r--r-- | EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/InstanthealCheck.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/InstanthealCheck.java b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/InstanthealCheck.java new file mode 100644 index 000000000..33fcbfd3a --- /dev/null +++ b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/checks/fight/InstanthealCheck.java @@ -0,0 +1,94 @@ +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; +import java.util.Locale; + + +/** + * The instantheal Check should find out if a player tried to artificially accellerate the health regeneration by food + * + */ +public class InstanthealCheck extends FightCheck +{ + public InstanthealCheck(NoCheat plugin) + { + super(plugin, "fight.instantheal", Permissions.FIGHT_INSTANTHEAL); + } + + @Override + public boolean check(NoCheatPlayer player, FightData data, FightConfig cc) + { + + boolean cancelled = false; + + long time = System.currentTimeMillis(); + + // security check if system time ran backwards + if (data.instanthealLastRegenTime > time) + { + data.instanthealLastRegenTime = 0; + return false; + } + + long difference = time - (data.instanthealLastRegenTime + 3500L); + + data.instanthealBuffer += difference; + + if (data.instanthealBuffer < 0) + { + // Buffer has been fully consumed + // Increase vl and statistics + double vl = data.instanthealVL -= data.instanthealBuffer / 1000; + incrementStatistics(player, Statistics.Id.FI_INSTANTHEAL, vl); + + data.instanthealBuffer = 0; + + // Execute whatever actions are associated with this check and the + // violation level and find out if we should cancel the event + cancelled = executeActions(player, cc.instanthealActions, data.instanthealVL); + } + else + { + // vl gets decreased + data.instanthealVL *= 0.9; + } + + // max 2 seconds buffer + if (data.instanthealBuffer > 2000L) + { + data.instanthealBuffer = 2000L; + } + + if (!cancelled) + { + // New reference time + data.instanthealLastRegenTime = time; + } + + return cancelled; + } + + @Override + public boolean isEnabled(FightConfig cc) + { + return cc.instanthealCheck; + } + + @Override + public String getParameter(ParameterName wildcard, NoCheatPlayer player) + { + + if (wildcard == ParameterName.VIOLATIONS) + { + return String.format(Locale.US, "%d", (int)getData(player).instanthealVL); + } + else + { + return super.getParameter(wildcard, player); + } + } +} |