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

3.8 KiB
Raw Permalink Blame History

LoaderRow.qml

Одна строка модлоадера в карточке BuildsDialog: чекбокс, а если он отмечен, выпадающий список версий под выбранную версию Minecraft.

Совместимость здесь не проверяется. backend.loaderVersions() отдаёт список уже под конкретную версию игры, и несовместимых строк в нём нет. Если список пустой, значит, модлоадер эту версию не поддерживает, и вместо пустого выпадающего списка показывается текст.

Интерфейс

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()

Пока версия игры не выбрана, чекбокс выключен.

applyEntries(list)

Единственное место, где меняются entries и selectedVersion. Через него проходят все три пути: ответ из кэша, ответ сети и заполнение из сборки. Если выбранной версии в новом списке нет, она заменяется первой строкой, а это самая новая версия для этой версии игры. Если при этом значение изменилось и строка не в режиме applying, испускается changed().

Раньше проверку делал только путь из сети, и версия модлоадера, выбранная под прошлую версию игры, доживала до сохранения сборки.

Откуда берётся список

reload() сначала берёт то, что уже есть в кэше (loaderVersions()), чтобы список появился сразу, а потом просит обновление (refreshLoaderVersions()). Ответ приходит в backend.loaderVersionsChanged(key, game). Строка сравнивает пару со своей и игнорирует чужие ответы: от другого модлоадера или от прошлой версии игры.

Под пустым списком написано «загрузка версий…», пока идёт запрос (loaderVersionsLoading()), и «не поддерживает версию N» после.

applyBuild() берёт версию из сборки как пожелание. Если под текущую версию игры её нет, applyEntries() заменит её на самую новую.


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