Releases: ancap-dev/AncapFramework
v1.6.2 - fix
Fix
v1.6.1 - корректная обработка edge-cases
Корректная обработка нештатных, но не критичных случаев работы ResourceAPI - отсутствие поля config-version в старом конфиге или отсутствие value-transfer-map.yml.
v1.6 - ResourceAPI
Возвращаемся к практике нормальных релизов, сосредоточенных вокруг какой-то отдельной фичи, а не релизов с обновлением всего и сразу.
- ResourceAPI - работа с конфигами 3.0. Позволяет обновлять конфиги без полного пересоздания и ручного переноса значений. В соответствии с записанными в value-transfer-map.yml данными переносит данные из старой версии конфига в новую, а также делает бекапы старого конфига на случай, если что-то пойдёт не так.
- Перенос MenuAPI в BukkitPlus
- Унифицирован стиль названия комманд операторов в CommandAPI, теперь все операторы называются декларативно, изменён CommandDelegator и Adviser на Delegate и Advice соответственно
- Унифицирован стиль именования пакетов, теперь всё во фреймворке находится в пакете ru.ancap.framework.
v1.5.6 - улучшена работа с Kyori
Как оказалось, Paper не включает в себя adventure-platform-bukkit. Из-за этого получилась довольно интересная ситуация - плагин запускался на Spigot, а на Paper нет - потому что на спигот устанавливали Kyori, а на Paper никто никому его ставить не говорил.
Не сильно понятен ход мыслей разработчиков Paper, которые не добавили это в ядро, хоть и заявили о native support - однако, в связи с этим, Artifex должен включать в себя net.kyori полностью. В связи с добавлением этого в Artifex плагин с этими зависимостями упразднён.
v1.5.5 - next-gen, bugfix.5
Add files via upload
1.5 - next-gen
В этом обновлении фреймворк был тотально улучшен по всем направлениям, закрывая те дыры, что мешали использованию фреймворка на проде.
Изменения
-
Взято за практику документирование всех сделанных с фреймворком измененией. Теперь мне не придётся вспоминать, а что же я изменил в фреймворке в момент создания релиза.
-
В AncapFramework добавлен StableScheduler - теперь можно планировать задачи на длительное время вперёд, которые не обнулятся при перезагрузке JVM.
-
Переработка EventAPI:
2.1. Добавлен BlockNullifyEvent.
2.2. Все ивенты теперь используют List вместо x для пассивных сущностей, так как можно повлиять сразу же на много вещей.
2.3. WorldSelfDestructEvent, BlockClickEvent - поменяны аргументы местами, так, чтобы активная сущность была перед пассивной.
2.4. ExplodeEvent удалён, использовать вместо него обычный BlockExplodeEvent.
2.5. PVPEvent получил отделение атакующего от атакуемых, массив заменён на список.
2.6. Пофикшен старый баг, когда ведьма атаковала игрока зельем и из-за этого вылетал cast exception.
2.7. Удалены throwSelfDesctuctEvent и подобные в классах листенеров Artifex.
2.8. Удалены бесполезные конструкторы из классов листенеров Artifex.
2.9. Везде проставил приоритет ивентов на LOW и игрок отменённых ивентов.
2.10. Наведён порядок в ивентах - бойлерплейт заменён аннотациями от Lombok, баккитовский бойлерплейт сгруппирован в конце класса в трёх маленьких строках. -
AncapCommons выделен в отдельный проект.
-
ConfigurationAPI - теперь можно создавать конфиги на аннотациях!
-
Система сообщений переработана и выделена в кое-что большее. Теперь оно работает не на принципе примитивной кучи. операций над строкой, а по принципу многоуровневой сборки конечного сообщения. LAPICommunicator удалён, оставлен единый Communicator, который принимает на вход json и строит по нему компонент, который и отправляет, больше он ничего не делает. Выделено в отдельный модуль.
5.1. Replacement сделан интерфейсом, реализует его BaseReplacement и Placeholder.
5.2. Формализирован отказ от Component в работе с фреймворком и инкапсуляция его под нормальными способами работы с текстом.
5.3. Раньше, по всему фреймворку, сообщения отправлялись как попало. Теперь они все отправляются через CommunicatorAPI. -
Обновлён CommandAPI.
6.1. CommandAPI теперь адекватно работает с аргументами и может вычленять сразу же несколько слов в один аргумент, раньше же была возможность только аргумент длиной в один литерал получить.
6.2. Вместо голого CommandSender теперь используется CommandSource. Через него можно получить в том числе CommandSender, а также Audience из kyori.
6.3. ArgumentAPI теперь сигнализирует об опциональности аргументов при вводе команды.
6.4. IncorrectArgumentsEvent выпилен по причине своей ненадобности.
6.5. FiniteCommandTarget выпилен по причине своей ненадобности и замены ArgumentAPI.
6.6. Добавлены новые извлекатели в ArgumentAPI - PlayerExtractor и Extractor (основанный на функции). -
Переработка Artifex.
7.1. Переработка структуры locale у Artifex в связи с повышением числа сообщений.
7.2. Наконец-то AncapFramework отказался от позорного packetevents! Больше мне не придётся по 15 часов искать баг, который потом окажется регрессией с источником в пакетивентах.
7.3. Переработана структура пакетов Artifex. Очень красиво получилось.
7.4. Artifex неприемлемо расжирел, поэтому была проведена работа над уменьшением его веса. В конечном итоге реализован Project Jigsaw - Kyori и AncapDatabaseDrivers теперь опциональны, не надо качать их тем, кому они не нужны. -
DatabaseAPI теперь поддерживает ORMLite как надстройку, в связи с этим конфигурация тоже немного меняется.
-
Семантические улучшения по всему фреймворку. Об обратной совместимости можно из-за этого забыть, но всё равно она предыдущими изменениями была в край сломана.
9.1 Переработана структура пакетов во всем фреймворке.
9.2. По всему фреймворку заменены геттеры/сеттеры на методы без префиксов.
9.3. Везде, где заметил, были убраны уродливые сокращения. Адекватные сокращения оставлены, такие как TPS. Не на петухоне, всё-таки, пишем - у нас среда разработки есть и автокомплиты! -
Инкрементальные изменения.
10.1. Ancap#getServerTPS();
10.2. AuthorsSupplier. -
Переработка POM. Теперь AncapFramework, наконец-то, начал по настоящему использовать систему сборки. До этого момента проект не собирался вне моего окружения, хоть и был на мавене. Также теперь используется Jittpack как репозиторий (в связи с разрешением проблемы сборки вне моего окружения). Между прочим, мне пришлось поплатиться за то, что я решил отмечать все внутренние зависимости как LATEST - это стало самой большой проблемой на пути к деплатформизации сборки проекта.
v1.4.2 - универсальность, часть 2
Фреймворк бекпортирован до Java 11. Функционал не изменился.
Данное решение принято ради поддержки Paper 1.16.5, который, по причине криворукости его разработчиков, не работает на Java старше 16. Также, опять же, не все модули поддерживают работу на Java 11. Технические требования к модулям теперь указаны в вики.
v1.4.1 - универсальность
Artifex теперь поддерживает все версии MineCraft от 1.8 до 1.19.3, и все Bukkit-based ядра. Магия? А то!
Стоит отметить, что не все модули AncapFramework поддерживают все версии. Модули BukkitPlus очень требовательны к версии. Вот их требования:
Модуль | Требуемая версия |
---|---|
MaterialAPI | новейшая |
WorldIteratorAPI | 1.16.5 |
Реализация EventAPI | 1.16.5 |
Вероятно, реализацию EventAPI (да и любой другой) можно бекпортировать и до более ранних версий. Если это кому-то понадобиться - сделайте пулл реквест.
v1.4 - Artifex
v1.4 - Artifex
Обновление всего
- AncapPlugin переименован в Artifex
- CommandAPI наконец-то умеет работать с аргументами! Всё как всегда на высшем уровне, в декларативном стиле. Кушайте, не обляпайтесь!
- Весь фреймворк теперь поддерживает многострочные строки. LAPI, AncapPluginAPI, CommandAPI - всё с ними умело работает. И это без какого-либо хардкода, всё на абстракциях.
- AncapMisc восстал из пепла в виде AncapCommons. Пока что там только один класс Pair<K, V>.
- Новая настройка в ancapplugin.yml - стадия регистрации авто-регистрируемых интеграторов (слушателей ивентов и обработчиков команд).
- AncapBukkit.sendConsoleCommand(String command);
- Улучшено сообщение об ошибке незарегистрированного в ancapplugin.yml обработчика команд.
- Оптимизация FileConfigurationDatabase.
- Разгребён мусор в зависимостях. Теперь внутри проекта все зависимости отмечены как LATEST, а внешние зависимости Artifex - только ProtocolLib.
- Тонны багфиксов.
v1.3 - DatabaseAPI
v1.2 - Next-gen CommandExecutor
Переработан принцип работы CommandExecutor'ов.
- Event-like система обработки команд
- Отказ от паттерна callable для возможности полного распараллеливания обработки команды
- Уже реализованный классический обработчик команд и асинхронный центр команд
- Регистрация команд перенесена в ancapplugin.yml и тоже улучшена
Просто посмотрите, какую красоту можно теперь писать!
@Override
public void on(CommandWrite write) {
write.speaker().sendTabs(
List.of("my", "tab", "completions")
);
}
Все команды теперь выполняются в новых потоках, поэтому можно беспрепятственно совершать запросы к удалённым базам данных для обработки этих команд и не боятся, что что-то там зависнет. А как бонус - возможность отправлять таб-комплиты со всплывающими подсказками при наведении на них (через Bukkit API невозможно воспользоваться этой фичей майнкрафта) вот так:
@Override
public void on(CommandWrite write) {
write.speaker().sendTooltipTabs(
List.of(
new TooltipTab("tab", Component#instance),
new TooltipTab("completions", Component#instance)
)
);
}
Реализовано это через обработку пакетов игроков.
v1.3 - DatabaseAPI (FINAL)
- Создан API для работы с SQL базами данных.
- Выпилен AncapMisk по причине своей бесполезности
- Рефактор pom.xml
- Используемый как зависимость packet-events больше не добавляется в ancap-plugin, его нужно установить на сервер отдельно
- Пофикшено около 25 багов, накопившихся за время написания версий AncapFramework после 1.0
- Разработка AncapFramework завершена, новых фич не будет больше, только багфиксы