Moonlight Lib
📖 О библиотеке 📖
Ранее известная как Selene Library, Moonlight Lib — это набор специализированных утилит и общего кода, который я использую для своих модов.
Включает такие уникальные функции, как динамическая генерация ресурсов, два новых реестра данных, система динамической регистрации, а также мультилоадерные помощники и обёртки для разработки под Fabric и Forge.
🛠️ Возможности 🛠️
Вот основные возможности библиотеки. Если вы разработчик, планирующий использовать эту библиотеку, этот раздел для вас!
Основные источники документации:
Чтобы импортировать библиотеку, перейдите в раздел файлов здесь и нажмите "скопировать строку Gradle". Затем вставьте её в ваш файл build.gradle.
🎨 Динамические ресурсы
Moonlight позволяет динамически генерировать любые ресурсы для датапаков и ресурспаков. В частности, мод включает обширный API для создания динамических текстур с такими инструментами, как извлечение палитры, обрезка, изменение формы изображений, автоматическое перекрашивание и многое другое.
- Пример динамических ресурсов:
- Пример перекрашивания текстур:
- Пример работы с палитрой:
🌍 Утилиты для мультилоадера
Эти утилиты максимально просты, обычно полагаются на статические вспомогательные функции вместо аннотаций или других практик ООП. Они в основном эмулируют поведение Forge, просто оборачивая его вспомогательными функциями. Для Fabric эквивалентное поведение вызывается или реализуется, если оно недоступно. Основные вызовы разделены между четырьмя основными классами API.
Это: PlatHelper, ClientHelper, RegHelper и ForgeHelper.
Для конфигураций и сетевого взаимодействия основными классами являются ConfigBuilder и ChannelHandler.
Конфигурации, в частности, имеют дополнительные функции, такие как возможность использования Codecs, загрузка на ранних этапах или автоматическая синхронизация с клиентами.
- Пример PlatHelper:
- Пример ClientHelper:
- Пример RegHelper:
- Пример ConfigBuilder:
- Пример ChannelHandler:
📒 Динамическая регистрация
Это включает новую систему (BlockSetAPI), которая позволяет динамически обнаруживать "наборы блоков" сразу после регистрации всех блоков и динамически регистрировать новые записи, зависящие от них. Примером может служить использование встроенных реестров WoodTypeRegistry или LeavesTypeRegistry, которые будут автоматически заполняться всеми установленными типами древесины и листьев из любых модов, позволяя вам регистрировать ваши деревянные предметы для всех существующих типов древесины.
- Пример BlockSetAPI: определение набора блоков
- Пример BlockSetAPI: регистрация динамических блоков
🧙♂️ Разные утилиты
- Пример DispenserHelper:
- Пример анимаций предметов от первого и третьего лица:
🍩 Пользовательские модели
- Пример пользовательской модели и загрузчика моделей:
- Пример Quad Utils:
🌽 Пользовательские торговые предложения для жителей
Используя папку датапака `moonlight/villager_trades`, вы сможете добавлять новые пользовательские торговые предложения для любого жителя. Вот пример предложения. Ознакомьтесь с Supplementaries или Sawmill для большего количества примеров.
- API для цвета блоков: Набор утилит, позволяющих определять любой произвольный цвет модифицированных блоков DyeColor, а также получать эквивалентный блок другого цвета.
Это работает динамически для любого модифицированного блока или предмета. - Пользовательские маркеры на карте:
Полная система, позволяющая легко реализовывать и добавлять украшения и маркеры на карту, а также контролировать каждый аспект их отображения. Также позволяет хранить простые данные внутри карт, предлагая несколько хуков для их использования, например, в подсказках предметов.
Эта система также предлагает простую реализацию, управляемую данными, что позволяет легко регистрировать новые маркеры с помощью датапаков! - Динамический ИИ жителей
Вспомогательная система для простого и динамического добавления задач и изменения расписания жителей совместимым образом без переопределения всего существующего ИИ. Также позволяет корректно добавлять типы памяти. - Пользовательские анимации от первого и третьего лица:
Позволяет моддерам реализовать простой интерфейс в своих предметах, чтобы они могли иметь пользовательские анимации от первого и третьего лица (например, как у арбалетов).
Включает простые и удобные интерфейсы, которые позволяют управлять анимациями от первого и третьего лица, а также обратный вызов для отрисовки самого предмета (аналогично подзорной трубе) прямо в вашем классе предмета. - Триггеры достижений для точильного камня:
Мод добавляет пользовательский триггер, который вызывается, когда предмет проходит через точильный камень. Вы можете использовать его в своих достижениях в JSON. - Система мягких жидкостей:
Полностью управляемая данными виртуальная система жидкостей, которая работает поверх системы Forge и лучше подходит для ванильного Minecraft. Основная особенность — возможность иметь несколько контейнеров для жидкостей, таких как бутылки, миски и вёдра, а также поддержка тушёных блюд и напитков, которые можно потреблять напрямую из резервуара с жидкостью. В отличие от системы жидкостей Forge, она использует базовую единицу в 1 бутылку Minecraft (250 мб Forge). Система также автоматически генерирует все необходимые жидкости для уже зарегистрированных жидкостей Forge и позволяет пользователю легко переопределять или добавлять их. Жидкости виртуальны, поэтому они могут существовать только в специальных контейнерах для них.