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