This commit is contained in:
loki5512344 2025-12-29 21:59:15 +01:00
parent daba669833
commit c09a3a399f
6 changed files with 118 additions and 16 deletions

View file

@ -59,16 +59,18 @@ public class MsgCommand implements CommandExecutor {
} }
String message = messageBuilder.toString(); String message = messageBuilder.toString();
// Отправляем сообщения // Отправляем сообщения с градиентными именами
player.sendMessage(ChatFormatter.formatPmSent( player.sendMessage(ChatFormatter.formatPmSentNew(
plugin.getMessageConfig().get("pm.sent"), plugin.getMessageConfig().getPmFormatSent(),
target.getName(), player,
target,
message message
)); ));
target.sendMessage(ChatFormatter.formatPmReceived( target.sendMessage(ChatFormatter.formatPmReceivedNew(
plugin.getMessageConfig().get("pm.received"), plugin.getMessageConfig().getPmFormatReceived(),
player.getName(), player,
target,
message message
)); ));

View file

@ -56,16 +56,18 @@ public class ReplyCommand implements CommandExecutor {
String message = String.join(" ", args); String message = String.join(" ", args);
// Отправляем сообщения // Отправляем сообщения с градиентными именами
player.sendMessage(ChatFormatter.formatPmSent( player.sendMessage(ChatFormatter.formatPmSentNew(
plugin.getMessageConfig().get("pm.sent"), plugin.getMessageConfig().getPmFormatSent(),
target.getName(), player,
target,
message message
)); ));
target.sendMessage(ChatFormatter.formatPmReceived( target.sendMessage(ChatFormatter.formatPmReceivedNew(
plugin.getMessageConfig().get("pm.received"), plugin.getMessageConfig().getPmFormatReceived(),
player.getName(), player,
target,
message message
)); ));

View file

@ -57,4 +57,17 @@ public class MessageConfig {
public String getInvalidUsage(String usage) { public String getInvalidUsage(String usage) {
return get("errors.invalid-usage", "{usage}", 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);
}
} }

View file

@ -109,20 +109,42 @@ public class GradientConfirmGUI implements InventoryHolder {
String prefixToUse = this.prefix; String prefixToUse = this.prefix;
List<String> colorsToUse = this.colors; List<String> colorsToUse = this.colors;
if (type == ConfirmType.PREFIX && (colorsToUse == null || colorsToUse.isEmpty())) { // Получаем данные игрока
var data = module.getDataManager().getPlayerData(player.getUniqueId()); var data = module.getDataManager().getPlayerData(player.getUniqueId());
if (type == ConfirmType.PREFIX && (colorsToUse == null || colorsToUse.isEmpty())) {
if (data.hasColors() && data.isColorEnabled()) { if (data.hasColors() && data.isColorEnabled()) {
colorsToUse = data.getColors(); colorsToUse = data.getColors();
} }
} }
if (type == ConfirmType.COLOR && (prefixToUse == null || prefixToUse.isEmpty())) { if (type == ConfirmType.COLOR && (prefixToUse == null || prefixToUse.isEmpty())) {
var data = module.getDataManager().getPlayerData(player.getUniqueId());
if (data.hasPrefix() && data.isPrefixEnabled()) { if (data.hasPrefix() && data.isPrefixEnabled()) {
prefixToUse = data.getPrefix(); 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( return GradientUtil.buildDisplayName(
prefixToUse, prefixToUse,
nick, 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) { private ItemStack createItem(Material material, String name) {
ItemStack item = new ItemStack(material); ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();

View file

@ -222,6 +222,52 @@ public class ChatFormatter {
.replace("{message}", message)); .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) { public static Component formatAnnouncement(String format, String message) {
return parse(format.replace("<message>", message)); return parse(format.replace("<message>", message));
} }

View file

@ -9,6 +9,15 @@ local:
no-players: "<red>Рядом нет игроков</red>" no-players: "<red>Рядом нет игроков</red>"
pm: pm:
# Форматы личных сообщений
# {sender} - ник отправителя, {receiver} - ник получателя
# {sender_display} - отправитель с градиентом, {receiver_display} - получатель с градиентом
# {message} - текст сообщения
format-sent: "<gray>[PM] Ты → {receiver_display}<gray>: {message}</gray>"
format-received: "<gray>[PM] {sender_display}<gray> → Ты: {message}</gray>"
# Использовать градиентные ники в PM
use-gradient-names: true
# Старые форматы (для совместимости)
sent: "<gray>[PM] Ты → {player}: {message}</gray>" sent: "<gray>[PM] Ты → {player}: {message}</gray>"
received: "<gray>[PM] {player} → Ты: {message}</gray>" received: "<gray>[PM] {player} → Ты: {message}</gray>"
no-reply: "<red>Некому ответить</red>" no-reply: "<red>Некому ответить</red>"