You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Quilt 安装崩溃:Quilt meta JSON 缺少 intermediary 字段时判空跳过,不再空指针崩溃
SDL 消息框:修复 message 误设为标题导致错误信息显示不全
English
✨ New Features
Vulkan device detection & driver capability shimming (#1866): A new native detection module dlopens the system libvulkan or loads the Turnip driver via liblinkerhook, enumerates physical devices for apiVersion/extensions/features, with a ported MC-version-to-Vulkan dependency table; Vulkan support is now verified automatically before launching 26.2+ versions (cached results are judged directly, otherwise detection is offered), and when requirements are unmet a warning lists the missing items while still allowing launch; version settings gained a "Detect Vulkan" entry with a result dialog showing the overall verdict, per-version-range support and per-item extension/feature annotations; results are cached in DataStore and invalidated automatically when the driver or rules change; vkshim wraps the system Vulkan loader, synthesizing VK_EXT_vertex_attribute_divisor from KHR/core equivalents when missing, plus a fillModeNonSolid (wire/point fill) fallback simulation; the detection failure under Turnip drivers is also fixed
Version deep deletion (#1873): The version list delete dialog gained deep deletion, which also cleans up libraries and assets referenced only by that version (libraries, asset indexes/objects, virtual assets); every path is asserted to stay inside its shared directory after canonicalization — paths carrying .. or pointing outside are skipped and logged; deletion and deep deletion now show real-time progress logs, with final stats and failure reasons presented in a dialog instead of fleeting toasts
Mod list sorting (#1892): Four dimensions — name/filename/size/modification time — with ascending/descending toggled by re-selecting the same dimension; the choice is persisted globally via DataStore; in sorting mode the list is sorted in the background after scanning and shown in one pass, and size/mtime sorting batch-reads file attributes before comparing to avoid repeated IO inside comparators
Seek bar stepper buttons: FCLNumberSeekBar gained themed round +/- buttons on both sides — tap steps one display unit, long-press repeats, sliding out cancels; the touch targets are bounded by the track endpoints and never overlap the value text tap/drag area
Skin dialog preview honors switches (#1884): The 3D preview in the offline/Microsoft account skin dialogs now applies the "3D skin layer" and "body-leg separation" switch states, matching the main interface
⚡ Improvements
Mod scan caching & incremental refresh: ModManager caches a shared instance per version with a directory-snapshot check, avoiding repeated full scans of the same version; after a mod download completes, an event notifies the manage page to refresh incrementally
Cross-source "installed" badge: The "installed" badge on the mod download page now matches across sources — the aggregate reverse lookup hits both Modrinth and CurseForge, so an install from either source is labeled correctly
🐛 Bug Fixes
Forge/NeoForge/OptiFine installation freezing and being impossible to cancel (#1903): The installer process runner is now coroutine-based — each poll checks the task's cancellation supplier, killing the :jvm process and aborting the task on cancel, fixing the dead cancel button while stuck in a processor stage; exit-code/start marker files carry a session ID so an immediate retry never reads stale exit codes; the hang detection now uses CPU-time progress (/proc utime+stime) — 3 minutes without progress is judged hung, degrading to 10-minute log-idle when procfs is unavailable, with a 15-minute absolute cap per attempt; processor messages show step i/N, jar name, JRE version and elapsed time, so silent processor stages no longer look frozen
Controller initialization race: Fixed save errors and user layout loss caused by a controller initialization race
oshi system-info initialization crash: oshi 5.x's initProcessorCounts returns a List which was wrongly wrapped as a Pair, throwing IncompatibleClassChangeError during construction iteration
Quilt installation crash: Missing intermediary field in Quilt meta JSON is now skipped gracefully instead of throwing a NullPointerException
SDL message boxes: Fixed incomplete error messages caused by the message text being set as the title