1 Commits
Author SHA1 Message Date
oskar3123 d0cc86103a version 1.3.0
spigot version:
  now sends a bungeecord forward plugin message to display on all servers under the same proxy
both versions:
  message is now editable in the events
2018-11-21 14:32:06 +01:00
9 changed files with 96 additions and 12 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
<groupId>me.oskar3123</groupId> <groupId>me.oskar3123</groupId>
<artifactId>staffchat</artifactId> <artifactId>staffchat</artifactId>
<version>1.2.0-SNAPSHOT</version> <version>1.3.0-SNAPSHOT</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -7,10 +7,10 @@ import net.md_5.bungee.api.plugin.Event;
public class BungeeStaffChatEvent extends Event implements Cancellable public class BungeeStaffChatEvent extends Event implements Cancellable
{ {
private final String message;
private final ProxiedPlayer player; private final ProxiedPlayer player;
private boolean cancelled = false; private boolean cancelled = false;
private String format; private String format;
private String message;
public BungeeStaffChatEvent(ProxiedPlayer player, String format, String message) public BungeeStaffChatEvent(ProxiedPlayer player, String format, String message)
{ {
@@ -34,6 +34,11 @@ public class BungeeStaffChatEvent extends Event implements Cancellable
return message; return message;
} }
public void setMessage(String message)
{
this.message = message;
}
public ProxiedPlayer getPlayer() public ProxiedPlayer getPlayer()
{ {
return player; return player;
@@ -63,6 +63,7 @@ public class BungeeChatListener implements Listener
return; return;
} }
format = chatEvent.getFormat(); format = chatEvent.getFormat();
message = chatEvent.getMessage();
format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(player.getName())); format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(player.getName()));
format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message)); format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message));
@@ -18,6 +18,8 @@ public class Main extends JavaPlugin
public void onEnable() public void onEnable()
{ {
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", chatListener);
new MetricsLite(this); new MetricsLite(this);
saveDefaultConfig(); saveDefaultConfig();
registerCommands(); registerCommands();
@@ -10,9 +10,9 @@ public class StaffChatEvent extends Event implements Cancellable
private static HandlerList handlerList = new HandlerList(); private static HandlerList handlerList = new HandlerList();
private final Player player; private final Player player;
private final String message;
private boolean cancelled = false; private boolean cancelled = false;
private String format; private String format;
private String message;
public StaffChatEvent(Player player, String format, String message) public StaffChatEvent(Player player, String format, String message)
{ {
@@ -46,6 +46,11 @@ public class StaffChatEvent extends Event implements Cancellable
return message; return message;
} }
public void setMessage(String message)
{
this.message = message;
}
@Override @Override
public HandlerList getHandlers() public HandlerList getHandlers()
{ {
@@ -1,20 +1,26 @@
package me.oskar3123.staffchat.spigot.listener; 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.Main;
import me.oskar3123.staffchat.spigot.event.StaffChatEvent; import me.oskar3123.staffchat.spigot.event.StaffChatEvent;
import me.oskar3123.staffchat.util.StringUtils; import me.oskar3123.staffchat.util.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.messaging.PluginMessageListener;
import java.io.*;
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 ChatListener implements Listener public class ChatListener implements Listener, PluginMessageListener
{ {
private Main plugin; private Main plugin;
@@ -55,22 +61,86 @@ public class ChatListener implements Listener
return; return;
} }
format = chatEvent.getFormat(); format = chatEvent.getFormat();
message = chatEvent.getMessage();
format = plugin.replacePlaceholders(event.getPlayer(), format);
format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(event.getPlayer().getName())); format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(event.getPlayer().getName()));
format = ChatColor.translateAlternateColorCodes('&', format); format = ChatColor.translateAlternateColorCodes('&', format);
format = plugin.replacePlaceholders(event.getPlayer(), format);
format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message)); format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message));
final String finalMessage = format; final String finalMessage = format;
Bukkit.getOnlinePlayers().stream() if (plugin.getConfig().getBoolean("settings.sendmessagestoallservers"))
.filter(p -> p.hasPermission(plugin.seePerm)) {
.forEach(p -> p.sendMessage(finalMessage)); sendForwardPluginMessage(event.getPlayer(), finalMessage);
plugin.getLogger().info(ChatColor.stripColor(finalMessage)); }
sendStaffChatMessage(finalMessage);
event.setCancelled(true); 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) public boolean togglePlayer(UUID player)
{ {
if (toggledPlayers.contains(player)) if (toggledPlayers.contains(player))
+1 -1
View File
@@ -1,4 +1,4 @@
name: StaffChat name: StaffChat
authors: [oskar3123] authors: [oskar3123]
main: me.oskar3123.staffchat.bungee.BungeeMain main: me.oskar3123.staffchat.bungee.BungeeMain
version: 1.2.0 version: 1.3.0
+1
View File
@@ -2,6 +2,7 @@ settings:
character: '@' character: '@'
format: '&b{NAME}: {MESSAGE}' format: '&b{NAME}: {MESSAGE}'
replaceplaceholdersinmessage: true replaceplaceholdersinmessage: true
sendmessagestoallservers: true
messages: messages:
prefix: '&7StaffChat&8> &7' prefix: '&7StaffChat&8> &7'
nopermission: '&cYou don''t have permission to do that' nopermission: '&cYou don''t have permission to do that'
+1 -1
View File
@@ -2,7 +2,7 @@ name: StaffChat
authors: [oskar3123] authors: [oskar3123]
main: me.oskar3123.staffchat.spigot.Main main: me.oskar3123.staffchat.spigot.Main
api-version: 1.13 api-version: 1.13
version: 1.2.0 version: 1.3.0
softdepend: [PlaceholderAPI] softdepend: [PlaceholderAPI]
commands: commands:
staffchat: staffchat: