diff --git a/bungee/pom.xml b/bungee/pom.xml index b8ea570c..00220b3f 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ chatty ru.mrbrikster - 2.17.1 + 2.18 4.0.0 diff --git a/pom.xml b/pom.xml index 0dbdf2a1..aea2a423 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ru.mrbrikster chatty - 2.17.1 + 2.18 pom diff --git a/spigot/pom.xml b/spigot/pom.xml index 3a7d60c3..6394ef64 100644 --- a/spigot/pom.xml +++ b/spigot/pom.xml @@ -5,7 +5,7 @@ chatty ru.mrbrikster - 2.17.1 + 2.18 4.0.0 diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/Chatty.java b/spigot/src/main/java/ru/mrbrikster/chatty/Chatty.java index 5dea4360..86308ecf 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/Chatty.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/Chatty.java @@ -25,6 +25,7 @@ public final class Chatty extends BukkitBasePlugin { private Messages messages; private Debugger debugger; private Configuration configuration; + private ChatManager chatManager; public static Chatty instance() { return Chatty.instance; @@ -51,9 +52,9 @@ public void onEnable() { configuration = getConfiguration("config.yml"); } - ChatManager chatManager = new ChatManager(configuration); ModerationManager moderationManager = new ModerationManager(this, configuration); JsonStorage jsonStorage = new JsonStorage(configuration, this); + this.chatManager = new ChatManager(configuration, jsonStorage); DependencyManager dependencyManager = new DependencyManager(configuration, jsonStorage, this); this.messages = new Messages(this, configuration); @@ -61,7 +62,7 @@ public void onEnable() { configuration.onReload(config -> this.messages = new Messages(this, config)); - this.commandManager = new CommandManager(configuration, dependencyManager, jsonStorage, moderationManager); + this.commandManager = new CommandManager(configuration, chatManager, dependencyManager, jsonStorage, moderationManager); new NotificationManager(configuration); EventPriority eventPriority; @@ -146,6 +147,11 @@ public void onEnable() { public void onDisable() { this.getServer().getScheduler().cancelTasks(this); this.commandManager.unregisterAll(); + this.chatManager.getChats().forEach(chat -> { + if (chat.getBukkitCommand() != null) { + chat.getBukkitCommand().unregister(Chatty.instance()); + } + }); } } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/chat/Chat.java b/spigot/src/main/java/ru/mrbrikster/chatty/chat/Chat.java index 1d0f87dc..c74855c9 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/chat/Chat.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/chat/Chat.java @@ -3,10 +3,12 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import lombok.Getter; +import lombok.Setter; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; +import ru.mrbrikster.baseplugin.commands.BukkitCommand; import ru.mrbrikster.chatty.Chatty; import ru.mrbrikster.chatty.reflection.Reflection; @@ -26,8 +28,11 @@ public class Chat { @Getter private final boolean permission; @Getter private final long cooldown; @Getter private final int money; + @Getter private final String command; - public Chat(String name, boolean enable, String format, int range, String symbol, boolean permission, long cooldown, int money) { + @Getter @Setter private BukkitCommand bukkitCommand; + + public Chat(String name, boolean enable, String format, int range, String symbol, boolean permission, long cooldown, int money, String command) { this.name = name; this.enable = enable; this.format = format; @@ -36,6 +41,13 @@ public Chat(String name, boolean enable, String format, int range, String symbol this.permission = permission; this.cooldown = cooldown * 1000; this.money = money; + this.command = command; + } + + public boolean isAllowed(Player player) { + return !isPermission() + || player.hasPermission(String.format("chatty.chat.%s", getName())) + || player.hasPermission(String.format("chatty.chat.%s.write", getName())); } List getRecipients(Player player, JsonStorage jsonStorage) { diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatListener.java b/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatListener.java index 8b7e6cdd..a9496466 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatListener.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatListener.java @@ -1,6 +1,7 @@ package ru.mrbrikster.chatty.chat; import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -31,10 +32,7 @@ import ru.mrbrikster.chatty.reflection.Reflection; import ru.mrbrikster.chatty.util.Pair; -import java.util.ArrayList; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -100,9 +98,10 @@ public void execute(Listener listener, Event event) { private void onChat(AsyncPlayerChatEvent playerChatEvent) { final Player player = playerChatEvent.getPlayer(); - String message = playerChatEvent.getMessage(); - Chat chat = getChat(player, message); + Pair chatMessagePair = getChat(player, playerChatEvent.getMessage()); + Chat chat = chatMessagePair.getKey(); + String message = chatMessagePair.getValue(); if (chat == null) { playerChatEvent.setCancelled(true); @@ -112,10 +111,6 @@ private void onChat(AsyncPlayerChatEvent playerChatEvent) { boolean json = configuration.getNode("json.enable").getAsBoolean(false); - if (!chat.getSymbol().isEmpty()) { - message = message.substring(chat.getSymbol().length()); - } - message = stylish(player, message, chat.getName()); if (ChatColor.stripColor(message).isEmpty()) { @@ -383,11 +378,11 @@ public void onJsonMessage(AsyncPlayerChatEvent playerChatEvent) { List canSeeSwears = new ArrayList<>(); List cannotSeeSwears = new ArrayList<>(); - Reflection.getOnlinePlayers().forEach(onlinePlayer -> { - if (onlinePlayer.hasPermission("chatty.swears.see")) { - canSeeSwears.add(onlinePlayer); + playerChatEvent.getRecipients().forEach(recipient -> { + if (recipient.hasPermission("chatty.swears.see")) { + canSeeSwears.add(recipient); } else { - cannotSeeSwears.add(onlinePlayer); + cannotSeeSwears.add(recipient); } }); @@ -409,6 +404,7 @@ public void onJsonMessage(AsyncPlayerChatEvent playerChatEvent) { formattedMessage.send(playerChatEvent.getRecipients()); } + playerChatEvent.setFormat(formattedMessage.toReadableText().replace("%", "%%")); playerChatEvent.getRecipients().clear(); } @@ -481,27 +477,38 @@ public void onPlayerDeath(PlayerDeathEvent playerDeathEvent) { } } - private Chat getChat(final Player player, final String message) { + private Pair getChat(final Player player, String message) { Chat currentChat = null; - for (Chat chat : this.chatManager.getChats()) { - if (!chat.isEnable()) { - continue; + Optional optional = jsonStorage.getProperty(player, "chat"); + if (optional.isPresent()) { + JsonElement jsonElement = optional.get(); + if (jsonElement.isJsonPrimitive()) { + String chatName = jsonElement.getAsJsonPrimitive().getAsString(); + Chat chat = chatManager.getChat(chatName); + if (chat != null) { + if (chat.isAllowed(player)) { + currentChat = chat; + } + } } + } - if (!chat.isPermission() - || player.hasPermission(String.format("chatty.chat.%s", chat.getName())) - || player.hasPermission(String.format("chatty.chat.%s.write", chat.getName()))) { + for (Chat chat : this.chatManager.getChats()) { + if (chat.isAllowed(player)) { if (chat.getSymbol().isEmpty()) { - currentChat = chat; + if (currentChat == null) { + currentChat = chat; + } } else if (message.startsWith(chat.getSymbol())) { currentChat = chat; + message = message.substring(chat.getSymbol().length()); break; } } } - return currentChat; + return new Pair<>(currentChat, message); } private String stylish(Player player, String message, String chat) { diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatManager.java b/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatManager.java index bcbda383..30359caf 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatManager.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/chat/ChatManager.java @@ -1,7 +1,10 @@ package ru.mrbrikster.chatty.chat; +import com.google.gson.JsonPrimitive; import lombok.Getter; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import ru.mrbrikster.baseplugin.commands.BukkitCommand; import ru.mrbrikster.baseplugin.config.Configuration; import ru.mrbrikster.chatty.Chatty; @@ -20,9 +23,11 @@ public class ChatManager { @Getter private final List chats = new ArrayList<>(); @Getter private final Logger logger; private final Configuration configuration; + private final JsonStorage jsonStorage; - public ChatManager(Configuration configuration) { + public ChatManager(Configuration configuration, JsonStorage jsonStorage) { this.configuration = configuration; + this.jsonStorage = jsonStorage; this.logger = new Logger(); init(); @@ -30,6 +35,16 @@ public ChatManager(Configuration configuration) { configuration.onReload(config -> reload()); } + public Chat getChat(String chatName) { + for (Chat chat : chats) { + if (chat.getName().equalsIgnoreCase(chatName)) { + return chat; + } + } + + return null; + } + private void init() { configuration.getNode("chats") .getChildNodes().stream().map(chatNode -> @@ -40,11 +55,49 @@ private void init() { chatNode.getNode("symbol").getAsString(""), chatNode.getNode("permission").getAsBoolean(true), chatNode.getNode("cooldown").getAsLong(-1), - chatNode.getNode("money").getAsInt(0))) - .forEach(this.chats::add); + chatNode.getNode("money").getAsInt(0), + chatNode.getNode("command").getAsString(null))) + .forEach(chat -> { + if (chat.isEnable()) { + if (chat.getCommand() != null) { + chat.setBukkitCommand(new BukkitCommand(chat.getCommand()) { + + @Override + public void handle(CommandSender sender, String label, String[] args) { + if (sender instanceof Player) { + if (!sender.hasPermission("chatty.command.chat")) { + sender.sendMessage(Chatty.instance().messages().get("no-permission")); + return; + } + + if (chat.isAllowed((Player) sender)) { + jsonStorage.setProperty((Player) sender, "chat", new JsonPrimitive(chat.getName())); + sender.sendMessage(Chatty.instance().messages().get("chat-command.chat-switched").replace("{chat}", chat.getName())); + } else { + sender.sendMessage(Chatty.instance().messages().get("chat-command.no-chat-permission")); + } + } else { + sender.sendMessage(Chatty.instance().messages().get("only-for-players")); + } + } + + }); + + chat.getBukkitCommand().register(Chatty.instance()); + } + + this.chats.add(chat); + } + }); } private void reload() { + chats.forEach(chat -> { + if (chat.getBukkitCommand() != null) { + chat.getBukkitCommand().unregister(Chatty.instance()); + } + }); + chats.clear(); init(); } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/commands/ChatCommand.java b/spigot/src/main/java/ru/mrbrikster/chatty/commands/ChatCommand.java new file mode 100644 index 00000000..a8fafaea --- /dev/null +++ b/spigot/src/main/java/ru/mrbrikster/chatty/commands/ChatCommand.java @@ -0,0 +1,58 @@ +package ru.mrbrikster.chatty.commands; + +import com.google.gson.JsonPrimitive; +import net.amoebaman.util.ArrayWrapper; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import ru.mrbrikster.baseplugin.commands.BukkitCommand; +import ru.mrbrikster.baseplugin.config.Configuration; +import ru.mrbrikster.chatty.Chatty; +import ru.mrbrikster.chatty.chat.Chat; +import ru.mrbrikster.chatty.chat.ChatManager; +import ru.mrbrikster.chatty.chat.JsonStorage; + +public class ChatCommand extends BukkitCommand { + + private final ChatManager chatManager; + private final JsonStorage jsonStorage; + + public ChatCommand(Configuration configuration, ChatManager chatManager, JsonStorage jsonStorage) { + super("chat", ArrayWrapper.toArray(configuration.getNode("miscellaneous.commands.chat.aliases").getAsStringList(), String.class)); + + this.chatManager = chatManager; + this.jsonStorage = jsonStorage; + } + + @Override + public void handle(CommandSender sender, String label, String[] args) { + if (sender instanceof Player) { + if (!sender.hasPermission("chatty.command.chat")) { + sender.sendMessage(Chatty.instance().messages().get("no-permission")); + return; + } + + if (args.length == 1) { + String chatName = args[0]; + Chat chat = chatManager.getChat(chatName); + + if (chat != null) { + if (!chat.isPermission() + || sender.hasPermission(String.format("chatty.chat.%s", chat.getName())) + || sender.hasPermission(String.format("chatty.chat.%s.write", chat.getName()))) { + jsonStorage.setProperty((Player) sender, "chat", new JsonPrimitive(chat.getName())); + sender.sendMessage(Chatty.instance().messages().get("chat-command.chat-switched").replace("{chat}", chat.getName())); + } else { + sender.sendMessage(Chatty.instance().messages().get("chat-command.no-chat-permission")); + } + } else { + sender.sendMessage(Chatty.instance().messages().get("chat-command.chat-not-found")); + } + } else { + sender.sendMessage(Chatty.instance().messages().get("chat-command.usage").replace("{label}", label)); + } + } else { + sender.sendMessage(Chatty.instance().messages().get("only-for-players")); + } + } + +} diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/commands/ClearChatCommand.java b/spigot/src/main/java/ru/mrbrikster/chatty/commands/ClearChatCommand.java index 3abd3702..420a8a06 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/commands/ClearChatCommand.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/commands/ClearChatCommand.java @@ -1,11 +1,12 @@ package ru.mrbrikster.chatty.commands; import net.amoebaman.util.ArrayWrapper; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import ru.mrbrikster.baseplugin.commands.BukkitCommand; import ru.mrbrikster.baseplugin.config.Configuration; import ru.mrbrikster.chatty.Chatty; +import ru.mrbrikster.chatty.reflection.Reflection; public class ClearChatCommand extends BukkitCommand { @@ -16,14 +17,38 @@ public class ClearChatCommand extends BukkitCommand { @Override public void handle(CommandSender sender, String label, String[] args) { if (sender.hasPermission("chatty.command.clearchat")) { - Bukkit.getOnlinePlayers().forEach(player -> { - for (int i = 0; i < 100; i++) { - player.sendMessage(" "); + if (args.length == 0) { + if (sender instanceof Player) { + for (int i = 0; i < 100; i++) { + sender.sendMessage(" "); + } + + sender.sendMessage(Chatty.instance().messages().get("clearchat-command.clear-chat-for-yourself")); + } else { + sender.sendMessage(Chatty.instance().messages().get("only-for-players")); } + } else { + if (args.length == 1 && args[0].equalsIgnoreCase("all")) { + if (sender.hasPermission("chatty.command.clearchat.all")) { + String chatClearedMessage = Chatty.instance().messages().get("clearchat-command.clear-chat-for-all").replace("{player}", sender.getName()); + + Reflection.getOnlinePlayers().forEach(player -> { + for (int i = 0; i < 100; i++) { + player.sendMessage(" "); + } - player.sendMessage(Chatty.instance().messages().get("chat-cleared").replace("{player}", sender.getName())); - }); - } else sender.sendMessage(Chatty.instance().messages().get("no-permission")); + player.sendMessage(chatClearedMessage); + }); + } else { + sender.sendMessage(Chatty.instance().messages().get("no-permission")); + } + } else { + sender.sendMessage(Chatty.instance().messages().get("clearchat-command.usage").replace("{label}", label)); + } + } + } else { + sender.sendMessage(Chatty.instance().messages().get("no-permission")); + } } } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/commands/CommandManager.java b/spigot/src/main/java/ru/mrbrikster/chatty/commands/CommandManager.java index 38e8e86a..2964a5bd 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/commands/CommandManager.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/commands/CommandManager.java @@ -2,6 +2,7 @@ import ru.mrbrikster.baseplugin.config.Configuration; import ru.mrbrikster.chatty.Chatty; +import ru.mrbrikster.chatty.chat.ChatManager; import ru.mrbrikster.chatty.chat.JsonStorage; import ru.mrbrikster.chatty.commands.pm.IgnoreCommand; import ru.mrbrikster.chatty.commands.pm.MsgCommand; @@ -12,8 +13,9 @@ public class CommandManager { private final Configuration configuration; - private final JsonStorage jsonStorage; + private final ChatManager chatManager; private final DependencyManager dependencyManager; + private final JsonStorage jsonStorage; private final ModerationManager moderationManager; private ChattyCommand chattyCommand; @@ -23,14 +25,17 @@ public class CommandManager { private MsgCommand msgCommand; private ReplyCommand replyCommand; private SwearsCommand swearsCommand; + private ChatCommand chatCommand; private PrefixCommand prefixCommand; private SuffixCommand suffixCommand; public CommandManager(Configuration configuration, + ChatManager chatManager, DependencyManager dependencyManager, JsonStorage jsonStorage, ModerationManager moderationManager) { this.configuration = configuration; + this.chatManager = chatManager; this.dependencyManager = dependencyManager; this.jsonStorage = jsonStorage; this.moderationManager = moderationManager; @@ -77,6 +82,11 @@ private void init() { this.swearsCommand.register(Chatty.instance()); } + if (configuration.getNode("miscellaneous.commands.chat.enable").getAsBoolean(false)) { + this.chatCommand = new ChatCommand(configuration, chatManager, jsonStorage); + this.chatCommand.register(Chatty.instance()); + } + if (configuration.getNode("miscellaneous.commands.prefix.enable").getAsBoolean(false)) { this.prefixCommand = new PrefixCommand(configuration, dependencyManager, jsonStorage); this.prefixCommand.register(Chatty.instance()); @@ -115,6 +125,10 @@ public void unregisterAll() { this.swearsCommand.unregister(Chatty.instance()); } + if (chatCommand != null) { + this.chatCommand.unregister(Chatty.instance()); + } + if (prefixCommand != null) { this.prefixCommand.unregister(Chatty.instance()); } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/MsgCommand.java b/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/MsgCommand.java index 8f0c8854..c3f03370 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/MsgCommand.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/MsgCommand.java @@ -15,6 +15,7 @@ import ru.mrbrikster.chatty.moderation.AdvertisementModerationMethod; import ru.mrbrikster.chatty.moderation.ModerationManager; import ru.mrbrikster.chatty.moderation.SwearModerationMethod; +import ru.mrbrikster.chatty.reflection.Reflection; import java.util.Arrays; @@ -169,13 +170,32 @@ public void handle(CommandSender sender, String label, String[] args) { .replace("{recipient-suffix}", recipientSuffix)) .replace("{message}", message)); - Bukkit.getOnlinePlayers().stream() + MsgCommand.sendMessageToSpy(sender, recipient, + recipientPrefix, recipientName, recipientSuffix, + senderPrefix, senderName, senderSuffix, + senderFormat, message, + jsonStorage, configuration); + } + + static void sendMessageToSpy(CommandSender sender, CommandSender recipient, + String recipientPrefix, String recipientName, String recipientSuffix, + String senderPrefix, String senderName, String senderSuffix, + String senderFormat, String message, + JsonStorage jsonStorage, Configuration configuration) { + Reflection.getOnlinePlayers().stream() .filter(spyPlayer -> !spyPlayer.equals(sender) && !spyPlayer.equals(recipient)) .filter(spyPlayer -> spyPlayer.hasPermission("chatty.spy") || spyPlayer.hasPermission("chatty.spy.pm")) .filter(spyPlayer -> jsonStorage.getProperty(spyPlayer, "spy-mode").orElse(new JsonPrimitive(true)).getAsBoolean()) .forEach(spyPlayer -> spyPlayer.sendMessage( ChatColor.translateAlternateColorCodes('&', configuration.getNode("spy.format.pm") - .getAsString("&6[Spy] &r{format}")) + .getAsString("&6[Spy] &r{format}") + .replace("{sender-prefix}", senderPrefix) + .replace("{sender-suffix}", senderSuffix) + .replace("{sender-name}", senderName) + .replace("{recipient-name}", recipientName) + .replace("{recipient-prefix}", recipientPrefix) + .replace("{recipient-suffix}", recipientSuffix)) + .replace("{message}", message) .replace("{format}", senderFormat) )); } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/ReplyCommand.java b/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/ReplyCommand.java index fb308d37..1dde5e43 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/ReplyCommand.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/commands/pm/ReplyCommand.java @@ -166,15 +166,11 @@ public void handle(CommandSender sender, String label, String[] args) { .replace("{message}", message) ); - Bukkit.getOnlinePlayers().stream() - .filter(spyPlayer -> !spyPlayer.equals(sender) && !spyPlayer.equals(recipient)) - .filter(spyPlayer -> spyPlayer.hasPermission("chatty.spy") || spyPlayer.hasPermission("chatty.spy.pm")) - .filter(spyPlayer -> jsonStorage.getProperty(spyPlayer, "spy-mode").orElse(new JsonPrimitive(true)).getAsBoolean()) - .forEach(spyPlayer -> spyPlayer.sendMessage( - ChatColor.translateAlternateColorCodes('&', configuration.getNode("spy.format.pm") - .getAsString("&6[Spy] &r{format}")) - .replace("{format}", senderFormat) - )); + MsgCommand.sendMessageToSpy(sender, recipient, + recipientPrefix, recipientName, recipientSuffix, + senderPrefix, senderName, senderSuffix, + senderFormat, message, + jsonStorage, configuration); } } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/json/FormattedMessage.java b/spigot/src/main/java/ru/mrbrikster/chatty/json/FormattedMessage.java index f8d73fc2..997592ce 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/json/FormattedMessage.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/json/FormattedMessage.java @@ -102,6 +102,10 @@ private FancyMessage buildFancyMessage() { return fancyMessage; } + public String toReadableText() { + return buildFancyMessage().toOldMessageFormat(); + } + public String toJSONString() { return buildFancyMessage().toJSONString(); } diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/moderation/SwearModerationMethod.java b/spigot/src/main/java/ru/mrbrikster/chatty/moderation/SwearModerationMethod.java index 17dea640..1e6a3320 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/moderation/SwearModerationMethod.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/moderation/SwearModerationMethod.java @@ -7,7 +7,7 @@ import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -62,7 +62,7 @@ static void init(JavaPlugin javaPlugin) { try { StringBuilder pattern = new StringBuilder(); - for (String swear : Files.readLines(swearsFile, Charset.forName("UTF-8"))) { + for (String swear : Files.readLines(swearsFile, StandardCharsets.UTF_8)) { if (swear.isEmpty()) continue; @@ -74,7 +74,7 @@ static void init(JavaPlugin javaPlugin) { } SwearModerationMethod.swearsPattern = Pattern.compile(pattern.toString(), Pattern.CASE_INSENSITIVE); - SwearModerationMethod.swearsWhitelist = Files.readLines(whitelistFile, Charset.forName("UTF-8")).stream().map(whitelistPattern + SwearModerationMethod.swearsWhitelist = Files.readLines(whitelistFile, StandardCharsets.UTF_8).stream().map(whitelistPattern -> Pattern.compile(whitelistPattern.toLowerCase(), Pattern.CASE_INSENSITIVE)).collect(Collectors.toList()); } catch (IOException e) { e.printStackTrace(); diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ActionBarNotification.java b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ActionBarNotification.java index 1b646745..1789a3c6 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ActionBarNotification.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ActionBarNotification.java @@ -28,6 +28,10 @@ public class ActionBarNotification extends Notification { } private void update() { + if (messages.isEmpty()) { + return; + } + Chatty.instance().debugger().debug("Update ActionBarNotification message."); if (messages.size() <= ++currentMessage) { @@ -45,6 +49,10 @@ public void cancel() { @Override public void run() { + if (messages.isEmpty()) { + return; + } + Chatty.instance().debugger().debug("Run ActionBarNotification."); String message = COLORIZE.apply(prefix + messages.get(currentMessage)); diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/AdvancementsNotification.java b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/AdvancementsNotification.java index 40fa3c0e..4cf1d7cc 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/AdvancementsNotification.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/AdvancementsNotification.java @@ -34,6 +34,10 @@ public class AdvancementsNotification extends Notification { @Override public void run() { + if (messages.isEmpty()) { + return; + } + Chatty.instance().debugger().debug("Run \"%s\" AdvancementsNotification.", name); if (currentMessage == -1 || messages.size() <= ++currentMessage) { diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ChatNotification.java b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ChatNotification.java index 71cd70cd..3cbab489 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ChatNotification.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/ChatNotification.java @@ -24,6 +24,10 @@ public class ChatNotification extends Notification { @Override public void run() { + if (messages.isEmpty()) { + return; + } + Chatty.instance().debugger().debug("Run \"%s\" ChatNotification.", name); if (currentMessage == -1 || messages.size() <= ++currentMessage) { diff --git a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/TitleNotification.java b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/TitleNotification.java index 6f0c6f26..0d63e8bf 100644 --- a/spigot/src/main/java/ru/mrbrikster/chatty/notifications/TitleNotification.java +++ b/spigot/src/main/java/ru/mrbrikster/chatty/notifications/TitleNotification.java @@ -23,6 +23,10 @@ public class TitleNotification extends Notification { @Override public void run() { + if (messages.isEmpty()) { + return; + } + Chatty.instance().debugger().debug("Run \"%s\" TitleNotification.", name); if (currentMessage == -1 || messages.size() <= ++currentMessage) { diff --git a/spigot/src/main/resources/config.yml b/spigot/src/main/resources/config.yml index 7c776ad4..2bbe3181 100644 --- a/spigot/src/main/resources/config.yml +++ b/spigot/src/main/resources/config.yml @@ -66,12 +66,14 @@ general: # *cooldown* - message cooldown in seconds (bypass permission - chatty.cooldown.). # *money* - message price (depends on Vault). # *permission* - check permissions for this chat? Default: true. +# *command* - Command that is used to switch to chat to use it by default if symbol is not specified. Default: empty. chats: local: enable: true format: '[Local] {prefix}{player}{suffix}: {message}' range: 100 cooldown: -1 + command: 'localchat' global: enable: true @@ -79,6 +81,7 @@ chats: range: -1 symbol: '!' cooldown: -1 + command: 'globalchat' # * PRIVATE MESSAGING pm: @@ -136,6 +139,9 @@ spy: # Permission: chatty.spy.pm # # Uses sender format of PM. + # Supports variables: + # {format}, {sender-prefix}, {sender-name}, {sender-suffix}, + # {recipient-prefix}, {recipient-name}, {recipient-suffix}, {message} pm: '&6[Spy] &r{format}' # * JSON @@ -185,7 +191,7 @@ json: # # Available properties: # tooltip, suggest - - # + # # Permission: chatty.swears.see swears: enable: true @@ -400,12 +406,27 @@ moderation: # * MISCELLANEOUS miscellaneous: commands: + # Used to switch default chat (when symbol is not specified): /chat + # Permission: chatty.command.chat + chat: + enable: true + aliases: ['chats', 'switchchat'] + + # Clear chat for yourself: /clearchat # Permission: chatty.command.clearchat + # + # Clear chat for all: /clearchat all + # Permission: chatty.command.clearchat.all clearchat: enable: true aliases: ['chatclear'] - # Permission: chatty.command.prefix + # Change chat (and NametagEdit, if enabled) prefix + # /prefix + # + # Permissions: + # chatty.command.prefix + # chatty.command.prefix.others prefix: enable: true @@ -421,7 +442,12 @@ miscellaneous: # (Requires NameTagEdit plugin). auto-nte: false - # Permission: chatty.command.suffix + # Change chat (and NametagEdit, if enabled) suffix + # /suffix + # + # Permissions: + # chatty.command.suffix + # chatty.command.suffix.others suffix: enable: true diff --git a/spigot/src/main/resources/locale/en.yml b/spigot/src/main/resources/locale/en.yml index 72fe9070..db2d262f 100644 --- a/spigot/src/main/resources/locale/en.yml +++ b/spigot/src/main/resources/locale/en.yml @@ -10,7 +10,10 @@ messages: cooldown: '&cWait for {cooldown} seconds, before send message in this chat again.' not-enough-money: '&cYou need {money} money to send message in this chat.' - chat-cleared: '&aChat cleared by {player}.' + clearchat-command: + usage: '&cUsing: /{label} [all]' + clear-chat-for-all: '&aChat cleared by {player}.' + clear-chat-for-yourself: '&aChat cleared.' msg-command: usage: '&cUsing: /{label} ' @@ -34,6 +37,12 @@ messages: usage: '&cUsing: /{label} add ' add-word: '&aYou added word {word} to whitelist.' + chat-command: + usage: '&cUsing: /{label} ' + chat-not-found: '&cChat with this name was not found.' + chat-switched: '&aYou have switched to chat "{chat}".' + no-chat-permission: '&cYou don''have permission for this chat.' + prefix-command: usage: '&cUsing: /{label} <|clear>' no-permissions-others: '&cYou don''t have permission to changing prefixes of other players.' diff --git a/spigot/src/main/resources/locale/ru.yml b/spigot/src/main/resources/locale/ru.yml index 370a2531..f3af6938 100644 --- a/spigot/src/main/resources/locale/ru.yml +++ b/spigot/src/main/resources/locale/ru.yml @@ -10,7 +10,10 @@ messages: cooldown: '&cПодождите {cooldown} секунд, прежде чем отправлять сообщение в этот чат снова.' not-enough-money: '&cВам необходимо {money} монет для отправки сообщения в этот чат.' - chat-cleared: '&a{player} очистил чат.' + clearchat-command: + usage: '&cИспользование: /{label} [all]' + clear-chat-for-all: '&a{player} очистил чат.' + clear-chat-for-yourself: '&aЧат очищен.' msg-command: usage: '&cИспользование: /{label} <игрок> <сообщение>' @@ -34,6 +37,12 @@ messages: usage: '&cИспользование: /{label} add <слово>' add-word: '&aВы добавили слово {word} в белый список.' + chat-command: + usage: '&cИспользование: /{label} <чат>' + chat-not-found: '&cЧат с таким именем не найден.' + chat-switched: '&aВы перешли в чат "{chat}".' + no-chat-permission: '&cУ вас недостаточно прав для этого чата.' + prefix-command: usage: '&cИспользование: /{label} <игрок> <<префикс>|clear>' no-permissions-others: '&cУ вас недостаточно прав для смены префикса другим игрокам.' diff --git a/spigot/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml index e7027de0..d2e583c2 100644 --- a/spigot/src/main/resources/plugin.yml +++ b/spigot/src/main/resources/plugin.yml @@ -3,6 +3,9 @@ version: ${project.version} main: ru.mrbrikster.chatty.Chatty authors: [MrBrikster] +# This doesn't mean that plugin works only on 1.13+ +api-version: '1.13' + # Essentials needed only for overwriting existing private-messaging commands. loadbefore: [Essentials] softdepend: [Vault, PlaceholderAPI, NametagEdit]