17 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
oskar3123 361d302b36 merge 2018-07-30 13:07:01 +02:00
oskar3123 d6551b317f change pom to spigot 1.13 2018-07-30 13:03:08 +02:00
oskar3123andGitHub 5105e76dc5 Add coverage shield to readme 2018-05-16 14:07:27 +02:00
oskar3123 82cfcb4862 add more tests 2018-05-15 01:52:05 +02:00
oskar3123 671bb0d8b2 add sourceencoding to pom 2018-05-15 01:27:11 +02:00
oskar3123 79fb7e84a5 add jacoco test to travis yml 2018-05-15 01:22:19 +02:00
oskar3123 bba628e3f2 add JaCoCo maven plugin 2018-05-15 01:21:13 +02:00
oskar3123 b0951d7427 add sanitize junit test to test coveralls 2018-05-15 01:11:15 +02:00
oskar3123 0e7a6e58e2 test coveralls 2 2018-05-15 00:57:54 +02:00
oskar3123 5850ff2009 test coveralls 2018-05-15 00:53:29 +02:00
oskar3123andGitHub f98a038e38 Change documentation a bit 2018-05-01 04:06:17 +02:00
oskar3123andGitHub e927ca5f3c Add event documentation to the README 2018-05-01 04:05:27 +02:00
16 changed files with 372 additions and 34 deletions
+1
View File
@@ -0,0 +1 @@
repo_token: $COVERALLS_REPO_TOKEN
+2
View File
@@ -9,3 +9,5 @@ deploy:
skip_cleanup: true skip_cleanup: true
on: on:
tags: true tags: true
after_success:
- mvn clean test jacoco:report coveralls:report
+50
View File
@@ -9,3 +9,53 @@ Simple and highly configurable staffchat
## Download ## Download
You can download the plugin from the [Spigot resource page](https://www.spigotmc.org/resources/37804/) or via the [GitHub releases](https://github.com/oskar3123/StaffChat/releases) You can download the plugin from the [Spigot resource page](https://www.spigotmc.org/resources/37804/) or via the [GitHub releases](https://github.com/oskar3123/StaffChat/releases)
## Event API (For developers)
### Bukkit/Spigot
```java
public class StaffChatListener implements Listener
{
@EventHandler
public void onStaffChat(StaffChatEvent event)
{
// String format = event.getFormat();
// event.setFormat("&b{NAME} >> {MESSAGE}");
// String message = event.getMessage();
// Player player = event.getPlayer();
// event.setCancelled(true);
}
}
```
Register the listener with
```java
getServer().getPluginManager().registerEvents(new StaffChatListener(), this);
```
in your plugin onEnable.
### BungeeCord
```java
public class StaffChatListener implements Listener
{
@EventHandler
public void onStaffChat(BungeeStaffChatEvent event)
{
// String format = event.getFormat();
// event.setFormat("&b{NAME} >> {MESSAGE}");
// String message = event.getMessage();
// Player player = event.getPlayer();
// event.setCancelled(true);
}
}
```
Register the listener with
```java
getProxy().getPluginManager().registerListener(this, new StaffChatListener());
```
in your plugin onEnable.
+19 -4
View File
@@ -7,7 +7,11 @@
<groupId>me.oskar3123</groupId> <groupId>me.oskar3123</groupId>
<artifactId>staffchat</artifactId> <artifactId>staffchat</artifactId>
<version>1.1.3-SNAPSHOT</version> <version>1.3.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories> <repositories>
<repository> <repository>
@@ -18,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.12.2-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.12.2-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.12-SNAPSHOT</version> <version>1.13-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.9.2</version>
<scope>provided</scope>
</dependency> </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>
@@ -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;
@@ -2,6 +2,7 @@ package me.oskar3123.staffchat.bungee.listener;
import me.oskar3123.staffchat.bungee.BungeeMain; import me.oskar3123.staffchat.bungee.BungeeMain;
import me.oskar3123.staffchat.bungee.event.BungeeStaffChatEvent; import me.oskar3123.staffchat.bungee.event.BungeeStaffChatEvent;
import me.oskar3123.staffchat.util.StringUtils;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
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;
@@ -11,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)
{ {
@@ -24,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;
@@ -37,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);
@@ -52,9 +63,10 @@ public class BungeeChatListener implements Listener
return; return;
} }
format = chatEvent.getFormat(); format = chatEvent.getFormat();
message = chatEvent.getMessage();
format = format.replaceAll("\\{NAME\\}", sanitize(player.getName())); format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(player.getName()));
format = format.replaceAll("\\{MESSAGE\\}", sanitize(message)); format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message));
final BaseComponent[] messageComponents = txt(format); final BaseComponent[] messageComponents = txt(format);
plugin.getProxy().getPlayers().stream() plugin.getProxy().getPlayers().stream()
@@ -75,11 +87,15 @@ public class BungeeChatListener implements Listener
return TextComponent.fromLegacyText(clr(text)); return TextComponent.fromLegacyText(clr(text));
} }
private String sanitize(String string) public boolean togglePlayer(UUID player)
{ {
string = string.replaceAll("\\\\", "\\\\\\\\"); if (toggledPlayers.contains(player))
string = string.replaceAll("\\$", "\\\\\\$"); {
return string; 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,18 +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 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)
{ {
@@ -29,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);
@@ -44,25 +61,95 @@ public class ChatListener implements Listener
return; return;
} }
format = chatEvent.getFormat(); format = chatEvent.getFormat();
message = chatEvent.getMessage();
format = format.replaceAll("\\{NAME\\}", sanitize(event.getPlayer().getName())); format = plugin.replacePlaceholders(event.getPlayer(), format);
format = format.replaceAll("\\{MESSAGE\\}", sanitize(message)); format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(event.getPlayer().getName()));
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);
} }
private String sanitize(String string) @Override
public void onPluginMessageReceived(String channel, Player player, byte[] message)
{ {
string = string.replaceAll("\\\\", "\\\\\\\\"); if (!channel.equals("BungeeCord")) {
string = string.replaceAll("\\$", "\\\\\\$"); return;
return string; }
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;
} }
} }
@@ -0,0 +1,13 @@
package me.oskar3123.staffchat.util;
public class StringUtils
{
public static String sanitize(String string)
{
string = string.replaceAll("\\\\", "\\\\\\\\");
string = string.replaceAll("\\$", "\\\\\\$");
return string;
}
}
+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
+7 -1
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'
reloaded: 'Reloaded the config file' playeronly: '&cPlayer only command'
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.