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
3D skin preview returned to a hand-written GLES model renderer: The rigid-body model renderer (TextureView + GLES 2.0 + procedural animations) was restored from a historical snapshot, deleting the GLTF baked-animation implementation and model assets; animation selection and the 3D skin layer toggle keep using the existing DataStore schema, and the GLTF-specific body/leg split toggle was removed. New interactions: tap to squish the model (spring pulse), drag and release to auto-recenter yaw and pitch. Leftover fixes of the old GLES chain were carried over: cape texture not re-uploaded after surface recreation, old-format 64x32 skins rendering misaligned after page switches (normalized write-back to texture), and the initial default skin not matching the model type
New playful "spin jump" Q-bouncy animation: Constant-speed rotation + jelly-style squash and bounce (PlayerModel gained a rootRotationY spin axis and rootScaleY/rootScaleXZ deformation channels); a new sitting pose — legs raised and slightly apart, swaying with the rhythm while the body sinks a little; the squish phase widens the model horizontally to 1.18x and the bounce phase restores the original width
⚡ Improvements
Mod Chinese-translation data reworked (synced with HMCL #6987): The lazily-parsed ModTranslations was replaced by AddonProjectInfoRegistry (soft-reference cache, loaded on demand); the data file moved from mod_data.txt to the new addon/mod.csv format (with a modrinthId column) plus a new modpack.csv for modpacks; the Chinese-name search, download page, mod list, and translation dialogs were adapted across the chain
BMCLAPI slow-node auto-switching: FetchTask observes download speed over 10-second windows and switches nodes only when the estimated remaining time exceeds one window, at most twice, avoiding switch jitter; the x-bmclapi-hash response header is collected across the whole chain (FetchTask/GetTask/FileDownloadTask) for integrity verification and direct hash-cache hits, saving the re-download otherwise needed for hash verification
🐛 Bug Fixes
Cleanroom startup crash (#1962): Crash one — Cleanroom's setInitialDisplayMode calls window.size() directly, and the SDL3 Android driver has no SetWindowSize callback and returns Unsupported, crashing the game; the sdl_hook dual-layer interception (bytehook GOT + dlsym outlet) now returns success for that call, the size is decided by the injected Surface, and callers read the real value back via SDL_GetWindowSize. Crash two — Cleanroom bundles lwjgly (the LWJGL2 API layer) compiled against an LWJGL 3.4.3 GLCapabilities that includes the APPLE extension bits, which got shadowed by FCL's customized 3.4.1 lwjgl.jar placed first on the classpath and threw NoSuchFieldError; field references were enumerated across all lwjgly classes via javap, and the exactly-14 missing GL_APPLE_* extension booleans were added
Crash when importing resource packs/shaders/mods via multi-file selection (#1961): SelectedFile.fileName gained a fallback for query-parsing exceptions on unauthorized URIs; a single failed file inside the import loop now only counts toward the failure list instead of interrupting the whole import
Crash when entering the game on Android 13: clearFrameRate() only exists since API 34, and the old TIRAMISU(33) guard triggered NoSuchMethodError on Android 13 — crashing whenever the game surface was ready and the max-refresh-rate toggle was off; the guard is now raised to API 34 and API 30~33 use an equivalent setFrameRate(0), which also fixes the frame-rate vote lingering after turning the toggle off on Android 11/12
Controller style edits not taking effect (#1957): Same-name style registration now updates in place, fixing textSize and other property edits not applying after a layout reload; style editing also updates in place and key data now listens to style properties, fixing font-size changes not refreshing live on first entry to the editor
Installer process idling after a launch failure: launchAPIInstaller exceptions now write back the exit code and kill the process, failing fast on "process is bad" instead of spinning in retry loops
➖ Removals
Mainland-China region restriction (#1955): The network region lookup at startup and the region-based disabling of game downloads were removed; the user agreement text was updated accordingly