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:
parent
2bc9cfd761
commit
30d2c97e4f
5 changed files with 149 additions and 36 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue