package com.entryrise.afkguard.antiafk; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import com.entryrise.afkguard.Main; import com.entryrise.afkguard.utils.MathUtils; import lombok.Getter; import lombok.Setter; public class AFKPlayer { private double score; @Getter @Setter private int afkcycles; public AFKPlayer() { score = Main.config.getInt("settings.afk-detection.counter.start-score"); afkcycles = 0; } /* * Returns -1 = Decrease Returns +1 = Increase Returns 0 = Stays still. (No * usage yet) * * It also sets the afkcycles and makes sure it doesn't go under 0. */ private int calculateCycles(Player p) { afkcycles = score > 0 ? afkcycles + 1 : Math.max(0, afkcycles - Main.config.getInt("settings.afk-detection.counter.decrease-amount")); return score > 0 ? 1 : -1; } public void addScore(double increment) { score -= increment; } public boolean isAfk(Player p) { // If the player was found to be AFK, it means there was a change in cyclecount. // // This means we should check for actions to run. if (calculateCycles(p) == 1) { for (String stg : Main.config.getStringList("settings.afk-detection.punishment-table." + afkcycles)) { String[] result = stg.split(":"); int reset = MathUtils.isInt(result[result.length - 1]) ? Integer.valueOf(result[result.length - 1]) : -1; if (result[0].equalsIgnoreCase("cmd") && result.length >= 2 && !p.hasPermission("afkguard.bypass.cmd")) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), result[1].replace("%player%", p.getName())); AFKManager.setScore(p, reset); } else if (result[0].equalsIgnoreCase("payment") && !p.hasPermission("afkguard.bypass.payment")) { double payment = MathUtils.isInt(result[1]) ? Integer.valueOf(result[1]) : 0; Main.penalizePlayer(p, payment, reset); } else if (result[0].equalsIgnoreCase("captcha") && !p.hasPermission("afkguard.bypass.captcha")) { Main.openCapcha(p, reset); } } } score = Main.config.getDouble("settings.afk-detection.counter.start-score"); return false; } }