From c57fb7223a1d8138d43b12fb3604f361b8205093 Mon Sep 17 00:00:00 2001 From: oskar3123 Date: Tue, 20 Nov 2018 19:12:59 +0100 Subject: [PATCH] version 1.2.0 added /staffchat toggle added placeholderapi support (spigot version only) small fixes for bungeecord version --- pom.xml | 17 ++++++-- .../staffchat/bungee/BungeeMain.java | 43 ++++++++++++++++++- .../command/BungeeStaffChatCommand.java | 35 +++++++++++++++ .../bungee/listener/BungeeChatListener.java | 25 ++++++++++- .../me/oskar3123/staffchat/spigot/Main.java | 27 +++++++++++- .../spigot/command/StaffChatCommand.java | 35 +++++++++++++++ .../spigot/listener/ChatListener.java | 29 +++++++++++-- src/main/resources/bungee.yml | 2 +- src/main/resources/config.yml | 7 ++- src/main/resources/plugin.yml | 6 +-- 10 files changed, 211 insertions(+), 15 deletions(-) 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.