v1.5.3: Улучшена обработка цветовых кодов
This commit is contained in:
parent
4f88f09d21
commit
ed796a4264
1 changed files with 18 additions and 5 deletions
|
|
@ -17,28 +17,40 @@ public class ChatFormatter {
|
||||||
// Паттерны для цветов
|
// Паттерны для цветов
|
||||||
private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})");
|
private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})");
|
||||||
private static final Pattern LEGACY_COLOR_PATTERN = Pattern.compile("&([0-9a-fk-orA-FK-OR])");
|
private static final Pattern LEGACY_COLOR_PATTERN = Pattern.compile("&([0-9a-fk-orA-FK-OR])");
|
||||||
|
private static final Pattern SECTION_COLOR_PATTERN = Pattern.compile("§([0-9a-fk-orA-FK-OR])");
|
||||||
private static final Pattern MINIMESSAGE_HEX_PATTERN = Pattern.compile("<#([A-Fa-f0-9]{6})>");
|
private static final Pattern MINIMESSAGE_HEX_PATTERN = Pattern.compile("<#([A-Fa-f0-9]{6})>");
|
||||||
|
|
||||||
private ChatFormatter() {}
|
private ChatFormatter() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Конвертирует все форматы цветов в MiniMessage
|
* Конвертирует все форматы цветов в MiniMessage
|
||||||
* Поддерживает: &коды, &#HEX, MiniMessage теги
|
* Поддерживает: &коды, §коды, &#HEX, MiniMessage теги
|
||||||
*/
|
*/
|
||||||
public static String convertAllColors(String message) {
|
public static String convertAllColors(String message) {
|
||||||
if (message == null) return "";
|
if (message == null) return "";
|
||||||
|
|
||||||
String result = message;
|
String result = message;
|
||||||
|
|
||||||
// 1. Конвертируем &#RRGGBB -> <#RRGGBB> (только если еще не в MiniMessage формате)
|
// 1. Конвертируем §коды -> &коды (для унификации)
|
||||||
|
result = convertSectionToAmpersand(result);
|
||||||
|
|
||||||
|
// 2. Конвертируем &#RRGGBB -> <#RRGGBB> (только если еще не в MiniMessage формате)
|
||||||
result = convertHexColors(result);
|
result = convertHexColors(result);
|
||||||
|
|
||||||
// 2. Конвертируем &коды -> MiniMessage теги
|
// 3. Конвертируем &коды -> MiniMessage теги
|
||||||
result = convertLegacyColors(result);
|
result = convertLegacyColors(result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конвертирует §коды в &коды
|
||||||
|
*/
|
||||||
|
public static String convertSectionToAmpersand(String message) {
|
||||||
|
if (message == null) return "";
|
||||||
|
return SECTION_COLOR_PATTERN.matcher(message).replaceAll("&$1");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Конвертирует &#RRGGBB в MiniMessage формат <#RRGGBB>
|
* Конвертирует &#RRGGBB в MiniMessage формат <#RRGGBB>
|
||||||
*/
|
*/
|
||||||
|
|
@ -152,10 +164,11 @@ public class ChatFormatter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Убирает &коды из сообщения
|
* Убирает &коды и §коды из сообщения
|
||||||
*/
|
*/
|
||||||
public static String stripLegacyColors(String message) {
|
public static String stripLegacyColors(String message) {
|
||||||
return LEGACY_COLOR_PATTERN.matcher(message).replaceAll("");
|
String result = LEGACY_COLOR_PATTERN.matcher(message).replaceAll("");
|
||||||
|
return SECTION_COLOR_PATTERN.matcher(result).replaceAll("");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component parse(String message) {
|
public static Component parse(String message) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue