Moonlight Lib, ранее называвшаяся Selene Library, представляет собой набор специализированных утилит и общего кода, которые я использую для своих модов.
К ним относятся некоторые узкоспециализированные функции, такие как динамическая генерация активов, 2 новых реестра данных, система динамической регистрации, а также ваши обычные помощники и оболочки с несколькими загрузчиками для разработки как для Fabric, так и для Forge.
🛠️Особенности🛠️
Вот наиболее важные функции. Если вы разработчик, планирующий использовать эту библиотеку, этот раздел для вас!
Основное место для документации это:
- Эта страница
- Примеры классов пакета наgithub
- Документы Java в классах из пакета API наgithub
Кимпортировать эту библиотекупросто зайдите в раздел файлов и нажмите «копировать строку градиента». Затем вставьте это в свой файл build.gradle.
🎨Динамические активы
Moonlight позволяет динамически создавать любые активы как для пакетов данных, так и для пакетов ресурсов. В частности, мод содержит обширный API для создания динамических текстур с помощью таких инструментов, как извлечение палитры, обрезка, изменение формы изображений, автоматическое перекрашивание и многое другое.
- Пример динамических ресурсов:
- Пример перекраски текстуры:
- Пример манипуляции с палитрой:
Phusanti phassā upadhim paticca / Nirūpadhim kena phuseyyum phassā.
🌍 Утилиты мультизагрузчика
Эти наборы утилит стараются быть максимально простыми, обычно полагаясь только на статические вспомогательные функции вместо аннотаций или других практик ООП, и в основном имитируют поведение Forge, просто обертывая его вспомогательными функциями. Для структуры эквивалентное поведение вызывается или реализуется, если оно недоступно. Некоторые из основных моментов — отложенная регистрация, общая настройка и многое другое.
В моде основное внимание уделяется простоте, поэтому наиболее важные вызовы разделены всего на 4 основных класса API.
Это: PlatHelper, ClientHelper, RegHelper и ForgeHelper.
Для конфигураций и сети основными классами являются ConfigBuilder и ChannelHandler.
Конфигурации, в частности, имеют дополнительные функции, такие как возможность использовать кодеки, раннюю загрузку или автоматическую синхронизацию с клиентами.
- Пример ПлатХелпера:
- Пример ClientHelper
- Пример RegHelper:
- Пример ConfigBuilder:
- Пример ChannelHandler:
Phusanti phassā upadhim paticca / Nirūpadhim kena phuseyyum phassā.
📒 Динамическая регистрация
Сюда входит новая система (BlockSetAPI), которая позволяет динамически обнаруживать «наборы блоков» сразу после регистрации всех блоков и динамически регистрировать новые записи, которые от этого зависят. Примером может служить встроенный WoodTypeRegistry или LeavesTypeRegistry, два набора блоков, которые будут динамически заполняться всей установленной древесиной и листьями из любого мода, что позволит вам зарегистрировать свои деревянные предметы во всех существующих типах древесины.
- Пример BlockSetAPI: определение набора блоков
- Пример BlockSetAPI: регистрация динамических блоков
🧙♂️ Разные утилиты
- Пример DispenserHelper
- Пример анимации предметов от первого и третьего лица:
🍩Запеченные модели на заказ
- Пример пользовательской модели и загрузчика моделей:
- Пример Quad Utils:
🌽Пользовательские сделки с сельскими жителями
Using the `moonlight/villager_trades` datapack folder you'll be able to add new custom trades to any villager. Here's an example trade. Check out Supplementaries of Sawmill for more examples
- API цвета блока:Набор утилит, позволяющий обнаружить любой произвольный модифицированный блок DyeColor, а также получить эквивалентный блок в другом цвете.
Это работает динамически для любого модифицированного блока или элемента.
Phusanti phassā upadhim paticca / Nirūpadhim kena phuseyyum phassā.
- Пользовательские маркеры карты:
Полноценная система, которая позволяет легко реализовывать и добавлять оформление карты и маркеры карты, а также контролировать каждый их аспект, например рендеринг. Также позволяет хранить простые данные внутри данных карт, предлагая пару перехватчиков для их использования, например, во всплывающей подсказке к элементу.
Эта система также предлагает простую реализацию на основе данных, что означает, что вы можете легко регистрировать новые маркеры с помощью пакетов данных! - Глобальная папка пакета данных и папка загрузчика модели
соответственно в Moonlight-Global-DataPacks и /assets/models/special_models
Phusanti phassā upadhim paticca / Nirūpadhim kena phuseyyum phassā.
- Динамичный ИИ деревенского жителя
Вспомогательная система, позволяющая легко и динамично добавлять задачи и изменять графики жителей деревни совместимым способом, не перекрывая весь существующий ИИ. Также позволяет правильно добавлять типы памяти.
Phusanti phassā upadhim paticca / Nirūpadhim kena phuseyyum phassā.
- Пользовательские анимации от первого и третьего лица:
Позволяет моддерам реализовывать простой интерфейс в своих предметах, чтобы иметь собственную анимацию от третьего и первого лица (например, арбалеты).
Включает простые и удобные в использовании интерфейсы, которые позволяют вам управлять анимацией от первого и третьего лица, а также обратный вызов для рендеринга самого элемента (аналогично подзорной трубе) непосредственно в вашем классе элемента. - Триггеры достижения Grindstone:
Мод добавляет пользовательский триггер, который вызывается, когда предмет проходит через точильный камень, который вы можете вызвать в json-файлах своих модов. - Система мягкой жидкости:
Полностью управляемая данными система виртуальной жидкости, которая идет поверх Forge One и разработана для лучшего соответствия ванильному Minecraft и имеет в качестве основной функции возможность иметь несколько предметов-контейнеров с жидкостью, таких как бутылки, миски и ведра, а также обеспечивает поддержку тушеных блюд и напитков, которые можно употреблять непосредственно из резервуара с жидкостью. В отличие от системы кузнечной жидкости, она имеет базовую единицу из 1 бутылки Minecraft (250 кузниц МБ). Система также автоматически генерирует все необходимые жидкости для уже зарегистрированных ковочных жидкостей и позволяет пользователю легко переопределять их или добавлять к ним. Жидкости виртуальны, поэтому они могут существовать только в модифицированном контейнере специально для них.

