Files

94 lines
4.9 KiB
Markdown
Raw Permalink Normal View History

2026-10-11 22:32:13 +03:00
# javaruntime.h
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
`javaruntime.h`, `javaruntime.cpp`
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Общие типы для Java: виды сборок, строка каталога, запись об установленной сборке, работа с папкой
`<root>/java` и таблица «какая Java нужна какой версии игры».
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
## Виды сборок
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
| `JavaRuntimeKind` | Ключ | Что это |
|-------------------|------|---------|
| `Mojang` | `java` | сборки, которые Mojang раздаёт для своего лаунчера |
| `Jdk` | `jdk` | Eclipse Temurin JDK |
| `Jre` | `jre` | Eclipse Temurin JRE |
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
`javaKindKey()`, `javaKindFromKey()`, `javaKindTitle()` переводят между перечислением, ключом и
подписью для интерфейса. Ключ хранится в `runtime.json` установленной сборки и используется в QML.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
## JavaRuntimeEntry
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Строка каталога [JavaRuntimeService](JavaRuntimeService.md), то есть то, что можно скачать.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
| Поле | Что это |
|------|---------|
| `id` | `temurin-jdk-21.0.12.1_1`, `mojang-java-runtime-delta` |
| `kind` | |
| `major` | 8, 17, 21… |
| `version` | `21.0.12.1+1`, `21.0.7` |
| `component` | только у Mojang: `java-runtime-delta` и т. п. |
| `released` | |
| `url` | архив Temurin или `manifest.json` компонента Mojang |
| `checksum` | sha256 архива Temurin или sha1 манифеста Mojang |
| `size` | размер загрузки, 0 если неизвестен |
| `archive` | `zip`, `tar.gz` или `mojang` |
| `architecture` | `x64`, `aarch64`; на macOS может быть не родной (см. JavaRuntimeService) |
| `lts` | |
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
## InstalledJavaRuntime
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Скачанная сборка: `id`, `kind` (ключ), `major`, `version`, `javaPath` (абсолютный путь к
`java`/`java.exe`), `size` (сколько заняла на диске).
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
## JavaRuntimeStore
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Каждая сборка лежит в `<root>/java/<id>/`, а рядом с ней `runtime.json`:
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
```json
{ "id": "...", "kind": "jdk", "major": 21, "version": "21.0.7", "javaPath": "bin/java", "size": 197132288 }
2026-09-03 09:16:56 +03:00
```
2026-10-11 22:32:13 +03:00
`javaPath` хранится относительно папки сборки, так что папку лаунчера можно переносить.
- `sanitizeId(id)` — всё, кроме букв, цифр, `.`, `-`, `_`, заменяется на `_`. Ведущие точки
убираются.
- `dirFor(id)` — `<root>/java/<sanitizeId(id)>`.
- `find(id)` — читает `runtime.json`. Возвращает пусто, если файла нет, `id` в нём другой или
`java` по указанному пути не существует. Поэтому недокачанная сборка без `runtime.json` в
списке не появится.
- `installed()` — всё, что нашлось, от новых мажорных версий к старым.
- `locateBinary(rootDir)` — ищет `bin/java` внутри распакованного дерева и берёт самый короткий
путь. Нужно потому, что у архивов разная вложенность: `jdk-21/bin`, `jdk-21/Contents/Home/bin`
и т. п.
- `writeMeta(runtime, &error)` — пишет `runtime.json` через `QSaveFile`.
- `remove(id, &error)` — удаляет папку сборки. Перед этим проверяет, что путь лежит внутри
`<root>/java/`.
## JavaRequirement
`minimumFor(minecraftVersionId)` — минимальная Java для версии игры:
| Версия игры | Java |
|-------------|------|
| до 1.16 включительно, беты, альфы, всё нераспознанное | 8 |
| 1.17 | 16 |
| 1.18 — 1.20.4 | 17 |
| 1.20.5 и новее | 21 |
| версии с новой нумерацией (первое число не 1, например `26.1`) | 21 |
| снапшоты `21wNNx` | 16 |
| снапшоты `22w`, `23w` | 17 |
| снапшоты `24w` и новее | 21 |
| снапшоты до `21w` | 8 |
Пустая строка даёт 0. Таблица нужна там, где описания версии ещё нет на диске: в окне выбора Java
и при установке сезонной сборки. При запуске игры используется `javaVersion.majorVersion` из
описания версии.
Профили модлоадеров (`fabric-loader-...`) по этой таблице дают 8, поэтому бэкенд передаёт сюда
`minecraftVersion` сборки, а не `resolvedVersionId`.
`coverage(javaMajor)` — подпись для окна выбора: какие версии игры эта Java потянет.
2026-09-03 09:16:56 +03:00
---
При создании этого документа использовался ИИ.