Модификаторы классов (Class Tweakers) 26.1.2
Изучите, что такое модификаторы классов и как их настроить.
Модификаторы классов (ранее известные как расширители доступа, до расширения их возможностей) предоставляют инструменты трансформации, которые дополняют манипуляции с байт-кодом через Mixin. Они также позволяют сделать некоторые runtime-модификации (изменения в среде выполнения) доступными внутри среды разработки (IDE).
WARNING
Модификаторы классов не привязаны к конкретной версии Minecraft, однако они доступны только начиная с Fabric Loader 0.18.0 и Loom 1.12, и могут применяться исключительно к ванильным классам Minecraft.
Установка
Формат файла
По общему правилу файлы модификаторов классов называют по вашему modid — например, example-mod.classtweaker, чтобы плагины среды разработки (IDE) могли их распознать. Находиться такие файлы должны в папке resources.
Первой строкой файла обязательно должен идти следующий заголовок:
classtweaker
classTweaker v1 official1
Для некоторых функций может потребоваться версия выше v1 — это будет указано на соответствующих страницах.
Файлы модификаторов классов могут содержать пустые строки и комментарии, начинающиеся на #. Комментарии могут начинаться с конца строки.
Синтаксис может меняться в зависимости от используемой функции, но каждая модификация объявляется как отдельная "запись" (entry) с новой строки и начинается с "директивы" (directive), которая определяет тип применяемого изменения. Элементы записи можно разделять любыми пробельными символами, включая знаки табуляции.
Транзитивные записи
Чтобы сделанные вами изменения в декомпилированном исходном коде были видны модам, которые зависят от вашего, добавьте к директиве префикс transitive-:
classtweaker
# Transitive Access Widening directives
transitive-accessible
transitive-extendable
transitive-mutable
# Transitive Interface Injection directive
transitive-inject-interface
# Transitive Enum Extension directive
transitive-extend-enumУказание расположения файла
Файл модификатора класса должен быть указан в файлах build.gradle и fabric.mod.json. Помните, что для использования модификаторов классов ваш проект также должен зависеть от Fabric Loader версии 0.18.0 или выше.
Эти параметры по-прежнему называются в честь расширителей доступа (access wideners) для сохранения обратной совместимости.
build.gradle
gradle
loom {
accessWidenerPath = file("src/main/resources/example-mod.classtweaker")
}1
2
3
4
5
2
3
4
5
fabric.mod.json
json
...
"accessWidener": "example-mod.classtweaker",
...После указания расположения файла в build.gradle не забудьте перезагрузить Gradle-проект в IDE.
Проверка файла
По умолчанию модификатор классов будет игнорировать записи, ссылающиеся на целевые объекты модификации, которые не удалось найти. Чтобы проверить все классы, поля и методы, указанные в файле на правильность, запустите Gradle-задачу validateAccessWidener.
Ошибки укажут на неправильную запись, однако они могут не показать, какая именно часть записи содержит ошибку.




