diff --git a/src/main/java/com/loki/lochat/commands/MsgCommand.java b/src/main/java/com/loki/lochat/commands/MsgCommand.java index 068eb12..c0b6cd8 100644 --- a/src/main/java/com/loki/lochat/commands/MsgCommand.java +++ b/src/main/java/com/loki/lochat/commands/MsgCommand.java @@ -59,16 +59,18 @@ public class MsgCommand implements CommandExecutor { } String message = messageBuilder.toString(); - // Отправляем сообщения - player.sendMessage(ChatFormatter.formatPmSent( - plugin.getMessageConfig().get("pm.sent"), - target.getName(), + // Отправляем сообщения с градиентными именами + player.sendMessage(ChatFormatter.formatPmSentNew( + plugin.getMessageConfig().getPmFormatSent(), + player, + target, message )); - target.sendMessage(ChatFormatter.formatPmReceived( - plugin.getMessageConfig().get("pm.received"), - player.getName(), + target.sendMessage(ChatFormatter.formatPmReceivedNew( + plugin.getMessageConfig().getPmFormatReceived(), + player, + target, message )); diff --git a/src/main/java/com/loki/lochat/commands/ReplyCommand.java b/src/main/java/com/loki/lochat/commands/ReplyCommand.java index 99d1454..b55fb26 100644 --- a/src/main/java/com/loki/lochat/commands/ReplyCommand.java +++ b/src/main/java/com/loki/lochat/commands/ReplyCommand.java @@ -56,16 +56,18 @@ public class ReplyCommand implements CommandExecutor { String message = String.join(" ", args); - // Отправляем сообщения - player.sendMessage(ChatFormatter.formatPmSent( - plugin.getMessageConfig().get("pm.sent"), - target.getName(), + // Отправляем сообщения с градиентными именами + player.sendMessage(ChatFormatter.formatPmSentNew( + plugin.getMessageConfig().getPmFormatSent(), + player, + target, message )); - target.sendMessage(ChatFormatter.formatPmReceived( - plugin.getMessageConfig().get("pm.received"), - player.getName(), + target.sendMessage(ChatFormatter.formatPmReceivedNew( + plugin.getMessageConfig().getPmFormatReceived(), + player, + target, message )); diff --git a/src/main/java/com/loki/lochat/config/MessageConfig.java b/src/main/java/com/loki/lochat/config/MessageConfig.java index 74e9999..6190fc0 100644 --- a/src/main/java/com/loki/lochat/config/MessageConfig.java +++ b/src/main/java/com/loki/lochat/config/MessageConfig.java @@ -57,4 +57,17 @@ public class MessageConfig { public String getInvalidUsage(String usage) { return get("errors.invalid-usage", "{usage}", usage); } + + // PM форматы + public String getPmFormatSent() { + return get("pm.format-sent"); + } + + public String getPmFormatReceived() { + return get("pm.format-received"); + } + + public boolean isPmUseGradientNames() { + return messages.getBoolean("pm.use-gradient-names", true); + } } diff --git a/src/main/java/com/loki/lochat/gradient/gui/GradientConfirmGUI.java b/src/main/java/com/loki/lochat/gradient/gui/GradientConfirmGUI.java index 255720b..5cd1937 100644 --- a/src/main/java/com/loki/lochat/gradient/gui/GradientConfirmGUI.java +++ b/src/main/java/com/loki/lochat/gradient/gui/GradientConfirmGUI.java @@ -109,20 +109,42 @@ public class GradientConfirmGUI implements InventoryHolder { String prefixToUse = this.prefix; List colorsToUse = this.colors; + // Получаем данные игрока + var data = module.getDataManager().getPlayerData(player.getUniqueId()); + if (type == ConfirmType.PREFIX && (colorsToUse == null || colorsToUse.isEmpty())) { - var data = module.getDataManager().getPlayerData(player.getUniqueId()); if (data.hasColors() && data.isColorEnabled()) { colorsToUse = data.getColors(); } } if (type == ConfirmType.COLOR && (prefixToUse == null || prefixToUse.isEmpty())) { - var data = module.getDataManager().getPlayerData(player.getUniqueId()); if (data.hasPrefix() && data.isPrefixEnabled()) { prefixToUse = data.getPrefix(); } } + // Если нет кастомного префикса - используем LuckPerms префикс + if ((prefixToUse == null || prefixToUse.isEmpty()) && module.getLuckPermsHook().isEnabled()) { + String lpPrefix = module.getLuckPermsHook().getActivePrefix(player); + if (lpPrefix != null && !lpPrefix.isEmpty()) { + // Для превью показываем LP префикс + // Если градиент на LP префикс включен - применяем градиент на всю строку + if (colorsToUse != null && !colorsToUse.isEmpty() && module.getConfig().isGradientOnLuckPermsPrefix()) { + // Убираем цвета из LP префикса и применяем градиент на всё + String cleanLpPrefix = stripColors(lpPrefix); + String fullText = cleanLpPrefix + nick; + return GradientUtil.applyGradient(fullText, colorsToUse, module.getConfig().isUseLegacyRgbFormat()); + } else { + // LP префикс со своими цветами + градиентный ник + if (colorsToUse != null && !colorsToUse.isEmpty()) { + return lpPrefix + GradientUtil.applyGradient(nick, colorsToUse, module.getConfig().isUseLegacyRgbFormat()); + } + return lpPrefix + nick; + } + } + } + return GradientUtil.buildDisplayName( prefixToUse, nick, @@ -134,6 +156,14 @@ public class GradientConfirmGUI implements InventoryHolder { ); } + /** + * Убирает цветовые коды из строки + */ + private String stripColors(String text) { + if (text == null) return ""; + return text.replaceAll("(?i)(§x(§[0-9a-f]){6}|§[0-9a-fk-or]|&[0-9a-fk-or]|&#[0-9a-f]{6}|<[^>]+>)", ""); + } + private ItemStack createItem(Material material, String name) { ItemStack item = new ItemStack(material); ItemMeta meta = item.getItemMeta(); diff --git a/src/main/java/com/loki/lochat/utils/ChatFormatter.java b/src/main/java/com/loki/lochat/utils/ChatFormatter.java index dd4fcd8..66ca977 100644 --- a/src/main/java/com/loki/lochat/utils/ChatFormatter.java +++ b/src/main/java/com/loki/lochat/utils/ChatFormatter.java @@ -222,6 +222,52 @@ public class ChatFormatter { .replace("{message}", message)); } + /** + * Форматирует исходящее PM с поддержкой градиентных имён + */ + public static Component formatPmSentNew(String format, Player sender, Player receiver, String message) { + LoChat plugin = LoChat.getInstance(); + String senderDisplay = sender.getName(); + String receiverDisplay = receiver.getName(); + + // Используем градиентные имена если включено + if (plugin != null && plugin.getMessageConfig().isPmUseGradientNames() + && plugin.getGradientModule() != null && plugin.getGradientModule().isEnabled()) { + senderDisplay = plugin.getGradientModule().getFormattedName(sender); + receiverDisplay = plugin.getGradientModule().getFormattedName(receiver); + } + + return parse(format + .replace("{sender}", sender.getName()) + .replace("{receiver}", receiver.getName()) + .replace("{sender_display}", senderDisplay) + .replace("{receiver_display}", receiverDisplay) + .replace("{message}", message)); + } + + /** + * Форматирует входящее PM с поддержкой градиентных имён + */ + public static Component formatPmReceivedNew(String format, Player sender, Player receiver, String message) { + LoChat plugin = LoChat.getInstance(); + String senderDisplay = sender.getName(); + String receiverDisplay = receiver.getName(); + + // Используем градиентные имена если включено + if (plugin != null && plugin.getMessageConfig().isPmUseGradientNames() + && plugin.getGradientModule() != null && plugin.getGradientModule().isEnabled()) { + senderDisplay = plugin.getGradientModule().getFormattedName(sender); + receiverDisplay = plugin.getGradientModule().getFormattedName(receiver); + } + + return parse(format + .replace("{sender}", sender.getName()) + .replace("{receiver}", receiver.getName()) + .replace("{sender_display}", senderDisplay) + .replace("{receiver_display}", receiverDisplay) + .replace("{message}", message)); + } + public static Component formatAnnouncement(String format, String message) { return parse(format.replace("", message)); } diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 548305a..0116e2b 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -9,6 +9,15 @@ local: no-players: "Рядом нет игроков" pm: + # Форматы личных сообщений + # {sender} - ник отправителя, {receiver} - ник получателя + # {sender_display} - отправитель с градиентом, {receiver_display} - получатель с градиентом + # {message} - текст сообщения + format-sent: "[PM] Ты → {receiver_display}: {message}" + format-received: "[PM] {sender_display} → Ты: {message}" + # Использовать градиентные ники в PM + use-gradient-names: true + # Старые форматы (для совместимости) sent: "[PM] Ты → {player}: {message}" received: "[PM] {player} → Ты: {message}" no-reply: "Некому ответить"