- Intermediary — это стабильный слой наименования, который Fabric накладывает поверх обфусцированного кода Minecraft.
- Он даёт каждому обфусцированному символу фиксированное имя, которое остаётся неизменным между версиями.
- Скомпилированные моды Fabric распространяются с использованием имен Intermediary, а не читаемых.
- Он снижает количество поломок при обновлениях, но не может спасти мод от удаления кода игры.
Intermediary — это стабильный слой наименования, который Fabric накладывает поверх обфусцированного кода Minecraft. Mojang распространяет игру со скомбинированными именами классов, полей и методов, которые меняются при каждом выпуске. Intermediary даёт каждому из них фиксированное имя, которое остаётся неизменным между версиями, чтобы скомпилированный мод продолжал находить код, который он изменяет, даже после обновления игры.
Где используется Opal
Opal — это мод для Fabric, поэтому он использует этот слой отображения, как и любой другой мод для Fabric. Настраивать его вручную не нужно; руководство по настройке поможет вам начать работу.
Что такое Intermediary на самом деле
Intermediary — это набор отображений: таблица поиска, которая связывает каждый замаскированный символ Minecraft со стабильным, сгенерированным машиной именем. Класс, который игра вызывает a, может стать class_1234 в Intermediary. Имя может быть некрасивым, но оно остаётся постоянным для этого символа на протяжении всех релизов.
Mojang замаскировывает игру при каждой сборке. Имена вроде field_5678 иначе менялись бы от релиза к релизу, поэтому мод, скомпилированный против необfuscated имен, перестаёт работать сразу после обновления игры. Intermediary фиксирует эти имена, так что отображение, а не мод, поглощает изменения.
Почему Fabric mods нуждается в этом
Моды распространяются, скомпилированные против имен Intermediary, а не против читаемых имен, которые разработчик пишет. Именно это решение позволяет Fabric моду продолжать работу на новой сборке игры во многих случаях без перекомпиляции.
При запуске игры Fabric загружает отображение Intermediary для этой версии и переопределяет замаскированные классы игры в стабильные имена, которые ожидает мод. Мод и игра встречаются где-то посередине на наборе имен, которые ни один из них не распространяет в исходном виде.
Intermediary против отображений разработчика
Разработчики не читают и не пишут class_1234. Они работают с читаемым отображением, например, Yarn или Mojmap, которые дают символам описательные имена. Во время сборки читаемые имена компилируются в Intermediary для распространения.
| Уровень | Пример имени | Кто использует | Стабильно между версиями |
|---|---|---|---|
| Обфусцированный | a, field_5678 | Никто вручную | Нет |
| Промежуточный | class_1234 | Поставляемые бинарные файлы модов | Да |
| Yarn / Mojmap | MinecraftClient | Разработчики во время сборки | Читаемый, отслеживаемый по версии |
Разделение позволяет разработчикам кодировать с использованием понятных имён, в то время как версия стабильных исполняемых файлов остаётся неизменной. Читаемые отображения можно заменять; Промежуточный уровень — это общий знаменатель, на котором все сходятся.
Как это вписывается в жизненный цикл мода
- Разработчик пишет код, используя читаемое отображение, такое как Yarn или Mojmap.
- Сборка преобразует эти имена в промежуточные имена.
- Мод поставляется в виде jar-файла, который ссылается на промежуточные символы.
- При запуске Fabric переназначает имена в текущей версии игры из обфусцированных в промежуточные, чтобы мод и игра совпадали.
Именно поэтому отображения являются тихой, но несущей нагрузку частью моддинга Fabric: они являются контрактом, который гарантирует, что моды всегда указывают на правильный код после каждого обновления.
FAQ
Нет. Yarn — это читаемое отображение, по которому разработчики пишут код. Intermediary — это стабильный, автоматически генерируемый слой, на который фактически распространяются скомпилированные моды. Имена Yarn во время сборки компилируются в Intermediary.
Они генерируются, а не пишутся. Названия вроде class_1234 нужны только для того, чтобы быть уникальными и постоянными, а не красивыми. Читабельность обеспечивается Yarn или Mojmap поверх этого.
Нет. Intermediary сохраняет стабильность названий, но если Mojang удалит или перепишет метод, базовый код исчезнет, независимо от названия. Это уменьшает количество поломок, но не устраняет их полностью.
Не особенно. Он работает в фоновом режиме внутри Fabric. Вы сталкиваетесь с ним только как разработчик или при чтении лога с ошибкой, в котором упоминается промежуточный символ.