Access Wideners#
Access wideners (расширители доступа) служат для предоставления доступа к классам, методам или полям. Те, кто использовал Forge уже догадались, что это почти то же самое, что и Access Transformers.
Расширители доступа должны использоваться только там, где не могут использоваться Mixins. В данный момент Mixins бесполезны в двух случаях: * * Необходим доступ к приватному (или package-level) классу * Необходимо переопределить финальные методы или получить доступ к подклассу финального класса
Требования#
- Fabric-loader 0.8.0 или выше
- Loom 0.2.7 или выше
Формат файла#
Создадим и откроем файл <mod_id>.accesswidener
в папке с ресурсами.
Он должен начинаться так:
accessWidener v1 named
named
- пространство имён маппингов.
Файл поддерживает пустые строки и комментарии:
# Это комментарий
Любой пробел можно использовать для разделения в файле, но рекомендуется использовать TAB
. Имена классов разделяются с помощью /
, а для внутренних классов нужно использовать $
.
Классы#
Доступ к классам может быть изменён с помощью значения доступа и имени класса (имя класса определяется пространством имён маппингов).
<access> class <className>
<access>
может быть accessible или extendable
Методы#
Доступ к методам может быть изменён с помощью значения доступа, имени класса, названия метода и его дескриптора.
<access> method <className> <methodName> <methodDesc>
<access>
может быть accessible или extendable<className>
- имя класса-владельца метода<methodName>
- имя метода<methodDesc>
- дескриптор метода
Поля#
Доступ к полям может быть изменён с помощью значения доступа, имении класса, имени поля и дескриптора поля.
<access> field <className> <fieldName> <fieldDesc>
<access>
может быть accessible или extendable<className>
- имя класса-владельца поля<fieldName>
- имя поля<fieldDesc>
- дескриптор поля
Значения доступа#
Extendable#
Должно использоваться если Вы хотите наследоваться от класса или переопределить его методы.
- Класс становится публичным и
final
убирается - Методы становятся
protected
иfinal
убирается
Если Вы сделаете метод extendable
, то и его класс-владелец тоже будет extendable
.
Accessible#
Должно использоваться когда Вы хотите иметь доступ к классу, полю или методу из другого класса.
- Классы становятся публичными
- Методы становятся публичными и финальными если они были приватными
- Поля становятся публичными
Если Вы сделаете метод или поле accessible
, то и его класс-владелец тоже будет accessible
.
Mutable#
Должно использоваться когда Вы хотите изменить финальное поле.
- Снимает модификатор
final
с полей
Использование#
Вы должны указать путь к файлу в gradle.build
и в Вашем fabric.mod.json
.
gradle.build:
minecraft {
accessWidener "src/main/resources/modid.accesswidener"
}
fabric.mod.json:
{
"accessWidener": "modid.accesswidener"
}
Теперь необходимо выполнить gradle genSources
.