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();
// Отправляем сообщения
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
));

View file

@ -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
));

View file

@ -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);
}
}

View file

@ -109,20 +109,42 @@ public class GradientConfirmGUI implements InventoryHolder {
String prefixToUse = this.prefix;
List<String> 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();

View file

@ -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>", message));
}