AFKGuard allows you to detect even the most tricky AFK machines and cheats, by being fully configurable and accessible!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.5 KiB

3 years ago
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<Player, AFKPlayer> 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();
}
}