Открыть сервис

Architectury: API и инструменты для модов Minecraft

Architectury — это набор открытых программных библиотек (API) и инструментов для создания модификаций (модов) к компьютерной игре Minecraft, предназначенный для упрощения разработки кросс-платформенных модов, работающих одновременно с популярными загрузчиками модов Forge и Fabric. Проект также предоставляет шаблоны и утилиты для автоматизации сборки, позволяя разработчикам писать общий код один раз, а затем адаптировать его под конкретные игровые среды без значительных переписываний.

История и предпосылки создания

Проект Architectury был создан в 2020 году разработчиками, известными под псевдонимами shedaniel и MaxNeedsSnacks, на фоне раскола экосистемы модификаций Minecraft. Долгое время стандартом являлся загрузчик Forge, однако с выходом версии игры 1.13 и последующих обновлений Mojang значительно усложнила внутренний код игры, что привело к задержкам обновления Forge. Это стимулировало появление более легковесного и быстрого загрузчика Fabric, который, однако, не был совместим с модами, написанными для Forge.

В результате мододелы оказались перед выбором: писать мод только для одной платформы, теряя значительную часть аудитории, либо поддерживать две отдельные версии кода, что удваивало трудозатраты. Architectury возник как попытка решить эту проблему, предложив абстрактный слой между кодом мода и конкретным загрузчиком.

Ключевой особенностью проекта стала его тесная интеграция с другим инструментом — Arch Loom (ранее известным как Architectury Loom), который является форком плагина Gradle для Fabric (Fabric Loom) и обеспечивает среду сборки, способную генерировать артефакты для обеих платформ из единой кодовой базы.

Архитектура и принципы работы

Основная идея Architectury заключается в разделении кода мода на три логические части:

  1. Общий код (Common): содержит игровую логику, данные, рецепты и прочие элементы, не зависящие от специфики загрузчика. Этот код компилируется в отдельный JAR-файл.
  2. Код Forge (Forge): содержит реализации, специфичные для Forge, включая обработку событий, реестров и хуков, которые различаются в этом загрузчике.
  3. Код Fabric (Fabric): аналогичная часть для Fabric, использующая его API (Fabric API).

Проект предоставляет набор аннотаций и интерфейсов, которые помогают разработчику абстрагироваться от различий. Например, аннотация @ExpectPlatform позволяет объявить метод в общем коде, но предоставить его реализацию отдельно для каждой платформы. Если метод не требует платформенной реализации, используется аннотация @PlatformOnly.

Сборка проекта осуществляется с помощью системы Gradle. Специализированный плагин анализирует структуру модулей и автоматически связывает общий код с кодом конкретных загрузчиков на этапе компиляции, создавая «боевые» версии мода для распространения.

Компоненты экосистемы

Помимо основной библиотеки, экосистема Architectury включает несколько взаимосвязанных проектов, которые часто путают с основным API:

  • Architectury API: непосредственно библиотека, которую подключают к модам. Она содержит утилиты для работы с сетью, рендерингом, меню и другими аспектами, где API Forge и Fabric сильно расходятся.
  • Architectury Loom (Arch Loom): инструмент сборки на базе Gradle. Он позволяет использовать общий код и обеспечивает корректную компиляцию промежуточных (intermediary) маппингов.
  • Architectury Templates: репозиторий с готовыми шаблонами проектов на GitHub, позволяющий быстро создать структуру мультиплатформенного мода в несколько кликов.
  • Architectury Plugin: плагин для IntelliJ IDEA, упрощающий создание и синхронизацию модулей через графический интерфейс.

Сравнение с альтернативами

На момент расцвета проекта основным конкурентом Architectury являлся проект MultiLoader от сообщества. Если Architectury предлагает собственный слой абстракции и утилиты, то MultiLoader использует более минималистичный подход, полагаясь на стандартные механизмы Gradle и Java. MultiLoader не предоставляет общего API, а лишь настраивает окружение для запуска одного и того же кода на разных загрузчиках.

Выбор между этими инструментами часто зависит от предпочтений разработчика. Architectury считается более «тяжелым» решением, но предоставляет готовые решения для типовых задач, тогда как MultiLoader дает больше гибкости и контроля, но требует от разработчика самостоятельного написания платформенных адаптеров.

Критика и недостатки

Основные нарекания сообщества к Architectury связаны с его сложностью по сравнению с написанием мода для одного загрузчика. Процесс настройки окружения и отладки платформенных различий может быть нетривиальным для новичков. Также критике подвергалась зависимость от скорости обновления самого Architectury при выходе новых версий Minecraft — если разработчики API задерживаются с выпуском совместимой версии, это блокирует обновление всех модов, созданных на его основе.

Кроме того, некоторые разработчики отмечают, что использование Architectury добавляет лишний слой косвенности, что может незначительно увеличивать размер конечного файла мода и усложнять чтение стектрейсов при ошибках.

Влияние и современное состояние

Несмотря на критику, Architectury стал одним из стандартов де-факто в индустрии моддинга Minecraft в начале 2020-х годов. Множество крупных и известных модов, включая такие как REI (Roughly Enough Items), Traveler's Backpack и многие другие, используют эту библиотеку для поддержки обеих платформ одновременно.

Проект продолжает активно развиваться, поддерживая актуальные версии игры. Разработчики стремятся минимизировать разрыв в функциональности между Forge и Fabric, который постепенно сокращается, что делает кросс-платформенную разработку все более простой задачей.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →