Перейти к содержанию

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.