changed afk timings map and time limit

This commit is contained in:
Lars Neuhaus 2024-12-01 21:40:52 +01:00
parent a5cdb93f1b
commit 28b9b84e07

View File

@ -13,13 +13,12 @@ import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.List; import java.util.*;
import java.util.WeakHashMap;
public class AfkTag extends Appliance implements DisplayName.DisplayNamed { public class AfkTag extends Appliance implements DisplayName.DisplayNamed {
private final WeakHashMap<Player, Long> afkTimings = new WeakHashMap<>(); private final HashMap<UUID, Long> afkTimings = new HashMap<>();
private static final int updateIntervalSeconds = 30; private static final int updateIntervalSeconds = 30;
private static final int afkWhenMillis = 5 * 60 * 1000; private static final int afkWhenMillis = 3 * 60 * 1000;
@Override @Override
public void onEnable() { public void onEnable() {
@ -33,21 +32,22 @@ public class AfkTag extends Appliance implements DisplayName.DisplayNamed {
public void resetTiming(Player player) { public void resetTiming(Player player) {
boolean wasAfk = isAfk(player); boolean wasAfk = isAfk(player);
this.afkTimings.put(player, System.currentTimeMillis()); this.afkTimings.put(player.getUniqueId(), System.currentTimeMillis());
if (wasAfk) this.updateAfkPrefix(player); if (wasAfk) this.updateAfkPrefix(player);
} }
private void checkAfkPlayers() { private void checkAfkPlayers() {
this.afkTimings.keySet().forEach((player) -> { this.afkTimings.keySet().stream()
if(!isAfk(player)) return; .map(Bukkit::getPlayer)
this.updateAfkPrefix(player); .filter(Objects::nonNull)
}); .filter(this::isAfk)
.forEach(this::updateAfkPrefix);
} }
private boolean isAfk(Player player) { private boolean isAfk(Player player) {
if(player.isSleeping()) return false; if(player.isSleeping()) return false;
long lastTimeActive = this.afkTimings.getOrDefault(player, 0L); long lastTimeActive = this.afkTimings.getOrDefault(player.getUniqueId(), 0L);
long timeSinceLastActive = System.currentTimeMillis() - lastTimeActive; long timeSinceLastActive = System.currentTimeMillis() - lastTimeActive;
return timeSinceLastActive >= afkWhenMillis; return timeSinceLastActive >= afkWhenMillis;
} }