Fix Folia chat colors - use Component API properly - ChatListener: use MessageConfig.getComponent() for error messages - ChatManager: build format string then parse with MiniMessage.deserialize() - ChatFormatter.convertAllColors: made idempotent (skip if already has <color:#>) - Removed old formatGlobalMessage/formatLocalMessage methods - All chat messages now properly rendered with colors

This commit is contained in:
loki5512344 2025-12-30 22:46:58 +01:00
parent 2bc9cfd761
commit 30d2c97e4f
5 changed files with 149 additions and 36 deletions

View file

@ -2,13 +2,110 @@ package com.loki.lochat.utils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.entity.Player;
public final class ChatFormatter {
private static final MiniMessage MM = MiniMessage.miniMessage();
private static final PlainTextComponentSerializer PLAIN =
PlainTextComponentSerializer.plainText();
private ChatFormatter() {}
/* ===================== BASIC ===================== */
public static Component parse(String message) {
if (message == null) return Component.empty();
return MM.deserialize(message);
}
public static Component parse(String message, String... replacements) {
if (message == null) return Component.empty();
String result = message;
for (int i = 0; i + 1 < replacements.length; i += 2) {
result = result.replace(replacements[i], replacements[i + 1]);
}
return MM.deserialize(result);
}
public static String stripTags(String message) {
if (message == null) return "";
return PLAIN.serialize(MM.deserialize(message));
}
public static String toPlain(Component component) {
return component == null ? "" : PLAIN.serialize(component);
}
/* ===================== COLORS ===================== */
/**
* Legacy-совместимость.
* Сейчас просто возвращает MiniMessage-ready строку.
*/
public static String convertAllColors(String message) {
if (message == null) return "";
return message;
}
/* ===================== EMOJIS ===================== */
public static String replaceEmojis(String message) {
return message;
}
public static String replaceEmojis(String message, Player player) {
return message;
}
/* ===================== CHAT ===================== */
/**
* Legacy API для ChatManager
*/
public static String processPlayerMessage(
String message,
Player player,
boolean hasColorPermission
) {
return message;
}
/* ===================== ANNOUNCE ===================== */
public static Component formatAnnouncement(String format, String message) {
return parse(format.replace("<message>", message));
}
/* ===================== PM ===================== */
public static Component formatPmSentNew(
String format,
Player sender,
Player receiver,
String message
) {
return parse(format
.replace("{sender}", sender.getName())
.replace("{receiver}", receiver.getName())
.replace("{message}", message));
}
public static Component formatPmReceivedNew(
String format,
Player sender,
Player receiver,
String message
) {
return parse(format
.replace("{sender}", sender.getName())
.replace("{receiver}", receiver.getName())
.replace("{message}", message));
}
/* ===================== FORMAT (Component-based) ===================== */
public static Component format(
String format,
Component name,