Files
BiLauncher/doc/cpp/javaruntime.md
T
2026-10-11 22:32:13 +03:00

4.9 KiB
Raw Permalink Blame History

javaruntime.h

javaruntime.h, javaruntime.cpp

Общие типы для Java: виды сборок, строка каталога, запись об установленной сборке, работа с папкой <root>/java и таблица «какая Java нужна какой версии игры».

Виды сборок

JavaRuntimeKind Ключ Что это
Mojang java сборки, которые Mojang раздаёт для своего лаунчера
Jdk jdk Eclipse Temurin JDK
Jre jre Eclipse Temurin JRE

javaKindKey(), javaKindFromKey(), javaKindTitle() переводят между перечислением, ключом и подписью для интерфейса. Ключ хранится в runtime.json установленной сборки и используется в QML.

JavaRuntimeEntry

Строка каталога JavaRuntimeService, то есть то, что можно скачать.

Поле Что это
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

InstalledJavaRuntime

Скачанная сборка: id, kind (ключ), major, version, javaPath (абсолютный путь к java/java.exe), size (сколько заняла на диске).

JavaRuntimeStore

Каждая сборка лежит в <root>/java/<id>/, а рядом с ней runtime.json:

{ "id": "...", "kind": "jdk", "major": 21, "version": "21.0.7", "javaPath": "bin/java", "size": 197132288 }

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 потянет.


При создании этого документа использовался ИИ.