src/main/java/de/viper/survivalplus/Manager/AFKManager.java aktualisiert
This commit is contained in:
@@ -16,8 +16,10 @@ public class AFKManager {
|
|||||||
private final Plugin plugin;
|
private final Plugin plugin;
|
||||||
private final long afkAfterMillis;
|
private final long afkAfterMillis;
|
||||||
private final long kickAfterMillis;
|
private final long kickAfterMillis;
|
||||||
|
private final long joinGracePeriodMillis = 5000; // 5 Sekunden Schonfrist
|
||||||
|
|
||||||
private final Map<UUID, Long> lastActivity = new HashMap<>();
|
private final Map<UUID, Long> lastActivity = new HashMap<>();
|
||||||
|
private final Map<UUID, Long> joinTimes = new HashMap<>();
|
||||||
private final Set<UUID> afkPlayers = new HashSet<>();
|
private final Set<UUID> afkPlayers = new HashSet<>();
|
||||||
private final Map<UUID, BossBar> bossBars = new WeakHashMap<>();
|
private final Map<UUID, BossBar> bossBars = new WeakHashMap<>();
|
||||||
private final Map<UUID, Integer> colorIndex = new HashMap<>();
|
private final Map<UUID, Integer> colorIndex = new HashMap<>();
|
||||||
@@ -37,6 +39,9 @@ public class AFKManager {
|
|||||||
public void updateActivity(Player player) {
|
public void updateActivity(Player player) {
|
||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
lastActivity.put(uuid, System.currentTimeMillis());
|
lastActivity.put(uuid, System.currentTimeMillis());
|
||||||
|
if (!joinTimes.containsKey(uuid)) {
|
||||||
|
joinTimes.put(uuid, System.currentTimeMillis()); // Join-Zeit speichern
|
||||||
|
}
|
||||||
|
|
||||||
if (afkPlayers.contains(uuid)) {
|
if (afkPlayers.contains(uuid)) {
|
||||||
afkPlayers.remove(uuid);
|
afkPlayers.remove(uuid);
|
||||||
@@ -47,6 +52,7 @@ public class AFKManager {
|
|||||||
public void reset(Player player) {
|
public void reset(Player player) {
|
||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
lastActivity.remove(uuid);
|
lastActivity.remove(uuid);
|
||||||
|
joinTimes.remove(uuid); // Join-Zeit entfernen
|
||||||
afkPlayers.remove(uuid);
|
afkPlayers.remove(uuid);
|
||||||
removeAFKBossBar(player);
|
removeAFKBossBar(player);
|
||||||
}
|
}
|
||||||
@@ -59,6 +65,17 @@ public class AFKManager {
|
|||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// AFK-Prüfung überspringen, wenn Spieler in der Schonfrist ist
|
||||||
|
if (joinTimes.containsKey(uuid) && (currentTime - joinTimes.get(uuid) < joinGracePeriodMillis)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// AFK-Prüfung für Kreativ- oder Zuschauermodus überspringen
|
||||||
|
if (player.getGameMode() == org.bukkit.GameMode.CREATIVE ||
|
||||||
|
player.getGameMode() == org.bukkit.GameMode.SPECTATOR) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!lastActivity.containsKey(uuid)) {
|
if (!lastActivity.containsKey(uuid)) {
|
||||||
lastActivity.put(uuid, currentTime);
|
lastActivity.put(uuid, currentTime);
|
||||||
return;
|
return;
|
||||||
@@ -70,10 +87,11 @@ public class AFKManager {
|
|||||||
if (diff >= afkAfterMillis) {
|
if (diff >= afkAfterMillis) {
|
||||||
if (!afkPlayers.contains(uuid)) {
|
if (!afkPlayers.contains(uuid)) {
|
||||||
afkPlayers.add(uuid);
|
afkPlayers.add(uuid);
|
||||||
// BossBar wird im Listener angezeigt
|
showAFKBossBar(player, "§cDu bist AFK!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kickAfterMillis > 0 && diff >= kickAfterMillis) {
|
if (kickAfterMillis > 0 && diff >= kickAfterMillis) {
|
||||||
|
plugin.getLogger().info("Spieler " + player.getName() + " wird wegen AFK gekickt. Inaktiv seit: " + (diff / 1000) + " Sekunden");
|
||||||
player.kickPlayer("§cDu wurdest wegen AFK gekickt.");
|
player.kickPlayer("§cDu wurdest wegen AFK gekickt.");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -86,7 +104,7 @@ public class AFKManager {
|
|||||||
|
|
||||||
public void showAFKBossBar(Player player, String message) {
|
public void showAFKBossBar(Player player, String message) {
|
||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
removeAFKBossBar(player); // sicherstellen, dass nur eine BossBar aktiv ist
|
removeAFKBossBar(player); // Sicherstellen, dass nur eine BossBar aktiv ist
|
||||||
|
|
||||||
BossBar bar = Bukkit.createBossBar(message, BarColor.YELLOW, BarStyle.SOLID, BarFlag.CREATE_FOG);
|
BossBar bar = Bukkit.createBossBar(message, BarColor.YELLOW, BarStyle.SOLID, BarFlag.CREATE_FOG);
|
||||||
bar.addPlayer(player);
|
bar.addPlayer(player);
|
||||||
@@ -121,7 +139,7 @@ public class AFKManager {
|
|||||||
colorIndex.put(uuid, (index + 1) % colorCycle.size());
|
colorIndex.put(uuid, (index + 1) % colorCycle.size());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
task.runTaskTimer(plugin, 0L, 20L); // alle 20 Ticks (1 Sekunde)
|
task.runTaskTimer(plugin, 0L, 20L); // Alle 20 Ticks (1 Sekunde)
|
||||||
colorTasks.put(uuid, task);
|
colorTasks.put(uuid, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user