5 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
oskar3123 c57fb7223a version 1.2.0
added /staffchat toggle
added placeholderapi support (spigot version only)
small fixes for bungeecord version
2018-11-20 19:12:59 +01:00
oskar3123 9e8278d439 remove coverage shield 2018-07-30 13:33:59 +02:00
oskar3123 9abaf55532 change version number in bungee yml, remove useless unit tests 2018-07-30 13:30:17 +02:00
oskar3123 1136b7e33f forgot to change version in plugin yml 2018-07-30 13:17:29 +02:00
18 changed files with 302 additions and 2342 deletions
-1
View File
@@ -2,7 +2,6 @@
[![All Release](https://img.shields.io/github/downloads/oskar3123/StaffChat/total.svg?style=flat)](https://github.com/oskar3123/StaffChat/releases/latest) [![All Release](https://img.shields.io/github/downloads/oskar3123/StaffChat/total.svg?style=flat)](https://github.com/oskar3123/StaffChat/releases/latest)
[![Latest Release](https://img.shields.io/github/release/oskar3123/StaffChat.svg?style=flat)](https://github.com/oskar3123/StaffChat/releases/latest) [![Latest Release](https://img.shields.io/github/release/oskar3123/StaffChat.svg?style=flat)](https://github.com/oskar3123/StaffChat/releases/latest)
[![Github commits (since latest release)](https://img.shields.io/github/commits-since/oskar3123/StaffChat/latest.svg?style=flat)](https://github.com/oskar3123/StaffChat/commits/master) [![Github commits (since latest release)](https://img.shields.io/github/commits-since/oskar3123/StaffChat/latest.svg?style=flat)](https://github.com/oskar3123/StaffChat/commits/master)
[![Coverage Status](https://coveralls.io/repos/github/oskar3123/StaffChat/badge.svg?branch=master)](https://coveralls.io/github/oskar3123/StaffChat?branch=master)
# [StaffChat](https://oskar3123.github.io/StaffChat) # [StaffChat](https://oskar3123.github.io/StaffChat)
+14 -21
View File
@@ -7,7 +7,7 @@
<groupId>me.oskar3123</groupId> <groupId>me.oskar3123</groupId>
<artifactId>staffchat</artifactId> <artifactId>staffchat</artifactId>
<version>1.1.4-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>
@@ -22,27 +22,38 @@
<id>bungeecord-repo</id> <id>bungeecord-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url> <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository> </repository>
<repository>
<id>placeholderapi</id>
<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
</repositories> </repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
<version>1.13-R0.1-SNAPSHOT</version> <version>1.13.2-R0.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId> <artifactId>bukkit</artifactId>
<version>1.13-R0.1-SNAPSHOT</version> <version>1.13.2-R0.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId> <artifactId>bungeecord-api</artifactId>
<version>1.13-SNAPSHOT</version> <version>1.13-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.9.2</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>${project.name}-${project.version}</finalName>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@@ -53,24 +64,6 @@
<target>1.8</target> <target>1.8</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.eluder.coveralls</groupId>
<artifactId>coveralls-maven-plugin</artifactId>
<version>4.3.0</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins> </plugins>
</build> </build>
@@ -19,6 +19,7 @@ public class BungeeMain extends Plugin
public final String seePerm = "staffchat.see"; public final String seePerm = "staffchat.see";
public final String commandPerm = "staffchat.command"; public final String commandPerm = "staffchat.command";
public final String reloadPerm = "staffchat.reload"; public final String reloadPerm = "staffchat.reload";
public final BungeeChatListener chatListener = new BungeeChatListener(this);
private Configuration config; private Configuration config;
public void onEnable() public void onEnable()
@@ -40,7 +41,7 @@ public class BungeeMain extends Plugin
private void registerEvents() private void registerEvents()
{ {
getProxy().getPluginManager().registerListener(this, new BungeeChatListener(this)); getProxy().getPluginManager().registerListener(this, chatListener);
} }
public boolean reloadConfig() public boolean reloadConfig()
@@ -48,15 +49,42 @@ public class BungeeMain extends Plugin
try try
{ {
config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "config.yml")); config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "config.yml"));
loadDefaultValues();
return true; return true;
} }
catch (IOException e) catch (IOException e)
{ {
config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(getResourceAsStream("config.yml")); config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(getResourceAsStream("config.yml"));
loadDefaultValues();
return false; return false;
} }
} }
private void loadDefaultValues()
{
String[] keys = new String[] {
"settings.character",
"settings.format",
"messages.prefix",
"messages.nopermission",
"messages.playeronly",
"messages.reloaded",
"messages.toggled",
"messages.onstring",
"messages.offstring",
};
Configuration def = ConfigurationProvider.getProvider(YamlConfiguration.class).load(getResourceAsStream("config.yml"));
for (String key : keys)
{
String v = config.getString(key);
if (v == null || v.isEmpty())
{
config.set(key, def.getString(key));
}
}
saveConfig();
}
public Configuration getConfig() public Configuration getConfig()
{ {
return config; return config;
@@ -85,4 +113,17 @@ public class BungeeMain extends Plugin
} }
} }
public void saveConfig()
{
try
{
ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, new File(getDataFolder(), "config.yml"));
}
catch (IOException e)
{
e.printStackTrace();
getLogger().severe("Failed to save config");
}
}
} }
@@ -5,6 +5,7 @@ import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.Configuration;
@@ -46,13 +47,35 @@ public class BungeeStaffChatCommand extends Command
} }
return; return;
} }
else if (args[0].equalsIgnoreCase("toggle"))
{
if (sender.hasPermission(plugin.usePerm))
{
toggle(sender);
}
else
{
sender.sendMessage(noPerm);
}
return;
}
help(sender, getName()); help(sender, getName());
} }
private void playerOnly(CommandSender sender)
{
sender.sendMessage(txt(config.getString("messages.prefix") + config.getString("messages.playeronly")));
}
private void help(CommandSender sender, String label) private void help(CommandSender sender, String label)
{ {
String prefix = config.getString("messages.prefix"); String prefix = config.getString("messages.prefix");
sender.sendMessage(txt(prefix + "Version " + plugin.getDescription().getVersion() + ", made by oskar3123")); sender.sendMessage(txt(prefix + "Version " + plugin.getDescription().getVersion() + ", made by oskar3123"));
if (sender.hasPermission(plugin.usePerm))
{
sender.sendMessage(txt(prefix + "Message prefix: " + config.getString("settings.character")));
sender.sendMessage(txt(prefix + "/" + label + " toggle - Toggles auto staffchat"));
}
if (sender.hasPermission(plugin.reloadPerm)) if (sender.hasPermission(plugin.reloadPerm))
{ {
sender.sendMessage(txt(prefix + "/" + label + " reload - Reloads the config file")); sender.sendMessage(txt(prefix + "/" + label + " reload - Reloads the config file"));
@@ -66,6 +89,18 @@ public class BungeeStaffChatCommand extends Command
sender.sendMessage(txt(config.getString("messages.prefix") + config.getString("messages.reloaded"))); sender.sendMessage(txt(config.getString("messages.prefix") + config.getString("messages.reloaded")));
} }
private void toggle(CommandSender sender)
{
if (!(sender instanceof ProxiedPlayer))
{
playerOnly(sender);
return;
}
boolean toggled = plugin.chatListener.togglePlayer(((ProxiedPlayer) sender).getUniqueId());
String state = toggled ? config.getString("messages.onstring") : config.getString("messages.offstring");
sender.sendMessage(txt(config.getString("messages.prefix") + String.format(config.getString("messages.toggled"), state)));
}
private String clr(String string) private String clr(String string)
{ {
return ChatColor.translateAlternateColorCodes('&', string); return ChatColor.translateAlternateColorCodes('&', string);
@@ -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;
@@ -12,10 +12,15 @@ import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class BungeeChatListener implements Listener public class BungeeChatListener implements Listener
{ {
private BungeeMain plugin; private BungeeMain plugin;
private Set<UUID> toggledPlayers = new HashSet<>();
public BungeeChatListener(BungeeMain plugin) public BungeeChatListener(BungeeMain plugin)
{ {
@@ -25,6 +30,10 @@ public class BungeeChatListener implements Listener
@EventHandler @EventHandler
public void chat(ChatEvent event) public void chat(ChatEvent event)
{ {
if (event.getMessage().startsWith("/"))
{
return;
}
if (!(event.getSender() instanceof ProxiedPlayer)) if (!(event.getSender() instanceof ProxiedPlayer))
{ {
return; return;
@@ -38,13 +47,14 @@ public class BungeeChatListener implements Listener
Configuration config = plugin.getConfig(); Configuration config = plugin.getConfig();
String character = config.getString("settings.character"); String character = config.getString("settings.character");
if (!event.getMessage().startsWith(character)) boolean isToggled = toggledPlayers.contains(player.getUniqueId());
if (!event.getMessage().startsWith(character) && !isToggled)
{ {
return; return;
} }
String format = config.getString("settings.format"); String format = config.getString("settings.format");
String message = event.getMessage().substring(character.length()).trim(); String message = event.getMessage().substring(isToggled ? 0 : character.length()).trim();
BungeeStaffChatEvent chatEvent = new BungeeStaffChatEvent(player, format, message); BungeeStaffChatEvent chatEvent = new BungeeStaffChatEvent(player, format, message);
plugin.getProxy().getPluginManager().callEvent(chatEvent); plugin.getProxy().getPluginManager().callEvent(chatEvent);
@@ -53,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));
@@ -76,4 +87,15 @@ public class BungeeChatListener implements Listener
return TextComponent.fromLegacyText(clr(text)); return TextComponent.fromLegacyText(clr(text));
} }
public boolean togglePlayer(UUID player)
{
if (toggledPlayers.contains(player))
{
toggledPlayers.remove(player);
return false;
}
toggledPlayers.add(player);
return true;
}
} }
@@ -1,8 +1,10 @@
package me.oskar3123.staffchat.spigot; package me.oskar3123.staffchat.spigot;
import me.clip.placeholderapi.PlaceholderAPI;
import me.oskar3123.staffchat.spigot.command.StaffChatCommand; import me.oskar3123.staffchat.spigot.command.StaffChatCommand;
import me.oskar3123.staffchat.spigot.listener.ChatListener; import me.oskar3123.staffchat.spigot.listener.ChatListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin public class Main extends JavaPlugin
@@ -12,15 +14,26 @@ public class Main extends JavaPlugin
public final String seePerm = "staffchat.see"; public final String seePerm = "staffchat.see";
public final String commandPerm = "staffchat.command"; public final String commandPerm = "staffchat.command";
public final String reloadPerm = "staffchat.reload"; public final String reloadPerm = "staffchat.reload";
public final ChatListener chatListener = new ChatListener(this);
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();
registerEvents(); registerEvents();
} }
@Override
public void saveDefaultConfig()
{
super.saveDefaultConfig();
getConfig().options().copyDefaults(true);
saveConfig();
}
private void registerCommands() private void registerCommands()
{ {
getCommand("staffchat").setExecutor(new StaffChatCommand(this)); getCommand("staffchat").setExecutor(new StaffChatCommand(this));
@@ -28,7 +41,21 @@ public class Main extends JavaPlugin
private void registerEvents() private void registerEvents()
{ {
Bukkit.getPluginManager().registerEvents(new ChatListener(this), this); Bukkit.getPluginManager().registerEvents(this.chatListener, this);
}
private boolean isPlaceholderApiEnabled()
{
return Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
}
public String replacePlaceholders(Player player, String string)
{
if (!isPlaceholderApiEnabled())
{
return string;
}
return PlaceholderAPI.setPlaceholders(player, string);
} }
} }
@@ -6,6 +6,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
public class StaffChatCommand implements CommandExecutor public class StaffChatCommand implements CommandExecutor
{ {
@@ -45,14 +46,36 @@ public class StaffChatCommand implements CommandExecutor
} }
return true; return true;
} }
else if (args[0].equalsIgnoreCase("toggle"))
{
if (sender.hasPermission(plugin.usePerm))
{
toggle(sender);
}
else
{
sender.sendMessage(noPerm);
}
return true;
}
help(sender, label); help(sender, label);
return true; return true;
} }
private void playerOnly(CommandSender sender)
{
sender.sendMessage(clr(config.getString("messages.prefix") + config.getString("messages.playeronly")));
}
private void help(CommandSender sender, String label) private void help(CommandSender sender, String label)
{ {
String prefix = clr(config.getString("messages.prefix")); String prefix = clr(config.getString("messages.prefix"));
sender.sendMessage(prefix + "Version " + plugin.getDescription().getVersion() + ", made by oskar3123"); sender.sendMessage(prefix + "Version " + plugin.getDescription().getVersion() + ", made by oskar3123");
if (sender.hasPermission(plugin.usePerm))
{
sender.sendMessage(prefix + "Message prefix: " + config.getString("settings.character"));
sender.sendMessage(prefix + "/" + label + " toggle - Toggles auto staffchat");
}
if (sender.hasPermission(plugin.reloadPerm)) if (sender.hasPermission(plugin.reloadPerm))
{ {
sender.sendMessage(prefix + "/" + label + " reload - Reloads the config file"); sender.sendMessage(prefix + "/" + label + " reload - Reloads the config file");
@@ -66,6 +89,18 @@ public class StaffChatCommand implements CommandExecutor
sender.sendMessage(clr(config.getString("messages.prefix") + config.getString("messages.reloaded"))); sender.sendMessage(clr(config.getString("messages.prefix") + config.getString("messages.reloaded")));
} }
private void toggle(CommandSender sender)
{
if (!(sender instanceof Player))
{
playerOnly(sender);
return;
}
boolean toggled = plugin.chatListener.togglePlayer(((Player) sender).getUniqueId());
String state = toggled ? config.getString("messages.onstring") : config.getString("messages.offstring");
sender.sendMessage(clr(config.getString("messages.prefix") + String.format(config.getString("messages.toggled"), state)));
}
private String clr(String string) private String clr(String string)
{ {
return ChatColor.translateAlternateColorCodes('&', string); return ChatColor.translateAlternateColorCodes('&', string);
@@ -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,19 +1,30 @@
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;
public class ChatListener implements Listener import java.io.*;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class ChatListener implements Listener, PluginMessageListener
{ {
private Main plugin; private Main plugin;
private Set<UUID> toggledPlayers = new HashSet<>();
public ChatListener(Main plugin) public ChatListener(Main plugin)
{ {
@@ -30,13 +41,18 @@ public class ChatListener implements Listener
FileConfiguration config = plugin.getConfig(); FileConfiguration config = plugin.getConfig();
String character = config.getString("settings.character"); String character = config.getString("settings.character");
if (!event.getMessage().startsWith(character)) boolean isToggled = toggledPlayers.contains(event.getPlayer().getUniqueId());
if (!event.getMessage().startsWith(character) && !isToggled)
{ {
return; return;
} }
String format = config.getString("settings.format"); String format = config.getString("settings.format");
String message = event.getMessage().substring(character.length()).trim(); String message = event.getMessage().substring(isToggled ? 0 : character.length()).trim();
if (config.getBoolean("settings.replaceplaceholdersinmessage"))
{
message = plugin.replacePlaceholders(event.getPlayer(), message);
}
StaffChatEvent chatEvent = new StaffChatEvent(event.getPlayer(), format, message); StaffChatEvent chatEvent = new StaffChatEvent(event.getPlayer(), format, message);
Bukkit.getServer().getPluginManager().callEvent(chatEvent); Bukkit.getServer().getPluginManager().callEvent(chatEvent);
@@ -45,18 +61,95 @@ 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 = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message));
format = ChatColor.translateAlternateColorCodes('&', format); format = ChatColor.translateAlternateColorCodes('&', format);
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)
{
if (toggledPlayers.contains(player))
{
toggledPlayers.remove(player);
return false;
}
toggledPlayers.add(player);
return true;
}
} }
+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.1.3 version: 1.3.0
+6
View File
@@ -1,7 +1,13 @@
settings: settings:
character: '@' character: '@'
format: '&b{NAME}: {MESSAGE}' format: '&b{NAME}: {MESSAGE}'
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'
playeronly: '&cPlayer only command'
reloaded: 'Reloaded the config file' reloaded: 'Reloaded the config file'
toggled: 'You toggled auto staffchat %s'
onstring: 'on'
offstring: 'off'
+3 -3
View File
@@ -1,13 +1,13 @@
name: StaffChat name: StaffChat
authors: [oskar3123] authors: [oskar3123]
main: me.oskar3123.staffchat.spigot.Main main: me.oskar3123.staffchat.spigot.Main
version: 1.1.3 api-version: 1.13
version: 1.3.0
softdepend: [PlaceholderAPI]
commands: commands:
staffchat: staffchat:
usage: /<command> usage: /<command>
description: Used to reload the config file. description: Used to reload the config file.
permissions: permissions:
staffchat.*: staffchat.*:
description: Gives you permission to everything in the plugin. description: Gives you permission to everything in the plugin.
File diff suppressed because it is too large Load Diff
@@ -1,308 +0,0 @@
package me.oskar3123.staffchat;
import net.md_5.bungee.api.*;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
import net.md_5.bungee.api.event.ServerConnectEvent;
import net.md_5.bungee.api.score.Scoreboard;
import java.net.InetSocketAddress;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
public class TestProxiedPlayer implements ProxiedPlayer
{
@Override
public String getDisplayName()
{
return null;
}
@Override
public void setDisplayName(String s)
{
}
@Override
public void sendMessage(ChatMessageType chatMessageType, BaseComponent... baseComponents)
{
}
@Override
public void sendMessage(ChatMessageType chatMessageType, BaseComponent baseComponent)
{
}
@Override
public void connect(ServerInfo serverInfo)
{
}
@Override
public void connect(ServerInfo serverInfo, ServerConnectEvent.Reason reason)
{
}
@Override
public void connect(ServerInfo serverInfo, Callback<Boolean> callback)
{
}
@Override
public void connect(ServerInfo serverInfo, Callback<Boolean> callback, ServerConnectEvent.Reason reason)
{
}
@Override
public void connect(ServerConnectRequest serverConnectRequest)
{
}
@Override
public Server getServer()
{
return null;
}
@Override
public int getPing()
{
return 0;
}
@Override
public void sendData(String s, byte[] bytes)
{
}
@Override
public PendingConnection getPendingConnection()
{
return null;
}
@Override
public void chat(String s)
{
}
@Override
public ServerInfo getReconnectServer()
{
return null;
}
@Override
public void setReconnectServer(ServerInfo serverInfo)
{
}
@Override
public String getUUID()
{
return null;
}
@Override
public UUID getUniqueId()
{
return null;
}
@Override
public Locale getLocale()
{
return null;
}
@Override
public byte getViewDistance()
{
return 0;
}
@Override
public ChatMode getChatMode()
{
return null;
}
@Override
public boolean hasChatColors()
{
return false;
}
@Override
public SkinConfiguration getSkinParts()
{
return null;
}
@Override
public MainHand getMainHand()
{
return null;
}
@Override
public void setTabHeader(BaseComponent baseComponent, BaseComponent baseComponent1)
{
}
@Override
public void setTabHeader(BaseComponent[] baseComponents, BaseComponent[] baseComponents1)
{
}
@Override
public void resetTabHeader()
{
}
@Override
public void sendTitle(Title title)
{
}
@Override
public boolean isForgeUser()
{
return false;
}
@Override
public Map<String, String> getModList()
{
return null;
}
@Override
public Scoreboard getScoreboard()
{
return null;
}
@Override
public String getName()
{
return null;
}
@Override
public void sendMessage(String s)
{
}
@Override
public void sendMessages(String... strings)
{
}
@Override
public void sendMessage(BaseComponent... baseComponents)
{
}
@Override
public void sendMessage(BaseComponent baseComponent)
{
}
@Override
public Collection<String> getGroups()
{
return null;
}
@Override
public void addGroups(String... strings)
{
}
@Override
public void removeGroups(String... strings)
{
}
@Override
public boolean hasPermission(String s)
{
return false;
}
@Override
public void setPermission(String s, boolean b)
{
}
@Override
public Collection<String> getPermissions()
{
return null;
}
@Override
public InetSocketAddress getAddress()
{
return null;
}
@Override
public void disconnect(String s)
{
}
@Override
public void disconnect(BaseComponent... baseComponents)
{
}
@Override
public void disconnect(BaseComponent baseComponent)
{
}
@Override
public boolean isConnected()
{
return false;
}
@Override
public Unsafe unsafe()
{
return null;
}
}
@@ -1,57 +0,0 @@
package me.oskar3123.staffchat.bungee.event;
import me.oskar3123.staffchat.TestProxiedPlayer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class BungeeStaffChatEventTest
{
private ProxiedPlayer player;
private String format;
private String message;
private BungeeStaffChatEvent event;
@Before
public void before()
{
this.player = new TestProxiedPlayer();
this.format = "Format";
this.message = "Message";
this.event = new BungeeStaffChatEvent(player, format, message);
}
@Test
public void testFormat()
{
assertEquals(format, event.getFormat());
String newFormat = "New Format";
event.setFormat(newFormat);
assertEquals(newFormat, event.getFormat());
}
@Test
public void getMessage()
{
assertEquals(message, event.getMessage());
}
@Test
public void getPlayer()
{
assertEquals(player, event.getPlayer());
}
@Test
public void testCancelled()
{
event.setCancelled(true);
assertTrue(event.isCancelled());
event.setCancelled(false);
assertFalse(event.isCancelled());
}
}
@@ -1,57 +0,0 @@
package me.oskar3123.staffchat.spigot.event;
import me.oskar3123.staffchat.TestPlayer;
import org.bukkit.entity.Player;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class StaffChatEventTest
{
private Player player;
private String format;
private String message;
private StaffChatEvent event;
@Before
public void before()
{
this.player = new TestPlayer();
this.format = "Format";
this.message = "Message";
this.event = new StaffChatEvent(player, format, message);
}
@Test
public void testFormat()
{
assertEquals(format, event.getFormat());
String newFormat = "New Format";
event.setFormat(newFormat);
assertEquals(newFormat, event.getFormat());
}
@Test
public void getPlayer()
{
assertEquals(player, event.getPlayer());
}
@Test
public void getMessage()
{
assertEquals(message, event.getMessage());
}
@Test
public void testCancelled()
{
event.setCancelled(true);
assertTrue(event.isCancelled());
event.setCancelled(false);
assertFalse(event.isCancelled());
}
}
@@ -1,16 +0,0 @@
package me.oskar3123.staffchat.util;
import org.junit.Test;
import static org.junit.Assert.*;
public class StringUtilsTest
{
@Test
public void sanitize()
{
assertEquals("message", "hejsan \\$ \\\\ xd", StringUtils.sanitize("hejsan $ \\ xd"));
}
}