Delete src/main/java/net/viper/status/modules/chat/BlockManager.java via Git Manager GUI
This commit is contained in:
@@ -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:
|
|
||||||
* <blocker-uuid>|<blocked-uuid1>,<blocked-uuid2>,...
|
|
||||||
*/
|
|
||||||
public class BlockManager {
|
|
||||||
|
|
||||||
private final File file;
|
|
||||||
private final Logger logger;
|
|
||||||
|
|
||||||
// blocker UUID → Set der blockierten UUIDs
|
|
||||||
private final ConcurrentHashMap<UUID, Set<UUID>> 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<UUID> 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<UUID> 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<UUID> getBlockedBy(UUID blocker) {
|
|
||||||
Set<UUID> 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<UUID, Set<UUID>> e : blocked.entrySet()) {
|
|
||||||
if (e.getValue().isEmpty()) continue;
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append(e.getKey()).append("|");
|
|
||||||
Iterator<UUID> 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<UUID> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user