diff --git a/src/main/java/net/viper/status/modules/chat/BlockManager.java b/src/main/java/net/viper/status/modules/chat/BlockManager.java deleted file mode 100644 index 5639480..0000000 --- a/src/main/java/net/viper/status/modules/chat/BlockManager.java +++ /dev/null @@ -1,124 +0,0 @@ -package net.viper.status.modules.chat; - -import java.io.*; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.Logger; - -/** - * Verwaltet den gegenseitigen Blockier-/Ignore-Status zwischen Spielern. - * - * Admins/OPs mit dem Bypass-Permission sind nicht blockierbar. - * - * Format der Speicherdatei: - * |,,... - */ -public class BlockManager { - - private final File file; - private final Logger logger; - - // blocker UUID → Set der blockierten UUIDs - private final ConcurrentHashMap> blocked = new ConcurrentHashMap<>(); - - public BlockManager(File dataFolder, Logger logger) { - this.file = new File(dataFolder, "chat_blocked.dat"); - this.logger = logger; - } - - // ===== Block-Logik ===== - - /** Spieler `blocker` blockiert Spieler `target`. */ - public void block(UUID blocker, UUID target) { - blocked.computeIfAbsent(blocker, k -> Collections.newSetFromMap(new ConcurrentHashMap<>())) - .add(target); - save(); - } - - /** Spieler `blocker` hebt den Block für `target` auf. */ - public void unblock(UUID blocker, UUID target) { - Set set = blocked.get(blocker); - if (set != null) { - set.remove(target); - if (set.isEmpty()) blocked.remove(blocker); - } - save(); - } - - /** - * Prüft ob `blocker` den Spieler `target` blockiert hat. - * Admins (isAdmin=true) sind niemals blockiert. - */ - public boolean isBlocked(UUID blocker, UUID target) { - Set set = blocked.get(blocker); - return set != null && set.contains(target); - } - - /** - * Prüft ob eine Nachricht von `sender` an `receiver` zugestellt werden soll. - * Gibt false zurück, wenn einer der beiden den anderen blockiert. - */ - public boolean canReceive(UUID sender, UUID receiver) { - // receiver hat sender blockiert → keine Nachricht - if (isBlocked(receiver, sender)) return false; - // sender hat receiver blockiert → keine Nachricht (Komfort) - if (isBlocked(sender, receiver)) return false; - return true; - } - - /** Gibt alle UUIDs zurück, die `blocker` blockiert hat. */ - public Set getBlockedBy(UUID blocker) { - Set set = blocked.get(blocker); - if (set == null) return Collections.emptySet(); - return Collections.unmodifiableSet(set); - } - - // ===== Persistenz ===== - - public void save() { - try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"))) { - for (Map.Entry> e : blocked.entrySet()) { - if (e.getValue().isEmpty()) continue; - StringBuilder sb = new StringBuilder(); - sb.append(e.getKey()).append("|"); - Iterator it = e.getValue().iterator(); - while (it.hasNext()) { - sb.append(it.next()); - if (it.hasNext()) sb.append(","); - } - bw.write(sb.toString()); - bw.newLine(); - } - } catch (IOException e) { - logger.warning("[ChatModule] Fehler beim Speichern der Block-Liste: " + e.getMessage()); - } - } - - public void load() { - blocked.clear(); - if (!file.exists()) return; - try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"))) { - String line; - while ((line = br.readLine()) != null) { - line = line.trim(); - if (line.isEmpty()) continue; - String[] parts = line.split("\\|", 2); - if (parts.length < 2) continue; - try { - UUID blocker = UUID.fromString(parts[0]); - Set targets = Collections.newSetFromMap(new ConcurrentHashMap<>()); - for (String rawUUID : parts[1].split(",")) { - rawUUID = rawUUID.trim(); - if (!rawUUID.isEmpty()) { - try { targets.add(UUID.fromString(rawUUID)); } - catch (Exception ignored) {} - } - } - if (!targets.isEmpty()) blocked.put(blocker, targets); - } catch (Exception ignored) {} - } - } catch (IOException e) { - logger.warning("[ChatModule] Fehler beim Laden der Block-Liste: " + e.getMessage()); - } - } -} \ No newline at end of file