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.
74 lines
1.5 KiB
74 lines
1.5 KiB
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();
|
|
}
|
|
}
|