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: