Fabric Loader 26.1.2
Легковесный загрузчик модов, на котором основан проект Fabric.
Fabric Loader — это легковесный загрузчик модов от Fabric. Он предоставляет инструменты, необходимые для модификации любого Java-приложения. С другой стороны, хуки для конкретных игр и версий относятся к Fabric API.
INFO
Хотя Fabric Loader в основном используется для Minecraft, можно создать игровой провайдер и для других Java-приложений (например, для таких игр, как Slay the Spire или Hytale).
Fabric Loader предоставляет сервисы, которые позволяют модам выполнять код во время инициализации, трансформировать классы, а также объявлять и предоставлять зависимости модов в различных окружениях.
Javadocs для последней версии Fabric Loader можно найти на сайте Develop.
Получить singleton экземпляр Fabric Loader можно с помощью FabricLoader.getInstance(). Например, метод FabricLoader.getInstance().isModLoaded(String id) можно использовать для проверки того, запущен ли другой мод.
Моды
Мод представляет собой JAR-архив с файлом метаданных fabric.mod.json в корне, который определяет способ его загрузки. Этот файл содержит идентификатор (ID) и номер версии мода, а также точки входа и конфигурации миксинов (mixin).
ID мода идентифицирует его; любые два мода с одинаковым ID считаются одним и тем же модом. Одновременно может быть загружена только одна версия мода.
Мод также может объявлять, от каких других модов он зависит или с какими конфликтует. Fabric Loader попытается разрешить зависимости и загрузить подходящие версии модов; если ему это не удастся, игра не запустится.
Fabric Loader дает всем модам равные возможности для модификации игры. Например, все, что делает Fabric API, может быть сделано любым другим модом.
Моды загружаются как из classpath, так и из директории mods. Эту директорию можно изменить с помощью системного свойства fabric.modsFolder.
Вложенные JAR-архивы
INFO
Использование опции include в Fabric Loom автоматически обрабатывает вложение JAR-архива, включая генерацию файла fabric.mod.json для JAR-архивов, не являющихся модами.
Вложенные JAR-архивы позволяют моду предоставлять собственные зависимости. Это помогает Fabric Loader находить лучшую версию при разрешении зависимостей вместо того, чтобы требовать их отдельной установки.
Вложенные JAR-архивы работают как любой другой мод и имеют собственный файл метаданных, но находятся внутри родительского JAR-архива. Обратите внимание, что вложенные моды могут точно так же содержать в себе другие дочерние моды.
Вложенные JAR-архивы извлекаются на диск при запуске игры. Пути к вложенным JAR-архивам должны быть указаны относительно корня содержащего их JAR-архива.
Точки входа
Fabric Loader использует систему точек входа (entrypoints), которая служит для предоставления определенного кода загрузчику Fabric Loader для инициализации или другим модам.
Инициализаторы загружаются и вызываются на ранней стадии загрузки игры, что позволяет моду вносить свои изменения с помощью кода. Эти точки входа обычно используются для начальной подготовки модов путем регистрации объектов в реестре (registry), слушателей событий и других вызовов для последующих действий.
Миксины
Миксины позволяют модам трансформировать классы Minecraft и даже классы других модов. Это единственный тип трансформации классов, который Fabric Loader поддерживает официально. Мод может объявить свою собственную конфигурацию миксинов, что включает использование Mixin.
Fabric Loader использует модифицированный форк оригинального Sponge Mixin. Тем не менее, информация на вики-странице Mixin по-прежнему во многом актуальна.
Среди модификаций Fabric можно выделить: разрешение всех точек инъекции по умолчанию внутри конструкторов, оптимизация (исключение) неиспользуемых CallbackInfo, предоставление исправлений для обратной совместимости, исправление статических shadow-полей, разрешение инжекторов в интерфейсах и многое другое.
Маппинги
INFO
Маппинги актуальны только при использовании Fabric Loader в обфусцированных играх, включая версии Minecraft до 26.1.
Fabric Loader предоставляет API MappingResolver для определения имен классов, полей и методов с учетом различных окружений, в которых могут быть загружены моды. Это можно использовать для поддержки рефлексии в любом окружении, если у Fabric Loader есть доступ к маппингам для разрешения имен.
java
FabricLoader.getInstance().getMappingResolver().mapClassName("intermediary", "net.minecraft.class_5421") // Resolves to `RecipeBookType` on named versions of 1.21.111
При запуске в недевелоперском (клиентском) окружении на обфусцированной игре Fabric Loader перемапит JAR-архив(ы) игры в промежуточные имена (intermediary). Ожидается, что моды, разработанные для обфусцированных игр, будут замаплены на intermediary, что обеспечит совместимость с этим окружением. Перемапленные JAR-архивы кешируются и сохраняются в ${gameDir}/.fabric/remappedJars/${minecraftVersion} для повторного использования при последующих запусках.







