Delete src/main/java/de/lasertag/camp/AntiCampManager.java via Git Manager GUI

This commit is contained in:
2026-06-21 18:43:07 +00:00
parent 836745d805
commit 5f9a13347b

View File

@@ -1,149 +0,0 @@
package de.lasertag.camp;
import de.lasertag.LasertagPlugin;
import de.lasertag.game.Game;
import de.lasertag.player.LaserPlayer;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Anti-Camp System.
*
* Erkennt Spieler die sich zu lange nicht bewegen und bestraft sie.
*
* Ablauf:
* 1. Position wird jede Sekunde geprüft
* 2. Hat sich der Spieler < camp-idle-radius Blöcke bewegt → idle-Zeit erhöhen
* 3. Nach warn-duration Sekunden → Warnung
* 4. Nach max-idle-seconds Sekunden → Strafe (Punkte-Abzug)
*
* Ausnahmen:
* - Spieler nahe der eigenen Basis (heilen)
* - Spieler die getroffen wurden (müssen zur Basis)
*/
public class AntiCampManager {
private final LasertagPlugin plugin;
/** UUID → letzte bekannte Position */
private final Map<UUID, Location> lastPosition = new HashMap<>();
/** UUID → Sekunden an gleicher Stelle */
private final Map<UUID, Integer> idleSeconds = new HashMap<>();
/** UUID → wurde bereits gewarnt (true = Warnung lief, false = noch nicht) */
private final Map<UUID, Boolean> warned = new HashMap<>();
public AntiCampManager(LasertagPlugin plugin) {
this.plugin = plugin;
}
/**
* Wird vom Game-Task jede Sekunde aufgerufen.
* Prüft alle Spieler des Spiels auf Camping-Verhalten.
*/
public void tick(Game game) {
if (!plugin.getConfigManager().isAntiCampEnabled()) return;
double idleRadius = plugin.getConfigManager().getCampIdleRadius();
double excludeRadius = plugin.getConfigManager().getCampExcludeRadius();
int maxIdle = plugin.getConfigManager().getCampMaxIdleSecs();
int warnDuration = plugin.getConfigManager().getCampWarnDuration();
String action = plugin.getConfigManager().getCampAction();
int penalty = plugin.getConfigManager().getCampScorePenalty();
for (Player player : game.getOnline()) {
UUID uid = player.getUniqueId();
LaserPlayer lp = game.getLP(uid);
if (lp == null) continue;
// Getroffene Spieler vom Camp-Check ausnehmen
if (lp.isHit()) {
reset(uid);
continue;
}
// Spieler nahe eigener Basis: ausschließen (Heilzone)
Location base = game.getArena().getBase(lp.getTeam());
if (base != null && player.getLocation().distanceSquared(base) <= excludeRadius * excludeRadius) {
reset(uid);
continue;
}
Location prev = lastPosition.get(uid);
Location curr = player.getLocation();
if (prev == null) {
lastPosition.put(uid, curr.clone());
idleSeconds.put(uid, 0);
warned.put(uid, false);
continue;
}
// Hat sich der Spieler bewegt?
double moved = prev.distanceSquared(curr);
if (moved > idleRadius * idleRadius) {
// Bewegt → Reset
lastPosition.put(uid, curr.clone());
idleSeconds.put(uid, 0);
warned.put(uid, false);
continue;
}
// Still gestanden
int idle = idleSeconds.merge(uid, 1, Integer::sum);
// Warnphase
if (action.contains("WARN") && idle == warnDuration && !warned.getOrDefault(uid, false)) {
warned.put(uid, true);
player.sendMessage(plugin.getConfigManager().getPrefix()
+ plugin.getConfigManager().getCampWarnMsg());
player.playSound(player.getLocation(),
plugin.getConfigManager().getCampWarnSound(), 1f,
plugin.getConfigManager().getCampWarnSoundPitch());
}
// Strafphase
if (action.contains("PUNISH") && idle >= maxIdle) {
lp.addScore(-penalty);
// Score darf nicht unter 0 fallen
if (lp.getScore() < 0) lp.addScore(-lp.getScore());
player.sendMessage(plugin.getConfigManager().getPrefix()
+ "§c⛔ Camp-Strafe: §7-" + penalty + " Punkte (Bewege dich!)");
player.playSound(player.getLocation(),
plugin.getConfigManager().getCampWarnSound(), 1f,
plugin.getConfigManager().getCampWarnSoundPitch());
// Idle-Zähler auf maxIdle halten (weiter bestrafen jede Sekunde)
idleSeconds.put(uid, maxIdle);
}
}
}
/** Spieler aus dem Camp-Tracking entfernen (bei Leave/End). */
public void remove(UUID uuid) {
lastPosition.remove(uuid);
idleSeconds.remove(uuid);
warned.remove(uuid);
}
/** Alle Daten zurücksetzen (bei Spiel-Reset). */
public void reset() {
lastPosition.clear();
idleSeconds.clear();
warned.clear();
}
private void reset(UUID uid) {
lastPosition.remove(uid);
idleSeconds.put(uid, 0);
warned.put(uid, false);
}
public int getIdleSeconds(UUID uuid) {
return idleSeconds.getOrDefault(uuid, 0);
}
}