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]