Art_Farm
Пользователь
Я хотел добавить в chatty поддержку MiniMessage и другие hex цвета, я отредактировал только один файл исходного кода chatty, вот он Chatty/spigot/src/main/java/ru/brikster/chatty/convert/message/LegacyToMiniMessageConverter.java:
Код:
package ru.brikster.chatty.convert.message;
import org.jetbrains.annotations.NotNull;
import javax.inject.Singleton;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Singleton
public final class LegacyToMiniMessageConverter implements MessageConverter {
private static final Pattern BUKKIT_COLOR_PATTERN = Pattern.compile("(?:[§&])([0-9A-FK-OR])", Pattern.CASE_INSENSITIVE);
private static final Pattern SPIGOT_HEX_COLOR_PATTERN = Pattern.compile("(?:[§&])x((?:[§&][A-Fa-f0-9]){6})", Pattern.CASE_INSENSITIVE);
private static final Pattern PAPER_HEX_COLOR_PATTERN = Pattern.compile("(?:[§&])#([A-Fa-f0-9]{6})", Pattern.CASE_INSENSITIVE);
private static final Pattern CHATTY_HEX_COLOR_PATTERN = Pattern.compile("\\{#([A-Fa-f0-9]{6})\\}", Pattern.CASE_INSENSITIVE);
private static final Pattern CHATTY_HEX_GRADIENT_PATTERN = Pattern.compile("\\{((?:#[A-Fa-f0-9]{6})(?::#[A-Fa-f0-9]{6})+)\\}(.+?)\\}", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
private static final String RESET_TAGS = "<!bold><!italic><!strikethrough><!obfuscated><!underlined>";
private static final Map<Character, String> LEGACY_CODE_TO_MINI_MESSAGE = Map.ofEntries(
Map.entry('0', RESET_TAGS + "<color:#000000>"),
Map.entry('1', RESET_TAGS + "<color:#0000AA>"),
Map.entry('2', RESET_TAGS + "<color:#00AA00>"),
Map.entry('3', RESET_TAGS + "<color:#00AAAA>"),
Map.entry('4', RESET_TAGS + "<color:#AA0000>"),
Map.entry('5', RESET_TAGS + "<color:#AA00AA>"),
Map.entry('6', RESET_TAGS + "<color:#FFAA00>"),
Map.entry('7', RESET_TAGS + "<color:#AAAAAA>"),
Map.entry('8', RESET_TAGS + "<color:#555555>"),
Map.entry('9', RESET_TAGS + "<color:#5555FF>"),
Map.entry('a', RESET_TAGS + "<color:#55FF55>"),
Map.entry('b', RESET_TAGS + "<color:#55FFFF>"),
Map.entry('c', RESET_TAGS + "<color:#FF5555>"),
Map.entry('d', RESET_TAGS + "<color:#FF55FF>"),
Map.entry('e', RESET_TAGS + "<color:#FFFF55>"),
Map.entry('f', RESET_TAGS + "<color:#FFFFFF>"),
Map.entry('k', "<obfuscated>"),
Map.entry('l', "<bold>"),
Map.entry('m', "<strikethrough>"),
Map.entry('n', "<underlined>"),
Map.entry('o', "<italic>"),
Map.entry('r', RESET_TAGS + "<reset>")
);
@Override
public @NotNull String convert(@NotNull String message) {
Objects.requireNonNull(message, "message");
if (message.isEmpty()) {
return message;
}
String result = message;
result = convertChattyGradients(result);
result = convertChattyHexCodes(result);
result = convertPaperHexCodes(result);
result = convertSpigotHexCodes(result);
result = convertBukkitCodes(result);
return result;
}
private String replaceAll(String message, Pattern pattern, Function<Matcher, String> replacer) {
Matcher matcher = pattern.matcher(message);
StringBuffer buffer = new StringBuffer(message.length());
while (matcher.find()) {
String replacement = replacer.apply(matcher);
matcher.appendReplacement(buffer, Matcher.quoteReplacement(replacement));
}
matcher.appendTail(buffer);
return buffer.toString();
}
private @NotNull String convertChattyGradients(@NotNull String message) {
return replaceAll(message, CHATTY_HEX_GRADIENT_PATTERN, matcher -> {
String codes = matcher.group(1);
String text = matcher.group(2);
String[] parts = codes.split(":");
StringBuilder normalized = new StringBuilder(parts.length * 7);
for (int i = 0; i < parts.length; i++) {
String p = parts[i].trim();
if (!p.startsWith("#")) {
p = "#" + p;
}
normalized.append(p.toLowerCase(Locale.ROOT));
if (i < parts.length - 1) {
normalized.append(':');
}
}
return RESET_TAGS + "<gradient:" + normalized + ">" + text + "</gradient>";
});
}
private @NotNull String convertChattyHexCodes(@NotNull String message) {
return replaceAll(message, CHATTY_HEX_COLOR_PATTERN, matcher -> "<color:#" + matcher.group(1).toLowerCase(Locale.ROOT) + ">");
}
private @NotNull String convertPaperHexCodes(@NotNull String message) {
return replaceAll(message, PAPER_HEX_COLOR_PATTERN, matcher -> "<color:#" + matcher.group(1).toLowerCase(Locale.ROOT) + ">");
}
private @NotNull String convertSpigotHexCodes(@NotNull String message) {
return replaceAll(message, SPIGOT_HEX_COLOR_PATTERN, matcher -> {
String group = matcher.group(1);
String hex = group.replaceAll("[&§]", "").toLowerCase(Locale.ROOT);
if (hex.length() == 6 && hex.matches("[0-9a-f]{6}")) {
return "<color:#" + hex + ">";
}
return matcher.group();
});
}
private @NotNull String convertBukkitCodes(@NotNull String message) {
return replaceAll(message, BUKKIT_COLOR_PATTERN, matcher -> {
String code = matcher.group(1).toLowerCase(Locale.ROOT);
char c = code.charAt(0);
String replacement = LEGACY_CODE_TO_MINI_MESSAGE.get(c);
return replacement != null ? replacement : matcher.group();
});
}
}
Но когда я ввёл ./gradlew clean jar создался .jar файл в 26 мБайт весом, хотя в тоже время обычный чатти весит всего 500 с чем то кБайт.
Кто поможет разобраться, в чём дело?