Розширення доступу
Розширення доступу — це тип твікінгу класу, який використовується для послаблення обмежень доступу до класів, методів і полів і відбиття цієї зміни в декомпільованому джерелі. Це охоплює надання їм загальнодоступних, розширюваних і/або змінних.
Щоб отримати доступ до полів або методів, безпечніше та простіше використовувати міксини доступу, але є дві ситуації, коли засобів доступу недостатньо і необхідне розширення доступу:
- Якщо вам потрібен доступ до
private,protectedабо пакетно-приватного класу - Якщо вам потрібно перевизначити метод
finalабо створити підкласfinalкласу
Однак, на відміну від міксинів доступу, твікінг класу працює лише зі стандартними класами Minecraft, а не з іншими модами.
Директиви доступу
Записи розширювача доступу починаються з одного з трьох ключових слів директиви, які вказують тип модифікації, яку слід застосувати.
Доступно
accessible може націлюватися на класи, методи та поля:
- Робить поля та класи публічними.
- Методи стають публічними та кінцевими, якщо спочатку були приватними.
Зроблення методу або поля доступним також робить доступним його клас.
Розширювані
extendable може націлюватись на класи та методи:
- Класи стають публічними та некінцевими
- Методи стають захищеними та некінцевими
Зроблення методу розширюваним також робить його клас розширюваним.
Змінний
mutable може зробити поле некінцевим.
Щоб зробити приватне і кінцеве поле одночасно доступним і змінним, ви повинні зробити два окремих записи у файлі.
Перехідні директиви
Щоб показати певні зміни розширення доступу до модів залежно від вашого, ви додаєте до відповідних директив префікс transitive-*:
txt
transitive-accessible
transitive-extendable
transitive-mutableВизначення цілей
Для твікінгу класів, класи використовують свої внутрішні імена. Для полів і методів ви повинні вказати назву класу, ім’я та дескриптор байт-коду.
TIP
Назви цілей повинні відповідати вашим поточним мапінгами.
Формат:
txt
<accessible / extendable> class <className>Приклад:
txt
# Makes the inner class TypeSpecificTrade in VillagerTrades public
accessible class net/minecraft/world/entity/npc/villager/VillagerTrades$TypeSpecificTradeГенерація записів
Написання записів розширення доступу вручну займає багато часу та може призвести до людських помилок. Розгляньмо інструменти, які спрощують частину процесу, дозволяючи створювати та копіювати записи.
mcsrc.dev
Доступно для всіх версій із необфускованим JAR, а саме 1.21.11 і вище, mcsrc дозволяє декомпілювати та переміщатися з джерелом Minecraft у браузері та копіювати міксини, отримувати доступ до розширювача або переходу до цілей трансформатора в буфер обміну. Назви класів, методів і полів mcsrc узгоджується з мапінгами Mojang.
Щоб скопіювати запис розширювача доступу, спочатку перейдіть до класу, який ви хочете змінити, і натисніть ПКМ на вашій меті, щоб відкрити спливне меню.

Потім натисніть Copy Class Tweaker / Access Widener, і зверху сторінки має з’явитися підтвердження.

Потім ви можете вставити запис у свій файл твікер класу.
Плаґін Development Minecraft (IntelliJ IDEA)
Плаґін Development Minecraft, також відомий як MCDev, — це плаґін IntelliJ IDEA, який допомагає в різних аспектах розробки модів Minecraft. Наприклад, це дозволяє копіювати записи розширення доступу з декомпільованого джерела до буфера обміну.
Щоб скопіювати запис розширювача доступу, спочатку перейдіть до класу, який ви хочете змінити, і натисніть ПКМ на вашій меті, щоб відкрити спливне меню.

Потім натисніть Copy / Paste Special і AW Entry.

Тепер на елементі, який ви натиснули ПКМ, має з’явитися підтвердження.

Потім ви можете вставити запис у свій файл твікер класу.
Linkie
Linkie – це сайт, який дає змогу переглядати та перекладати різні мапінги. Він також надає записи розширювачів доступу для класу, методу або поля, які ви переглядаєте.
По-перше, переконайтеся, що ви вибрали правильну версію та мапінги в меню ліворуч:

Потім знайдіть елемент, який ви бажаєте змінити, і під результатом запис розширювача доступу буде вказано як AW:

Ви можете скопіювати його, а потім вставити запис у свій файл налаштування класу.
Застосування змін
Щоб побачити внесені зміни, оновіть проєкт Gradle за допомогою відновлення джерел. Необхідно відповідним чином змінити обмеження доступу для елементів, які ви націлили. Якщо зміни не показано, ви можете спробувати перевірити файл та перевірити на наявність помилок.
























