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
This commit is contained in:
Oskar Nordling 2018-11-21 14:32:06 +01:00
parent c57fb7223a
commit d0cc86103a
9 changed files with 96 additions and 12 deletions

View File

@ -7,7 +7,7 @@
<groupId>me.oskar3123</groupId>
<artifactId>staffchat</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.3.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

View File

@ -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;

View File

@ -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));

View File

@ -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();

View File

@ -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()
{

View File

@ -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))

View File

@ -1,4 +1,4 @@
name: StaffChat
authors: [oskar3123]
main: me.oskar3123.staffchat.bungee.BungeeMain
version: 1.2.0
version: 1.3.0

View File

@ -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'

View File

@ -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: