From e0292702d72d62d6a6c5a5f2382b2c9034411b67 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Mon, 29 Sep 2025 20:40:29 +0000 Subject: [PATCH] Dateien nach "GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor" hochladen --- .../suppressor/GlobalChatSuppressor.java | 79 +++++++++++++++++++ .../suppressor/SuppressManager.java | 35 ++++++++ 2 files changed, 114 insertions(+) create mode 100644 GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/GlobalChatSuppressor.java create mode 100644 GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/SuppressManager.java diff --git a/GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/GlobalChatSuppressor.java b/GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/GlobalChatSuppressor.java new file mode 100644 index 0000000..53117e4 --- /dev/null +++ b/GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/GlobalChatSuppressor.java @@ -0,0 +1,79 @@ +package de.viper.globalchat.suppressor; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.messaging.PluginMessageListener; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class GlobalChatSuppressor extends JavaPlugin implements PluginMessageListener, Listener { + + private static final String CHANNEL = "global:control"; + private final Set suppressJoinQuit = new HashSet<>(); + + @Override + public void onEnable() { + getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL, this); + getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL); + getServer().getPluginManager().registerEvents(this, this); + getLogger().info("GlobalChatSuppressor aktiviert!"); + } + + @Override + public void onDisable() { + getServer().getMessenger().unregisterIncomingPluginChannel(this, CHANNEL); + getServer().getMessenger().unregisterOutgoingPluginChannel(this, CHANNEL); + getLogger().info("GlobalChatSuppressor deaktiviert!"); + } + + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) { + if (!channel.equals(CHANNEL)) return; + + try (DataInputStream in = new DataInputStream(new ByteArrayInputStream(message))) { + String subChannel = in.readUTF(); + if ("suppress".equalsIgnoreCase(subChannel)) { + String uuidStr = in.readUTF(); + UUID playerUUID = UUID.fromString(uuidStr); + suppressJoinQuit.add(playerUUID); + getLogger().info("Suppress für Spieler UUID: " + playerUUID + " aktiviert."); + // Entferne die Unterdrückung nach 2 Sekunden (synchron mit BungeeCord) + getServer().getScheduler().runTaskLater(this, () -> { + suppressJoinQuit.remove(playerUUID); + getLogger().info("Suppress für Spieler UUID: " + playerUUID + " entfernt."); + }, 40L); // 40 Ticks = 2 Sekunden + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + if (suppressJoinQuit.contains(player.getUniqueId())) { + event.setJoinMessage(null); + getLogger().info("Join-Nachricht für " + player.getName() + " unterdrückt."); + suppressJoinQuit.remove(player.getUniqueId()); + } + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + if (suppressJoinQuit.contains(player.getUniqueId())) { + event.setQuitMessage(null); + getLogger().info("Quit-Nachricht für " + player.getName() + " unterdrückt."); + suppressJoinQuit.remove(player.getUniqueId()); + } + } +} \ No newline at end of file diff --git a/GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/SuppressManager.java b/GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/SuppressManager.java new file mode 100644 index 0000000..2924a08 --- /dev/null +++ b/GlobalChatSuppressor/src/main/java/de/viper/globalchat/suppressor/SuppressManager.java @@ -0,0 +1,35 @@ +package de.viper.globalchat.suppressor; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class SuppressManager { + + private static final Set suppressedPlayers = Collections.synchronizedSet(new HashSet<>()); + + public static void register(GlobalChatSuppressor plugin) { + // Nichts weiter nötig, die Nachrichten werden beim Join/Quit-Event unterdrückt + // via AsyncPlayerPreLogin oder PlayerJoin/Leave in Hauptplugin + } + + public static void suppress(UUID playerUUID) { + suppressedPlayers.add(playerUUID); + } + + public static void unsuppress(UUID playerUUID) { + suppressedPlayers.remove(playerUUID); + } + + public static boolean isSuppressed(UUID playerUUID) { + return suppressedPlayers.contains(playerUUID); + } + + public static Set getSuppressedPlayers() { + return suppressedPlayers; + } +}