Fabric Loom, або просто Loom, це плаґін Gradle для розробки модів в екосистемі Fabric.
Loom надає утиліти для встановлення Minecraft і модів у середовищі розробки, щоб ви могли зв’язуватися з ними щодо обфускації Minecraft та її відмінностей між дистрибутивами та версіями. Він також надає налаштування запуску для використання із Завантажувачем Fabric, обробкою компіляції міксинів та утиліт для системи jar усередині jar Завантажувача Fabric.
Loom підтримує всі версії Minecraft, навіть ті, які офіційно не підтримуються Fabric API, оскільки він не залежить від версії.
ВАЖЛИВО
Ця сторінка є посиланням на всі опції та функції Loom. Якщо ви тільки починаєте, прочитайте вступ до Fabric.
ID плаґіна
Loom використовує кілька різних ID плаґінів:
net.fabricmc.fabric-loomвикористовуватиметься для версій без обфускації (Minecraft 26.1 або новішої)net.fabricmc.fabric-loom-remapвикористовуватиметься в обфускованих версіях (Minecraft 1.21.11 або старіших)fabric-loom(застарілий), підтримується лише для зворотної сумісності з обфускованими версіями. Натомість використовуйтеnet.fabricmc.fabric-loom-remapnet.fabricmc.fabric-loom-companion, у розширених налаштуваннях кількох проєктів. Докладніше про підпроєкти
Залежно від підпроєктів
Під час налаштування багатопроєктної збірки, яка залежить від іншого проєкту Loom, ви повинні використовувати конфігурацію namedElements, коли це залежить від іншого проєкту. Усталено «виходи» проєкту переставляються на проміжні назви. Налаштування namedElements містить вихідні дані проєкту, які не було перемаповано.
groovy
dependencies {
implementation project(path: ":name", configuration: "namedElements")
}1
2
3
2
3
Якщо ви використовуєте розділені вихідні набори в збірці з кількома проєктами, вам також потрібно буде додати залежність для клієнтського вихідного набору іншого проєкту.
groovy
dependencies {
clientImplementation project(":name").sourceSets.client.output
}1
2
3
2
3
Розділення клієнта та загальний код
Протягом багатьох років поширеним джерелом збоїв на сервері були моди, які випадково викликали клієнтський код під час встановлення на сервері. Новіші версії Loom і завантажувача надають можливість вимагати переміщення всього клієнтського коду до власного вихідного набору. Це робиться для того, щоб розв'язати проблему під час компіляції, але збірка все одно призведе до єдиного файлу jar, який працює з обох сторін.
Наступний фрагмент із файлу build.gradle показує, як можна увімкнути це для свого моду. Оскільки тепер ваш мод буде розділено на два набори джерел, вам потрібно буде використовувати новий DSL, щоб визначити набори джерел вашого мода. Це дозволяє Завантажувачу Fabric згрупувати шлях до класів вашого мода. Це також корисно для деяких інших складних налаштувань кількох проєктів.
Minecraft 1.18 (рекомендовано 1.19), Завантажувач 0.14 і Loom 1.0 або новішої версії потрібні для розділення клієнтського та загального коду.
groovy
loom {
splitEnvironmentSourceSets()
mods {
example-mod {
sourceSet sourceSets.main
sourceSet sourceSets.client
}
}
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Розв'язування проблем
Loom і/або Gradle іноді можуть виходити з ладу через пошкоджені файли кешу. Запуск ./gradlew build --refresh-dependencies змусить Gradle і Loom повторно завантажити та відтворити всі файли. Це може зайняти кілька хвилин, але зазвичай цього достатньо, щоб розв'язати проблеми, пов’язані з кеш-пам’яттю.
Налаштування середовища розробки
Loom розроблено для роботи з коробки(out-of-the-box), просто налаштувавши робочий простір у вашому IDE. Він робить багато речей за лаштунками для створення середовища розробки з Minecraft:
- Завантажує клієнт і сервер jar з офіційних каналів для налаштованої версії Minecraft
- Об’єднує клієнтську та серверну jar для створення об’єднаного jar з анотаціями @Environment і @EnvironmentInterface
- Завантажує налаштовані мапінги
- Переставляє об’єднаний jar з проміжними показами, щоб створити проміжний jar
- Перемаповує об’єднаний jar з мапінгами Yarn, щоб створити мапований jar
- Необов’язково: декомпілює мапований jar, щоб створити маповані джерела jar і лінійну мапу, і застосовує її до мапованого jar
- Додає залежності Minecraft
- Завантаження активів Minecraft
- Обробляє та включає доповнені модом залежності
Кеші
${GRADLE_HOME}/caches/fabric-loom: Кеш користувача, кеш, спільний для всіх проєктів Loom для користувача. Використовується для кешування ресурсів Minecraft, jar, об’єднаних jar, проміжних jar і показу jar.gradle/loom-cache: постійний кеш кореневого проєкту, спільний кеш для проєкту та його підпроєктів. Використовується для кешу переназначених модів, а також створених включених jar модів**/build/loom-cache: кеш збірки (під)проєктів
Налаштування залежностей
minecraft: визначає версію Minecraft для використання в середовищі розробкиmappings: визначає мапінги, які будуть використовуватися в середовищі розробкиmodImplementation,modApiіmodRuntime: розширені варіантиimplementation,apiіruntimeдля залежностей мода. Буде перемаовано, щоб відповідати мапінгам у середовищі розробки, і будь-які вкладені jar буде видаленоinclude: оголошує залежність, яка має бути включена як jar усередині jar у вивідremapJar. Це налаштування залежності не є транзитивною. Для залежностей, не пов’язаних із модами, Loom згенерує файл mod jar ізfabric.mod.json, використовуючи ID мода як назву та ту саму версію
Усталені налаштування
- Застосовує такі плаґіни:
java,eclipse - Додає такі репозиторії Maven: Fabric, Mojang і Maven Central
- Налаштовує завдання
eclipse, яке завершується завданнямgenEclipseRuns - Якщо тека
.ideaіснує в кореневому проєкті, завантажує ресурси (якщо вони не оновлені) і встановлює налаштування запуску в.idea/runConfigurations - Додає
net.fabricmc:fabric-mixin-compile-extensionsі його залежності з налаштувань залежностейannotationProcessor - Налаштовує всі нетестові завдання JavaCompile за допомогою налаштувань для процесора анотацій Mixin
- Налаштовує завдання
remapJarдля виведення JAR-файлу з такою самою назвою, як і виведення завданняjar, а потім додає класифікатор «dev» до завданняjar - Налаштовує завдання
remapSourcesJarдля обробки виводу завданняsourcesJar, якщо завдання існує - Додає завдання
remapJarіremapSourcesJarяк залежності завданняbuild - Налаштовує завдання
remapJarіremapSourcesJarдля додавання їхніх результатів як артефактівarchivesпід час виконання - Для кожної MavenPublication (з плаґіна
maven-publish) вручну додає залежності до POM для налаштування залежностей мода, за умови, що налаштування залежностей має область Maven
Усі конфігурації запуску мають каталог запуску ${projectDir}/run та аргумент VM -Dfabric.development=true. Основні класи для налаштувань запуску зазвичай визначаються файлом fabric-installer.json у корені JAR-файлу Завантажувача Fabric, якщо він включений як залежність мода, але файл може бути визначений будь-якою залежністю мода. Якщо такий файл не знайдено, основними класами усталено є net.fabricmc.loader.launch.knot.KnotClient і net.fabricmc.loader.launch.knot.KnotServer.








