Loom
Документація для плаґіна Fabric Loom Gradle.
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, у розширених налаштуваннях кількох проєктів. Докладніше про підпроєкти
Залежно від підпроєктів
Під час налаштування багатопроєктної збірки може виникнути потреба створити залежність від іншого підпроєкту. Це можна зробити за допомогою виклику project(...), хоча аргументи залежать від типу використовуваного середовища.
Залежність від не перемапованих підпроєктів
Для Loom без перемапування ми передаватимемо шлях до підпроєкту, розділяючи елементи двокрапками.
Наприклад, на проєкт, розташований у /examples/hello-world, можна посилатися так:
dependencies {
implementation project(":examples:hello-world")
}2
3
Залежність від перемапованих підпроєктів
У Loom, завдяки перемапуванню, вихідні дані проєкту усталено перемапуються на проміжні. У результаті проміжні назви стають доступними для залежного проєкту.
Щоб уникнути цього, ми задаємо namedElements і отримуємо вихідні дані проєкту без перемапування:
dependencies {
implementation project(path: ":examples:hello-world", configuration: "namedElements")
}2
3
Залежність від розділених джерел
Якщо ви використовуєте розділені набори початкового коду в багатопроєктній збірці, вам також потрібно буде додати залежність від набору клієнтської частини іншого проєкту.
dependencies {
clientImplementation this.project(":name").sourceSets.client.output
}2
3
Розділення клієнта та загальний код
Протягом багатьох років поширеним джерелом збоїв на сервері були моди, які випадково викликали клієнтський код під час встановлення на сервері. Новіші версії Loom і Завантажувача надають можливість вимагати переміщення всього клієнтського коду до власного початкового набору. Це робиться для того, щоб розв'язати проблему під час компіляції, але збірка все одно призведе до єдиного файлу jar, який працює з обох сторін.
Наступний фрагмент із файлу build.gradle показує, як можна ввімкнути це для свого мода:
loom {
splitEnvironmentSourceSets()
mods {
"example-mod" {
sourceSet sourceSets.main
sourceSet sourceSets.client
}
}
}2
3
4
5
6
7
8
9
10
Оскільки тепер ваш мод буде розділено на два набори джерел, вам потрібно буде використовувати новий DSL, щоб визначити набори джерел вашого мода. Це дозволяє Завантажувачу Fabric згрупувати шлях до класів вашого мода. Це також корисно для деяких інших складних налаштувань кількох проєктів.
Minecraft 1.18 (рекомендовано 1.19), Завантажувач 0.14 і Loom 1.0 або новішої версії потрібні для розділення клієнтського та загального коду.
Розв'язування проблем
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_USER_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 у кінцевий вихід мода. Це налаштування залежності не є транзитивним. Для залежностей, не пов’язаних із модами, Loom згенерує файл jar мода зfabric.mod.json, використовуючи ID мода як назву та ту саму версію
INFO
Залежності, оголошені за допомогою include, додаються до remapJar у перемапованому Loom або до jar у неперемапованому Loom відповідно. Через це завдання jar з інших плаґінів (таких як shadowJar) не включатимуть ці залежності усталено.
Усталені налаштування
- Застосовує такі плаґіни:
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.








