- 5 месяцев неоплачиваемой работы (3 из которых - возня с градлом)
- Несчетное количество сожженных нервных клеток
- Упадок сил и период отчаяния
- ~70 кружек кофе
- Период сомнения в себе как специалиста
- Сказочное терпение при работе с градлом
- Спаленный по неосторожности бинтрей-кей
- Ненависть к gradle-сообществу
- И доля удачи
Именно столько потребовалось времени, сил и жертв чтобы выкатить этот апдейт. Поэтому я с гордостью представляю вам версию v0.4.0.
Что нового?
- Многие обитатели форума высказали свое недоумение из-за недостающих кейсов применения WeightAPI. Я рад представить вам целых 2 новых примера (далее "Кейсы"):
Case1 - Пример полностью самостоятельной системы веса со своим собственным рендером и эффектом перегруза. Вес каждого предмета равен 1, над голодом отображается шкала переносимого веса, а при перегрузе игрок теряет возможность двигаться.
Case2 - Система веса, расширяющая уже существующую систему
ConfigurableWeightProvider. Представленная в этом примере система будет использовать тот рендер и поведение при перегрузе, которое указано для ConfigurableWeightProvider. Цель кейса - продемонстрировать механизм расширяемости сторонних систем веса.
- Кейсы доступны в виде градл-сабпроджектов, которые при запуске клиента WeightAPI из IDE автоматически скомпилятся и подключатся к игре как отдельные моды. Такой подход в разы упростит дальнейшее тестирование и разработку апи, а значит и повысит время выхода новых апдейтов. Стоит упомянуть что реализовано это не тупым билдом кейсов и копированем их бинарников в
mods
, а через classpath. Ведь именно так Forge и загружает моды.
- Кейсы доступны на Bintray. Вы можете подключить кейсы в свой проект, используя механизм управления зависимостями Gradle. Это позволит вам самостоятельно протестировать вашу систему веса на совместимость с другими. И при этом без лишней мороки с вашей стороны.
- Добавлен метод
WeightRegistry#applyToClient()
, позволяющий включать системы веса на клиенте без потребности в предварительной регистрации.
- Было уделено огромное вниманию чистоте билдскрипта. Хоть это и не является плюсом для юзера, однако это может стать хорошей отправной точкой, если и вы вдруг решите прокачать собственную логику сборку вашего мода. Да еще и с мультипроджектом.
Код писался опираясь на следующую мысль: "Если меня сегодня собьет машина - я помру писав хороший код"
- У проекта появился прикольный README на гитхабе.
- Начиная с v0.3.0 (посчита эту версию достаточно сырой, а потому не релизнул открыто) системы веса теперь являются заменяемыми. Это значит что администратор сервера может в рантайме переключаться между системами веса по своему усмотрению при помощи команд
/getactiveweightprovider
, /getweightproviders
и /setweightprovider
. Посему КАТЕГОРИЧЕСКИ не рекомендуется включать системы веса кодом. Допустимо такое только в приватных проектах, где вы царь и бог. При перезапуске сервера прыдыдущая активная система веса будет восстановлена.
- Начиная с v0.3.0 механизм синхронизации систем веса теперь встроен в сам апи. Для того чтобы синхронизировать вашу систему веса с клиентом, вам всего лишь нужно имплементить
IWeightProvider#sync()
. WeightAPI сам вызовет этот метод, когда посчитает нужным отослать на клиенты вашу систему веса.
- Начиная с v0.3.0 добавлен эвент
WeightProviderChangedEvent
, выбрасывающийся при изменении активной системы веса.
Хочу искренне поблагодарить всех, кто принимал участие в обсуждении WeightAPI. Спасибо вам за вашу критику и советы. И хотя сейчас апи далек от совершенства, шаг за шагом
я его допилю, как когда-то обещал.
Иструкции по установке и использованию в посте форума и в доках на гитхабе, а так же код в мастер-ветке будут обновлены чуть позже, т.к. мне придется хорошенько занятся тестированием как самого апи, так и его билдскриптом.