Поиск кириллицы в имени сущности

Версия Minecraft
1.12.2
API
Forge
Собственно, моя цель при смерти сущности, искать в её имени русский текст. В событии
Java:
LivingDeathEvent
получаю сущность и достаю её имя методом
Java:
e.getEntity().getName();
. Целевая сущность как правило имеет русское цветное имя. При попытке напрямую найти в полученном имени русский текст ничего не выходит
Java:
e.getEntity().getName().matches(".*каннибал.*")
. Долго не мог понять в чем проблема, и потом меня осенило. Вспомнил, что майнкрафт форматирует текст в unicode формате, и сырое представление символов начинается с \u. В онлайн конвертере юникода преобразовал нужное мне слово для поиска, и в таком виде всё отработало
Java:
e.getEntity().getName().matches(".*\\u043a\\u0430\\u043d\\u043d\\u0438\\u0431\\u0430\\u043b.*");
. После этого начались долгие танцы с бубном, и попытки преобразовать либо имя моба в обычный utf-8, либо строку для поиска в unicode, и всё без толку. Прошу помощи у вас, ибо самому мне опыта ещё не хватает (начал изучать джаву 1 день назад).
 
Решение
Преобразование превращает юникодную строку в ascii-строку с экранированными эквивалентами юникод-символов, поэтому преобразовать надо оба
До мя щас дошло, че тебе надо 🤦‍♂️ У тебя есть моб с юникодным именем и кусок юникодного имени прямо в коде. Нужно делать поиск подстроки. Проблема, описанная в вопросе относится не к майну, а к среде разработки и сборки.
Попробуй следующее:
В своей среде разработки установи utf8 как дефолтную кодировку, убедись ,что класс, содержащий юникодные символы сохранен в этой кодировке.
В билд-скрипт добавь compileJava.options.encoding = 'UTF-8'

По идее, этого должно хватить, чтобы в сорцах использовать символы юникода
7,099
324
1,510
Не помогло. Пробовал все типы (NFD, NFC, NFKD, NFKC). Вот полный код события:

Java:
@SubscribeEvent
public static void onEntityDeath(LivingDeathEvent e) {
    if (e.getEntity() instanceof EntityMob) {
        EntityMob mob = (EntityMob) e.getEntity();
        String mobName = (String) Normalizer.normalize(e.getEntity().getName(), Normalizer.Form.NFD);

        logger.info(mobName.matches(".*Наместник.*"));
    }
}
 
7,099
324
1,510
Преобразовал строку для поиска с помощью данного способа, и всеравно не сработало. Но я заметил один момент. Когда я выводил mobName через logger, в консоли нормально выводилось имя моба со всеми цветами и символами, и визуально \u коды не были видны, но поиск работал только \u кодами.
1617915550559.png

Тут же, после преобразования строки для поиска в юникод, когда я вывел результат, он отобразился в виде сырых \u кодов.
1617915608630.png
Возможно это как-то поможет найти решение. Может нужно в кодировку какую-то дополнительно преобразовать?
 
7,099
324
1,510
Преобразовал строку для поиска с помощью данного способа, и всеравно не сработало. Но я заметил один момент. Когда я выводил mobName через logger, в консоли нормально выводилось имя моба со всеми цветами и символами, и визуально \u коды не были видны, но поиск работал только \u кодами.
А ты обе строки преобразовал? И ту, где ищешь(имя моба) и ту, что ищешь(подстрока имени)?
 
7,099
324
1,510
Преобразование превращает юникодную строку в ascii-строку с экранированными эквивалентами юникод-символов, поэтому преобразовать надо оба
До мя щас дошло, че тебе надо 🤦‍♂️ У тебя есть моб с юникодным именем и кусок юникодного имени прямо в коде. Нужно делать поиск подстроки. Проблема, описанная в вопросе относится не к майну, а к среде разработки и сборки.
Попробуй следующее:
В своей среде разработки установи utf8 как дефолтную кодировку, убедись ,что класс, содержащий юникодные символы сохранен в этой кодировке.
В билд-скрипт добавь compileJava.options.encoding = 'UTF-8'

По идее, этого должно хватить, чтобы в сорцах использовать символы юникода
 
Сверху