Skip to content

Create ru.md #124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions wiki/misc/mappings/ru.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
## Настройка маппингов в вашей среде разработки

### Что такое маппинги?

Перед тем как новая версия Minecraft попадает на серверы Mojang, она проходит процесс, называемый _обфускацией_, когда имена классов, полей и методов, которые легко читаются, заменяются на случайные буквы для оптимизации размера файла. В результате обфускация делает код трудным для понимания, потому что эти сокращенные имена не являются аббревиатурами реальных имен, а просто случайные буквы. Вот тут и вступают в игру маппинги.

Маппинг — это просто изменение одного имени на другое, в большинстве случаев с обфусцированного на читаемое. Каждый маппинг может также содержать дополнительные метаданные, такие как документация. Набор маппингов называется "набором маппингов" или просто "маппингами". Вы можете представить набор маппингов как словарь перевода, где каждый маппинг — это перевод слова на другой язык. В данном случае, обфусцированные имена — это язык, который использует компьютер, а словарь помогает перевести это на обычный английский.

Однако маппинги между версиями Minecraft не постоянны: например, `DirtBlock` может быть обфусцирован как `abc` в 1.19, но в 1.20 он может быть обфусцирован как `def`. Поэтому важно минимизировать изменения обфускации между версиями, и это решается с помощью промежуточных маппингов, которые преобразуют обфусцированные имена в такие, которые не изменяются между версиями, но все равно не читаются по-английски. Quilt использует Hashed Mojmap, где каждый класс, поле и метод префиксируются как `C_`, `f_` и `m_` соответственно, за которыми следует 8-символьный хэш.

Когда вы разрабатываете моды, вы часто будете видеть промежуточные маппинги Fabric, которые используют префиксы `class_`, `field_` и `method_`, за которыми следует число. Mojang также публикует официальные маппинги, которые часто называются Mojmap (сокращение от Moj(ang)-map(pings)) для каждой версии после 1.14. Поскольку они не имеют промежуточного набора маппингов, вам нужно будет сделать дополнительные шаги, чтобы использовать их вместо других маппингов. К счастью, Loom выполняет этот процесс за вас, поэтому вам не нужно беспокоиться о том, чтобы заменить маппинги в вашем моде на официальные от Mojang.

Существует несколько различных форматов для хранения маппингов, и, по состоянию на момент написания этой статьи, разрабатывается новый формат с множеством улучшений. В нашей экосистеме наиболее часто используется формат [Tiny V2], который использует один файл `.tiny` для хранения маппингов, а поля и методы размещаются как "дочерние" элементы для их родительских классов. Другим часто используемым форматом является формат Enigma, который использует структуру каталогов, где для каждого верхнего уровня класса есть файл, а все элементы организованы в виде дерева, где каждый класс, метод и поле является дочерним элементом другого класса.

### Редактирование маппингов

Наборы маппингов не обязательно должны содержать маппинг для каждого класса, поля или метода в jar-файле, чтобы быть действительными; на самом деле, большинство наборов маппингов не полные. Например, маппинги Quilt (сокращенно QM) достигают 99% завершенности на данный момент. В среде разработки, немаппированные элементы будут использовать промежуточные имена вместо обфусцированных, поэтому если вы когда-либо просматривали код Minecraft с применением QM или Yarn от Fabric, скорее всего, вы видели несколько промежуточных имен. Это еще хуже с параметрами методов: поскольку они подвержены изменениям между версиями, они (обычно) не имеют промежуточных имен, и имена, которые вы видите в коде, зависят от инструментов, которые вы использовали для декомпиляции игры.

Если вы хотите добавить имя или изменить неправильное или плохое, или добавить документацию в код, вы можете начать с выбора набора маппингов, на основе которого будете работать. В этой статье мы будем использовать QM, хотя процесс для Yarn почти идентичен. Если вы хотите работать с маппингами Mojang, вам потребуется сделать несколько дополнительных шагов, которые мы не будем покрывать здесь. Если вы хотите работать с QM, мы настоятельно рекомендуем ознакомиться с его [документацией по вкладу][QM CONTRIBUTING.md] и внести изменения в репозиторий. Вам понадобятся базовые знания Git, но это должно быть довольно легко, если вы уже работали с Git.

Чтобы начать, получите свою собственную копию кода [Quilt Mappings] через клонирование или скачивание репозитория. Если вы хотите в дальнейшем внести свой вклад, прямое скачивание кода не сработает, вам нужно будет [форкнуть репозиторий][fork qm] и клонировать уже этот форк.

Когда у вас будет код, выполните команду `./gradlew mappings` в командной строке или терминале, чтобы запустить [Enigma], наш любимый инструмент для редактирования и записи маппингов. Рай написал отличный [гид по редактированию маппингов в Enigma][Enigma guide], так что вы можете ознакомиться с ним и начать работать с маппингами! После того как вы завершите редактирование, не забудьте сохранить изменения перед закрытием Enigma.

### Внесение изменений обратно в Quilt

Чтобы внести изменения, нужно добавить и зафиксировать изменения, а затем отправить их в ваш форк QM. Это очень легко сделать через IDE, как описано в [статье по настройке](../introduction/setting-up), но если хотите, можно сделать это и через командную строку или терминал с помощью следующих команд.

```bash
git add . # сообщить git, чтобы отслеживать все изменения в текущей директории

git commit -m "Blabla" # добавить изменения в новый коммит (замените "blabla" на краткое описание ваших изменений)

git push # загрузить ваши коммиты в ваш форк QM. Возможно, вам нужно будет добавить `origin <minecraft version>`, если git жалуется на отсутствующую ветку upstream
```

После того как вы отправите изменения в ваш форк, перейдите на вкладку [Pull Requests][QM PRs] и нажмите кнопку "Compare & Pull Request" в примечании о ваших недавних изменениях. Заполните заголовок и описание вашего PR, отправьте его и ждите, пока ваши изменения будут рассмотрены и приняты. Более подробное объяснение процесса PR можно найти в [документации по вкладу][QM CONTRIBUTING.md].

### Использование отредактированных маппингов

Если вы не хотите вносить изменения обратно в Quilt или хотите попробовать их в среде разработки, вы можете выполнить команду `./gradlew publishToMavenLocal`, чтобы сделать нужные файлы доступными для других проектов на вашем компьютере. Теперь вы можете перейти в проект, где хотите применить эти маппинги, и отредактировать файл `build.gradle`, добавив `mavenLocal()` в блок `repositories`, если его там еще нет.

```gradle
repositories {
// ...
mavenLocal()
}
```

Как только вы добавите `mavenLocal()`, вы можете отредактировать файл `libs.versions.toml` в директории `gradle/`, чтобы изменить версию маппингов, которые вы используете, на только что отредактированную. В случае с QM вы можете заменить суффикс `+build.*` на `+local`; другие проекты могут использовать другой формат версий, поэтому вам нужно будет проверить их документацию или код для уточнения.

```diff
minecraft = "1.20.4"
-quilt_mappings = "1.20.4+build.1"
+quilt_mappings = "1.20.4+local"
quilt_loader = "0.23.1"
```

Вот и все! Теперь вы можете перезагрузить gradle через вашу IDE, чтобы применить эти изменения, и использовать ваши новые маппинги при чтении кода Minecraft.