2026-10-11 22:32:13 +03:00
|
|
|
# LoaderRow.qml
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Одна строка модлоадера в карточке [BuildsDialog](BuildsDialog.md): чекбокс, а если он отмечен,
|
|
|
|
|
выпадающий список версий под выбранную версию Minecraft.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Совместимость здесь не проверяется. `backend.loaderVersions()` отдаёт список уже под конкретную
|
|
|
|
|
версию игры, и несовместимых строк в нём нет. Если список пустой, значит, модлоадер эту версию не
|
|
|
|
|
поддерживает, и вместо пустого выпадающего списка показывается текст.
|
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
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| `backend` (required) | `LauncherBackend` |
|
|
|
|
|
| `loaderKey` (required) | `forge`, `fabric`, `neoforge`, `quilt` |
|
|
|
|
|
| `title` (required) | подпись у чекбокса |
|
|
|
|
|
| `gameVersion` | версия Minecraft из карточки; её смена сбрасывает выбор |
|
|
|
|
|
| `checked` | алиас чекбокса |
|
|
|
|
|
| `selectedVersion` | выбранная версия модлоадера |
|
|
|
|
|
| `entries` | строки `{version, label, recommended, stable}` |
|
|
|
|
|
| `applying` | строка заполняется из сборки; изменения в это время не считаются пользовательскими |
|
|
|
|
|
| `userChecked()` | пользователь отметил чекбокс. Карточка снимает отметки с остальных строк |
|
|
|
|
|
| `changed()` | отметка или версия изменились, карточке пора сохранить сборку |
|
|
|
|
|
| `applyBuild(loader, loaderVersion)` | заполнить из сохранённой сборки без `changed()` |
|
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
|
|
|
## applyEntries(list)
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Единственное место, где меняются `entries` и `selectedVersion`. Через него проходят все три пути:
|
|
|
|
|
ответ из кэша, ответ сети и заполнение из сборки. Если выбранной версии в новом списке нет, она
|
|
|
|
|
заменяется первой строкой, а это самая новая версия для этой версии игры. Если при этом значение
|
|
|
|
|
изменилось и строка не в режиме `applying`, испускается `changed()`.
|
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
|
|
|
## Откуда берётся список
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
`reload()` сначала берёт то, что уже есть в кэше (`loaderVersions()`), чтобы список появился сразу,
|
|
|
|
|
а потом просит обновление (`refreshLoaderVersions()`). Ответ приходит в
|
|
|
|
|
`backend.loaderVersionsChanged(key, game)`. Строка сравнивает пару со своей и игнорирует чужие
|
|
|
|
|
ответы: от другого модлоадера или от прошлой версии игры.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Под пустым списком написано «загрузка версий…», пока идёт запрос
|
|
|
|
|
(`loaderVersionsLoading()`), и «не поддерживает версию N» после.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
`applyBuild()` берёт версию из сборки как пожелание. Если под текущую версию игры её нет,
|
|
|
|
|
`applyEntries()` заменит её на самую новую.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
При создании этого документа использовался ИИ.
|