diff --git a/pom.xml b/pom.xml index 6a5abc1..6af627c 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ me.oskar3123 staffchat - 1.2.0-SNAPSHOT + 1.3.0-SNAPSHOT UTF-8 diff --git a/src/main/java/me/oskar3123/staffchat/bungee/event/BungeeStaffChatEvent.java b/src/main/java/me/oskar3123/staffchat/bungee/event/BungeeStaffChatEvent.java index 6d5f259..b293ba1 100644 --- a/src/main/java/me/oskar3123/staffchat/bungee/event/BungeeStaffChatEvent.java +++ b/src/main/java/me/oskar3123/staffchat/bungee/event/BungeeStaffChatEvent.java @@ -7,10 +7,10 @@ import net.md_5.bungee.api.plugin.Event; public class BungeeStaffChatEvent extends Event implements Cancellable { - private final String message; private final ProxiedPlayer player; private boolean cancelled = false; private String format; + private String message; public BungeeStaffChatEvent(ProxiedPlayer player, String format, String message) { @@ -34,6 +34,11 @@ public class BungeeStaffChatEvent extends Event implements Cancellable return message; } + public void setMessage(String message) + { + this.message = message; + } + public ProxiedPlayer getPlayer() { return player; diff --git a/src/main/java/me/oskar3123/staffchat/bungee/listener/BungeeChatListener.java b/src/main/java/me/oskar3123/staffchat/bungee/listener/BungeeChatListener.java index f32e82a..4330741 100644 --- a/src/main/java/me/oskar3123/staffchat/bungee/listener/BungeeChatListener.java +++ b/src/main/java/me/oskar3123/staffchat/bungee/listener/BungeeChatListener.java @@ -63,6 +63,7 @@ public class BungeeChatListener implements Listener return; } format = chatEvent.getFormat(); + message = chatEvent.getMessage(); format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(player.getName())); format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message)); diff --git a/src/main/java/me/oskar3123/staffchat/spigot/Main.java b/src/main/java/me/oskar3123/staffchat/spigot/Main.java index 02ac4d8..23bbaca 100644 --- a/src/main/java/me/oskar3123/staffchat/spigot/Main.java +++ b/src/main/java/me/oskar3123/staffchat/spigot/Main.java @@ -18,6 +18,8 @@ public class Main extends JavaPlugin public void onEnable() { + getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", chatListener); new MetricsLite(this); saveDefaultConfig(); registerCommands(); diff --git a/src/main/java/me/oskar3123/staffchat/spigot/event/StaffChatEvent.java b/src/main/java/me/oskar3123/staffchat/spigot/event/StaffChatEvent.java index a16f25e..ce17e3c 100644 --- a/src/main/java/me/oskar3123/staffchat/spigot/event/StaffChatEvent.java +++ b/src/main/java/me/oskar3123/staffchat/spigot/event/StaffChatEvent.java @@ -10,9 +10,9 @@ public class StaffChatEvent extends Event implements Cancellable private static HandlerList handlerList = new HandlerList(); private final Player player; - private final String message; private boolean cancelled = false; private String format; + private String message; public StaffChatEvent(Player player, String format, String message) { @@ -46,6 +46,11 @@ public class StaffChatEvent extends Event implements Cancellable return message; } + public void setMessage(String message) + { + this.message = message; + } + @Override public HandlerList getHandlers() { diff --git a/src/main/java/me/oskar3123/staffchat/spigot/listener/ChatListener.java b/src/main/java/me/oskar3123/staffchat/spigot/listener/ChatListener.java index 6fdb834..0f4e7d7 100644 --- a/src/main/java/me/oskar3123/staffchat/spigot/listener/ChatListener.java +++ b/src/main/java/me/oskar3123/staffchat/spigot/listener/ChatListener.java @@ -1,20 +1,26 @@ package me.oskar3123.staffchat.spigot.listener; +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; import me.oskar3123.staffchat.spigot.Main; import me.oskar3123.staffchat.spigot.event.StaffChatEvent; import me.oskar3123.staffchat.util.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.plugin.messaging.PluginMessageListener; +import java.io.*; import java.util.HashSet; import java.util.Set; import java.util.UUID; -public class ChatListener implements Listener +public class ChatListener implements Listener, PluginMessageListener { private Main plugin; @@ -55,22 +61,86 @@ public class ChatListener implements Listener return; } format = chatEvent.getFormat(); + message = chatEvent.getMessage(); + format = plugin.replacePlaceholders(event.getPlayer(), format); format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(event.getPlayer().getName())); format = ChatColor.translateAlternateColorCodes('&', format); - format = plugin.replacePlaceholders(event.getPlayer(), format); format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message)); - final String finalMessage = format; - Bukkit.getOnlinePlayers().stream() - .filter(p -> p.hasPermission(plugin.seePerm)) - .forEach(p -> p.sendMessage(finalMessage)); - plugin.getLogger().info(ChatColor.stripColor(finalMessage)); + if (plugin.getConfig().getBoolean("settings.sendmessagestoallservers")) + { + sendForwardPluginMessage(event.getPlayer(), finalMessage); + } + sendStaffChatMessage(finalMessage); event.setCancelled(true); } + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) + { + if (!channel.equals("BungeeCord")) { + return; + } + ByteArrayDataInput in = ByteStreams.newDataInput(message); + String subChannel = in.readUTF(); + if (!subChannel.equals("StaffChat")) + { + return; + } + short len = in.readShort(); + byte[] msgbytes = new byte[len]; + in.readFully(msgbytes); + + DataInputStream msgin = new DataInputStream(new ByteArrayInputStream(msgbytes)); + String actualMessage; + try + { + actualMessage = msgin.readUTF(); + } + catch (IOException e) + { + e.printStackTrace(); + plugin.getLogger().severe("Failed to read plugin message from bungeecord"); + return; + } + sendStaffChatMessage(actualMessage); + } + + private void sendStaffChatMessage(final String message) + { + Bukkit.getOnlinePlayers().stream() + .filter(p -> p.hasPermission(plugin.seePerm)) + .forEach(p -> p.sendMessage(message)); + plugin.getLogger().info(ChatColor.stripColor(message)); + } + + private void sendForwardPluginMessage(Player player, final String finalMessage) + { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Forward"); + out.writeUTF("ONLINE"); + out.writeUTF("StaffChat"); + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + DataOutputStream dataStream = new DataOutputStream(byteStream); + try + { + dataStream.writeUTF(finalMessage); + } + catch (IOException e) + { + e.printStackTrace(); + plugin.getLogger().severe("Failed to send plugin message to bungeecord"); + return; + } + byte[] data = byteStream.toByteArray(); + out.writeShort(data.length); + out.write(data); + player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray()); + } + public boolean togglePlayer(UUID player) { if (toggledPlayers.contains(player)) diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml index cf2d0b8..2873305 100644 --- a/src/main/resources/bungee.yml +++ b/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: StaffChat authors: [oskar3123] main: me.oskar3123.staffchat.bungee.BungeeMain -version: 1.2.0 +version: 1.3.0 diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e043796..5937826 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,6 +2,7 @@ settings: character: '@' format: '&b{NAME}: {MESSAGE}' replaceplaceholdersinmessage: true + sendmessagestoallservers: true messages: prefix: '&7StaffChat&8> &7' nopermission: '&cYou don''t have permission to do that' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2834402..23f1d3f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,7 +2,7 @@ name: StaffChat authors: [oskar3123] main: me.oskar3123.staffchat.spigot.Main api-version: 1.13 -version: 1.2.0 +version: 1.3.0 softdepend: [PlaceholderAPI] commands: staffchat: