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