src/main/java/de/viper/globalchat/suppressor/GlobalChatSuppressor.java aktualisiert

This commit is contained in:
2026-01-11 09:51:37 +00:00
parent e6fbd908e7
commit 8347a60335

View File

@@ -1,79 +1,112 @@
package de.viper.globalchat.suppressor; package de.viper.globalchat.suppressor;
import org.bukkit.entity.Player; import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.plugin.java.JavaPlugin; import net.md_5.bungee.chat.ComponentSerializer;
import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler; import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.messaging.PluginMessageListener;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import java.io.ByteArrayInputStream; import org.bukkit.event.player.PlayerJoinEvent;
import java.io.DataInputStream; import org.bukkit.event.player.PlayerQuitEvent;
import java.io.IOException;
import java.util.HashSet; import java.io.ByteArrayInputStream;
import java.util.Set; import java.io.DataInputStream;
import java.util.UUID; import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class GlobalChatSuppressor extends JavaPlugin implements PluginMessageListener, Listener { import java.util.HashSet;
import java.util.Set;
private static final String CHANNEL = "global:control"; import java.util.UUID;
private final Set<UUID> suppressJoinQuit = new HashSet<>();
public class GlobalChatSuppressor extends JavaPlugin implements PluginMessageListener, Listener {
@Override
public void onEnable() { private static final String CHANNEL_CONTROL = "global:control";
getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL, this); private static final String CHANNEL_CHAT = "global:chat"; // NEU: Kanal für Chat Relay
getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL);
getServer().getPluginManager().registerEvents(this, this); private final Set<UUID> suppressJoinQuit = new HashSet<>();
getLogger().info("GlobalChatSuppressor aktiviert!");
} @Override
public void onEnable() {
@Override // Incoming Channels (Daten von BungeeCord)
public void onDisable() { getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL_CONTROL, this);
getServer().getMessenger().unregisterIncomingPluginChannel(this, CHANNEL); getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL_CHAT, this);
getServer().getMessenger().unregisterOutgoingPluginChannel(this, CHANNEL);
getLogger().info("GlobalChatSuppressor deaktiviert!"); // Outgoing Channels (Daten zu BungeeCord)
} getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL_CONTROL);
@Override getServer().getPluginManager().registerEvents(this, this);
public void onPluginMessageReceived(String channel, Player player, byte[] message) { getLogger().info("GlobalChatSuppressor aktiviert (Chat Relay included)!");
if (!channel.equals(CHANNEL)) return; }
try (DataInputStream in = new DataInputStream(new ByteArrayInputStream(message))) { @Override
String subChannel = in.readUTF(); public void onDisable() {
if ("suppress".equalsIgnoreCase(subChannel)) { getServer().getMessenger().unregisterIncomingPluginChannel(this, CHANNEL_CONTROL);
String uuidStr = in.readUTF(); getServer().getMessenger().unregisterIncomingPluginChannel(this, CHANNEL_CHAT);
UUID playerUUID = UUID.fromString(uuidStr); getServer().getMessenger().unregisterOutgoingPluginChannel(this, CHANNEL_CONTROL);
suppressJoinQuit.add(playerUUID); getLogger().info("GlobalChatSuppressor deaktiviert!");
getLogger().info("Suppress für Spieler UUID: " + playerUUID + " aktiviert."); }
// Entferne die Unterdrückung nach 2 Sekunden (synchron mit BungeeCord)
getServer().getScheduler().runTaskLater(this, () -> { @Override
suppressJoinQuit.remove(playerUUID); public void onPluginMessageReceived(String channel, Player player, byte[] message) {
getLogger().info("Suppress für Spieler UUID: " + playerUUID + " entfernt."); if (!channel.equals(CHANNEL_CONTROL) && !channel.equals(CHANNEL_CHAT)) return;
}, 40L); // 40 Ticks = 2 Sekunden
} try {
} catch (IOException e) { String data = new String(message, StandardCharsets.UTF_8);
e.printStackTrace();
} if (channel.equals(CHANNEL_CHAT)) {
} // ==========================================
// NEU: GLOBAL CHAT RELAY LOGIK
@EventHandler // ==========================================
public void onPlayerJoin(PlayerJoinEvent event) { // Wir empfangen JSON von BungeeCord.
Player player = event.getPlayer(); BaseComponent[] components = ComponentSerializer.parse(data);
if (suppressJoinQuit.contains(player.getUniqueId())) {
event.setJoinMessage(null); // An alle Spieler auf diesem Server senden.
getLogger().info("Join-Nachricht für " + player.getName() + " unterdrückt."); // Da dies eine Server-Nachricht ist, bricht sie die Secure Chain nicht.
suppressJoinQuit.remove(player.getUniqueId()); // Auch der Spieler selbst sieht sie.
} for (Player all : Bukkit.getOnlinePlayers()) {
} all.spigot().sendMessage(components);
}
@EventHandler // ==========================================
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer(); } else if (channel.equals(CHANNEL_CONTROL)) {
if (suppressJoinQuit.contains(player.getUniqueId())) { // Alte Suppress Logik (Join/Quit)
event.setQuitMessage(null); try (DataInputStream in = new DataInputStream(new ByteArrayInputStream(message))) {
getLogger().info("Quit-Nachricht für " + player.getName() + " unterdrückt."); String subChannel = in.readUTF();
suppressJoinQuit.remove(player.getUniqueId()); 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.");
getServer().getScheduler().runTaskLater(this, () -> {
suppressJoinQuit.remove(playerUUID);
getLogger().info("Suppress für Spieler UUID: " + playerUUID + " entfernt.");
}, 40L);
}
}
}
} 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());
}
}
} }