package com.entryrise.afkguard.antiafk; import java.util.Map; import java.util.WeakHashMap; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import com.entryrise.afkguard.Main; import lombok.Getter; public class AFKManager { /* * Using a weak hashmap allows the values to disappear on player quit. May be * changed to UUID if we notice bots use this to bypass checks by constantly * rejoining. */ @Getter private static Map players = new WeakHashMap<>(); /* * Increment player score in the hashmap. */ public static void Enabler(boolean reload) { if (!reload) { runTask(); } Bukkit.getLogger().info(" §e[§a✔§e] §fAFK Manager"); } private static void runTask() { int timer = Main.config.getInt("settings.afk-detection.counter.timer"); Bukkit.getScheduler().runTaskTimer(Main.p, () -> { for(Player p : Bukkit.getOnlinePlayers()) { if (p.hasPermission("afkguard.bypass.admin")) { continue; } players.getOrDefault(p, new AFKPlayer()).isAfk(p); } }, timer, timer); } public static void incrementPlayer(Player p, double d) { players.compute(p, (k, v) -> { v = v == null ? new AFKPlayer() : v; v.addScore(d); return v; }); } public static void setScore(Player p, int score) { if (score < 0) { return; } players.compute(p, (k, v) -> { v = v == null ? new AFKPlayer() : v; v.setAfkcycles(score); return v; }); } public static int getScore(Player p) { return players.getOrDefault(p, new AFKPlayer()).getAfkcycles(); } }