PixelLauncher 2.1.2 — секции настроек, панель быстрых настроек, сборки Modrinth/CurseForge

This commit is contained in:
kosta committed 2026-10-20 17:36:35 +07:00
1 parent 80dc1826a1
commit 39cf752b7b
13 files changed
+972 -49

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
"""Утилиты для работы с модпаками Modrinth/CurseForge."""
import os
import re
import tempfile
from . import forge, http, mods
from .java_fetch import _safe_join
from . import modrinth, curseforge
def install_pack_mrpack_url(game_dir, url, log=None, progress=None, cancel=None):
"""Скачивает и ставит .mrpack по URL."""
from . import mrpack as mrpack_mod
filename = url.rsplit("/", 1)[-1] or "pack.mrpack"
return mrpack_mod.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)
def install_pack_modrinth(project_id, game_dir, version=None, game_version="",
loader="", log=None, progress=None, cancel=None):
"""Устанавливает сборку Modrinth по project_id (slug или id).
Возвращает (id_версии, скачано_файлов).
"""
from . import mrpack as mrpack_mod
vs = modrinth.get_modpack_versions(project_id, game_version=game_version,
loader=loader)
if not vs:
raise RuntimeError("Нет версий сборки Modrinth")
v = version if version else vs[0]
if isinstance(v, str):
v = next((x for x in vs if x["id"] == v or x["filename"] == v), vs[0])
url = v.get("url") or ""
if not url:
raise RuntimeError("У версии сборки нет ссылки на файл")
filename = v.get("filename") or "pack.mrpack"
return mrpack_mod.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)
def install_pack_curseforge(mod_id, file_id, game_dir, log=None, progress=None,
cancel=None):
"""Устанавливает сборку CurseForge (mod_id + file_id)."""
from . import cfpack
info = curseforge.get_file(mod_id, file_id)
url = info.get("download_url") or ""
if not url:
raise RuntimeError("Не удалось получить ссылку на загрузку CurseForge")
filename = info.get("file_name") or ("pack-%s.zip" % mod_id)
return cfpack.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)
def install_pack_curseforge_url(game_dir, url, log=None, progress=None,
cancel=None):
"""Устанавливает сборку CurseForge по прямой ссылке на zip."""
from . import cfpack
filename = os.path.basename(url.split("?")[0]) or "pack.zip"
return cfpack.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)