Стартап InkyMessage | Форматирование текста под adventure

imDaniX

Активный участник
Пользователь
Баллы
96
Ник в Minecraft
imDaniX
Исходный код: https://github.com/GlowingInk/InkyMessage
Документация: пока что README

Описание​
Разработка в ранней стадии.

(Де)сериализатор текста для Adventure, вдохновленный MineDown и MiniMessage. Поддерживает как легаси формат цветов(&a, &1, &n), так и современные функции.
Меня не устраивали оба решения, из-за чего я и решил взяться за проект. MineDown в принципе неплохой, но стакать опции сообщений - крайне неудобно. MiniMessage требует большое количество писанины для минимальных функций, на что просто становится больно смотреть.

Производительность итоговой библиотеки не так важна, ведь всё в любом случае измеряется буквально в наносекундах. Но если вам вдруг понадобится отправлять тысячи сообщений в секунду - грубо говоря, на данном этапе примерно в три раза быстрее MineDown, примерно в пять раз быстрее MiniMessage. Может отличаться от ситуации к ситуации; в частности - обработка градиентов пока идет примерно наравне с MiniMessage.

Формат​
Полностью поддерживается легаси формат цветов. Для более богатого форматирования используйте формат: &[моё сообщение](тег1:подтег)(тег2:подтег значение)(тегN:подтег...)
Для всех текущих тегов смотрите документацию.

Green, clickable red, red again.
Код:
Inky: &aGreen, &[clickable&c red](click:url https://rubukkit.org/), red again.
Mini: <green>Green, <click:open_url:'https://rubukkit.org/'><green>clickable<red> red</click><red>, red again.
Down: &aGreen, [&aclickable&c red](https://rubukkit.org/)&c, red again
Как можно заметить, в отличии от MiniMessage и MineDown, цвета сохраняют линейность даже после дополнительного форматирования. Единственная неудобность в этом плане: форматирование с тегом color будет требовать поставить &r заранее - цвета накладываются "поверх", и если у текста уже есть какой-то цвет, то по сути тег будет проигнорирован.
Код:
Inky: &aЗелёный, &r&[радужный](gradient:spectrum)(click:url https://rubukkit.org/)
Mini: <green>Зелёный, <click:open_url:'https://rubukkit.org/'><rainbow>радужный</rainbow></click>
Down: &aЗелёный, [&rainbow&радужный](https://rubukkit.org/)

Использование​
Основа - класс InkyMessage. Для генерации сообщений воспользуйтесь InkyMessage.inkyMessage() - либо импортируйте статично, либо просто сохраните в переменную. Далее достаточно вызвать deserialize("&aСообщение"). Экранировать текст можно через InkyMessage.escape("&aСообщение") - подобное сообщение при попадании в deserialize будет работать как обычный текст.
Кастомизация InkyMessageResolver пока в разработке, и я настоятельно не рекомендую её использовать в данный момент - иначе вам ещё раз 10 придется её переписывать, я уверен.

Для добавления к себе в проект можно воспользоваться Maven.
Репозиторий
HTML:
<repository>
    <id>glowing-ink</id>
    <url>https://repo.glowing.ink/releases</url>
</repository>
Зависимость
HTML:
<dependency>
    <groupId>ink.glowing</groupId>
    <artifactId>inkymessage</artifactId>
    <version>0.11.0</version> <!-- Сравните с версией на GitHub -->
</dependency>
По нужде - зашейдить
HTML:
<build>
    <plugins>
        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>ink.glowing.text</pattern>
                        <shadedPattern>ваш.пакет.для.библиотеки</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

TODO​
До релиза сделать в планах следующее:
  • Плейсхолдеры для компонентов клавиш и прочего.
  • Дописать документацию, примеры, скриншоты.
  • Закончить первую стадию API.
 
Последнее редактирование:
Ранее я немного схитрил - это сериализованный компонент MiniMessage, чтоб отрендерить на https://webui.advntr.dev/
Но проверил на сервере все же - тоже самое, проходит нормально. Причем, 0.11.0.
Посмотреть вложение 65331
Может значение в %display% дважды экранируешь? В таком случае как раз остаётся ), и значение при наведении отличается.
Посмотреть вложение 65332
Значение при наведении в норме)
 
Боюсь, разбираться с чужим кодом в 3-4 часа ночи несколько неохота. Можешь пока попробовать отправить игроку упомянутый ранее компонент, без какой-либо дополнительной логики? Просто если оно действительно по какой-то неведомой причине обрабатывается по-разному на разных машинах, придется глубже копать.
 
Боюсь, разбираться с чужим кодом в 3-4 часа ночи несколько неохота. Можешь пока попробовать отправить игроку упомянутый ранее компонент, без какой-либо дополнительной логики? Просто если оно действительно по какой-то неведомой причине обрабатывается по-разному на разных машинах, придется глубже копать.
По возможности кину в лс репо.
 
Работа ещё ведётся, просто нет возможности уделить проекту больше времени. Сегодня упал хост с репо, так что, чтоб избежать подобного в будущем, с релизом 1.0 всё же на Maven-Central перееду. Правда, до этого релиза ещё далековато...
На крайний случай всегда можно подхватить зависимость по JitPack.
 
Работа ещё ведётся, просто нет возможности уделить проекту больше времени. Сегодня упал хост с репо, так что, чтоб избежать подобного в будущем, с релизом 1.0 всё же на Maven-Central перееду. Правда, до этого релиза ещё далековато...
Могу временно свой repo подкинуть
 
Назад
Верх Низ