diff --git a/pom.xml b/pom.xml
index c78c08f..6a5abc1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
me.oskar3123
staffchat
- 1.1.5-SNAPSHOT
+ 1.2.0-SNAPSHOT
UTF-8
@@ -22,27 +22,38 @@
bungeecord-repo
https://oss.sonatype.org/content/repositories/snapshots/
+
+ placeholderapi
+ http://repo.extendedclip.com/content/repositories/placeholderapi/
+
org.spigotmc
spigot-api
- 1.13-R0.1-SNAPSHOT
+ 1.13.2-R0.1-SNAPSHOT
org.bukkit
bukkit
- 1.13-R0.1-SNAPSHOT
+ 1.13.2-R0.1-SNAPSHOT
net.md-5
bungeecord-api
1.13-SNAPSHOT
+
+ me.clip
+ placeholderapi
+ 2.9.2
+ provided
+
+ ${project.name}-${project.version}
org.apache.maven.plugins
diff --git a/src/main/java/me/oskar3123/staffchat/bungee/BungeeMain.java b/src/main/java/me/oskar3123/staffchat/bungee/BungeeMain.java
index 0d2900b..5143caa 100644
--- a/src/main/java/me/oskar3123/staffchat/bungee/BungeeMain.java
+++ b/src/main/java/me/oskar3123/staffchat/bungee/BungeeMain.java
@@ -19,6 +19,7 @@ public class BungeeMain extends Plugin
public final String seePerm = "staffchat.see";
public final String commandPerm = "staffchat.command";
public final String reloadPerm = "staffchat.reload";
+ public final BungeeChatListener chatListener = new BungeeChatListener(this);
private Configuration config;
public void onEnable()
@@ -40,7 +41,7 @@ public class BungeeMain extends Plugin
private void registerEvents()
{
- getProxy().getPluginManager().registerListener(this, new BungeeChatListener(this));
+ getProxy().getPluginManager().registerListener(this, chatListener);
}
public boolean reloadConfig()
@@ -48,15 +49,42 @@ public class BungeeMain extends Plugin
try
{
config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "config.yml"));
+ loadDefaultValues();
return true;
}
catch (IOException e)
{
config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(getResourceAsStream("config.yml"));
+ loadDefaultValues();
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()
{
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");
+ }
+ }
+
}
diff --git a/src/main/java/me/oskar3123/staffchat/bungee/command/BungeeStaffChatCommand.java b/src/main/java/me/oskar3123/staffchat/bungee/command/BungeeStaffChatCommand.java
index 4c4283e..f0a2742 100644
--- a/src/main/java/me/oskar3123/staffchat/bungee/command/BungeeStaffChatCommand.java
+++ b/src/main/java/me/oskar3123/staffchat/bungee/command/BungeeStaffChatCommand.java
@@ -5,6 +5,7 @@ import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.BaseComponent;
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.config.Configuration;
@@ -46,13 +47,35 @@ public class BungeeStaffChatCommand extends Command
}
return;
}
+ else if (args[0].equalsIgnoreCase("toggle"))
+ {
+ if (sender.hasPermission(plugin.usePerm))
+ {
+ toggle(sender);
+ }
+ else
+ {
+ sender.sendMessage(noPerm);
+ }
+ return;
+ }
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)
{
String prefix = config.getString("messages.prefix");
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))
{
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")));
}
+ 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)
{
return ChatColor.translateAlternateColorCodes('&', string);
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 855614b..f32e82a 100644
--- a/src/main/java/me/oskar3123/staffchat/bungee/listener/BungeeChatListener.java
+++ b/src/main/java/me/oskar3123/staffchat/bungee/listener/BungeeChatListener.java
@@ -12,10 +12,15 @@ import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.event.EventHandler;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
public class BungeeChatListener implements Listener
{
private BungeeMain plugin;
+ private Set toggledPlayers = new HashSet<>();
public BungeeChatListener(BungeeMain plugin)
{
@@ -25,6 +30,10 @@ public class BungeeChatListener implements Listener
@EventHandler
public void chat(ChatEvent event)
{
+ if (event.getMessage().startsWith("/"))
+ {
+ return;
+ }
if (!(event.getSender() instanceof ProxiedPlayer))
{
return;
@@ -38,13 +47,14 @@ public class BungeeChatListener implements Listener
Configuration config = plugin.getConfig();
String character = config.getString("settings.character");
- if (!event.getMessage().startsWith(character))
+ boolean isToggled = toggledPlayers.contains(player.getUniqueId());
+ if (!event.getMessage().startsWith(character) && !isToggled)
{
return;
}
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);
plugin.getProxy().getPluginManager().callEvent(chatEvent);
@@ -76,4 +86,15 @@ public class BungeeChatListener implements Listener
return TextComponent.fromLegacyText(clr(text));
}
+ public boolean togglePlayer(UUID player)
+ {
+ if (toggledPlayers.contains(player))
+ {
+ toggledPlayers.remove(player);
+ return false;
+ }
+ toggledPlayers.add(player);
+ return true;
+ }
+
}
diff --git a/src/main/java/me/oskar3123/staffchat/spigot/Main.java b/src/main/java/me/oskar3123/staffchat/spigot/Main.java
index bbc28a6..02ac4d8 100644
--- a/src/main/java/me/oskar3123/staffchat/spigot/Main.java
+++ b/src/main/java/me/oskar3123/staffchat/spigot/Main.java
@@ -1,8 +1,10 @@
package me.oskar3123.staffchat.spigot;
+import me.clip.placeholderapi.PlaceholderAPI;
import me.oskar3123.staffchat.spigot.command.StaffChatCommand;
import me.oskar3123.staffchat.spigot.listener.ChatListener;
import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin
@@ -12,6 +14,7 @@ public class Main extends JavaPlugin
public final String seePerm = "staffchat.see";
public final String commandPerm = "staffchat.command";
public final String reloadPerm = "staffchat.reload";
+ public final ChatListener chatListener = new ChatListener(this);
public void onEnable()
{
@@ -21,6 +24,14 @@ public class Main extends JavaPlugin
registerEvents();
}
+ @Override
+ public void saveDefaultConfig()
+ {
+ super.saveDefaultConfig();
+ getConfig().options().copyDefaults(true);
+ saveConfig();
+ }
+
private void registerCommands()
{
getCommand("staffchat").setExecutor(new StaffChatCommand(this));
@@ -28,7 +39,21 @@ public class Main extends JavaPlugin
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);
}
}
diff --git a/src/main/java/me/oskar3123/staffchat/spigot/command/StaffChatCommand.java b/src/main/java/me/oskar3123/staffchat/spigot/command/StaffChatCommand.java
index 42ab5c6..5a0d4ad 100644
--- a/src/main/java/me/oskar3123/staffchat/spigot/command/StaffChatCommand.java
+++ b/src/main/java/me/oskar3123/staffchat/spigot/command/StaffChatCommand.java
@@ -6,6 +6,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
public class StaffChatCommand implements CommandExecutor
{
@@ -45,14 +46,36 @@ public class StaffChatCommand implements CommandExecutor
}
return true;
}
+ else if (args[0].equalsIgnoreCase("toggle"))
+ {
+ if (sender.hasPermission(plugin.usePerm))
+ {
+ toggle(sender);
+ }
+ else
+ {
+ sender.sendMessage(noPerm);
+ }
+ return true;
+ }
help(sender, label);
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)
{
String prefix = clr(config.getString("messages.prefix"));
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))
{
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")));
}
+ 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)
{
return ChatColor.translateAlternateColorCodes('&', string);
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 1432328..6fdb834 100644
--- a/src/main/java/me/oskar3123/staffchat/spigot/listener/ChatListener.java
+++ b/src/main/java/me/oskar3123/staffchat/spigot/listener/ChatListener.java
@@ -10,10 +10,15 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
public class ChatListener implements Listener
{
private Main plugin;
+ private Set toggledPlayers = new HashSet<>();
public ChatListener(Main plugin)
{
@@ -30,13 +35,18 @@ public class ChatListener implements Listener
FileConfiguration config = plugin.getConfig();
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;
}
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);
Bukkit.getServer().getPluginManager().callEvent(chatEvent);
@@ -47,8 +57,10 @@ public class ChatListener implements Listener
format = chatEvent.getFormat();
format = format.replaceAll("\\{NAME\\}", StringUtils.sanitize(event.getPlayer().getName()));
- format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message));
format = ChatColor.translateAlternateColorCodes('&', format);
+ format = plugin.replacePlaceholders(event.getPlayer(), format);
+ format = format.replaceAll("\\{MESSAGE\\}", StringUtils.sanitize(message));
+
final String finalMessage = format;
Bukkit.getOnlinePlayers().stream()
@@ -59,4 +71,15 @@ public class ChatListener implements Listener
event.setCancelled(true);
}
+ public boolean togglePlayer(UUID player)
+ {
+ if (toggledPlayers.contains(player))
+ {
+ toggledPlayers.remove(player);
+ return false;
+ }
+ toggledPlayers.add(player);
+ return true;
+ }
+
}
diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml
index e26ed1e..cf2d0b8 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.1.5
+version: 1.2.0
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index d874c06..e043796 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,7 +1,12 @@
settings:
character: '@'
format: '&b{NAME}: {MESSAGE}'
+ replaceplaceholdersinmessage: true
messages:
prefix: '&7StaffChat&8> &7'
nopermission: '&cYou don''t have permission to do that'
- reloaded: 'Reloaded the config file'
\ No newline at end of file
+ playeronly: '&cPlayer only command'
+ reloaded: 'Reloaded the config file'
+ toggled: 'You toggled auto staffchat %s'
+ onstring: 'on'
+ offstring: 'off'
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index be2283e..2834402 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,13 +1,13 @@
name: StaffChat
authors: [oskar3123]
main: me.oskar3123.staffchat.spigot.Main
-version: 1.1.5
-
+api-version: 1.13
+version: 1.2.0
+softdepend: [PlaceholderAPI]
commands:
staffchat:
usage: /
description: Used to reload the config file.
-
permissions:
staffchat.*:
description: Gives you permission to everything in the plugin.