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
Game magnifier (#1981): When input is active and the input method covers more than about a third of the game screen, a magnifier window shows the covered area — with "Show Magnifier by Default While Typing" enabled it pops up directly (60% of the screen width); otherwise a magnifier button opens it manually, and once dismissed it won't auto-show again during the same input session; the toggle is available in the in-game right menu and the magnifier's settings panel (opening it manually resets the auto-dismiss state so the input method's animation jitter doesn't close it again); the sampled area is computed proportionally as viewport × fit scale ÷ zoom — zoom 1 shows the whole frame, any zoom in crops and allows drag-to-pan (with 0.5 damping for easier positioning in the small window), and it stays undistorted even when the game's custom resolution is very small; frame readback is throttled to 33ms with a forced capture on open, and a white 3dp rounded outline (drawn as a foreground so the frame doesn't cover it) marks the magnified view
SFPEW reworked into a compatibility-layer composition model (#1983): SFPEW (SimpleFPEWrapper) is officially an OpenGL fixed-function pipeline (FPE) compatibility wrapper rather than a full driver, so offering it as a standalone renderer alongside gl4es/Zink/MobileGlues was a misuse; the standalone SFPEW renderer entry was removed and it now stacks on top of the actual backend as a compatibility layer — built-in renderers are hardcoded by known behavior: layered by default, except Krypton Wrapper, Holy GL4ES, VGPU and Kopper Zink, which ship their own FPE/full GL; external renderer plugins are controlled from a new "Advanced" page at the bottom-left of the renderer selection dialog (both the "SFPEW compatibility layer (renderer plugins)" global toggle and SFPEW_RELAXED_CONTEXT default to off, i.e. strict mode); the launch chain injects SFPEW_LAYER=1 and SFPEW_EGL=POJAVEXEC_EGL (backend and base EGL from the same source), swaps ${gl_lib_name} / SDL_OPENGL_LIBRARY for the wrapper path, and resolves the game's GL symbols from the SFPEW handle via the LWJGL libname; following SFPEW's host integration guide, the native bridge routes eglMakeCurrent/eglSwapBuffers through the wrapper (recording context switches and flushing immediate-mode batches before swap), falling back to the system EGL when resolution fails and draining before destroying contexts on process exit; the whole layer is skipped automatically (with a detection log) when a mod with its own FPE emulation (Angelica/Actinium, only enabled mods count) is installed; version gating now reflects the combined capability — with the layer enabled the renderer's minimum-version warning is skipped (the maximum-version limit stays, since the layer doesn't raise the renderer's modern GL ceiling), built-in renderers without version bounds show "All versions" in the renderer list, and plugins without declared versions still show "Unknown"
SFPEW chooses the EGL context mode automatically: SFPEW was updated to 26.11-dev, expanding its exported surface from 5 symbols to full EGL (CreateContext/ChooseConfig/GetDisplay/Initialize/Sync, etc.); with the layer enabled, eglCreateContext/eglDestroyContext are also resolved through the wrapper so contexts are created and destroyed by the same side (tied to successful makeCurrent/swap resolution to avoid the wrapper creating a context the base destroys, falling back to the base entry points on failure), which lets SFPEW choose the context mode per context automatically; SDL_EGL_LIBRARY now points to the wrapper as well, routing SDL's entire EGL stack through it
Built-in MobileGlues upgraded to 2.0.1, with configurable MultiDraw strategy ordering: libmobileglues.so was replaced for all four ABIs; with the SFPEW compatibility layer supplying the legacy fixed-function pipeline (1.8.9 verified to run), the 1.17 minimum version and the "1.17+" in its name were removed and no maximum version is declared anymore, so the renderer list shows "All versions"; renderer settings gained an "ordered strategy" config type matching the 6 multidraw keys of MG 2.0.1's upstream settings.cpp — the global multidrawOrder (Native / Native EXT, multiindirect, multibasevertex, multiarrays, indirect, basevertex, Draw One by One, Compute Shader; higher strategies are preferred and failed strategies fall back in this order at runtime) plus five per-function exception entries for Arrays/Elements/ElementsBaseVertex/ArraysIndirect/ElementsIndirect (off by default, following the global order; when enabled they snapshot the current global order as an independent order and stop following it), presented as a collapsible numbered list with move up/down, and saved orders are normalized automatically (unknown items dropped, duplicates removed, missing items appended in default order); when merging the config at launch, explicitly disabled per-function entries have their leftover keys removed from config.json to hand control back to the global order, while never-configured entries are left untouched (preserving hand edits and MG-managed values); the enableANGLE default changed from 1 to 0 to match the DisableIfPossible default semantics since MG 2.0.1
⚡ Improvements
CurseForge CDN mirror candidate for NeoForge-related files (synced from HMCL #7092): Added the neoforged.forgecdn.net mirror — NeoForge metadata requests now use both the original and the mirror URL as candidates; installer.jar and library downloads from maven.neoforged.net gain a forgecdn candidate under both the official and BMCLAPI download sources (for /releases/ paths the official source and BMCLAPI are ordered by the download source's priority)
Emoji filtered out of mod Chinese names (synced from HMCL #7077): Emoji were removed from the Chinese-name column of the mod/modpack translation data (addon/mod.csv, modpack.csv) — e.g. "玉 🔍" → "玉", "Kiwi 🥝" → "Kiwi" — while the English-name column is unchanged
🐛 Bug Fixes
MultiMC modpacks crashing on launch (#1984): meta.multimc.org's Json-Patch for loaders such as net.neoforged carries the full set of standard arguments plus loader extras in the legacy minecraftArguments, so after import the merged version json had both legacy minecraftArguments and modern arguments.game; at launch both generations were concatenated, plus another copy of the default resolution arguments, duplicating --gameDir/--username/--width and more, and ModLauncher threw MultipleArgumentsForOptionException; DefaultLauncher now treats the two formats as mutually exclusive (when legacy arguments are present only they are used, plus the default resolution arguments once; otherwise the modern arguments are used), so already-imported instances launch normally without re-importing; at import time, the synthesized arguments now pick their carrier by the base format — for 1.13+ modern bases the official standard placeholder argument pairs are stripped and only the loader extras are carried as modern arguments (arguments with explicit concrete values are treated as intentional overrides and kept as-is), while pre-1.13 legacy bases keep the full minecraftArguments as a whole override, so arguments such as --tweakClass for old Forge/LiteLoader are not lost
Version-specific settings of modpack versions could not be turned off: Two locks — every version refresh unconditionally enabled per-instance settings for versions containing modpack.cfg, so turning them off was overwritten on the next refresh; and the version settings page disabled the "Enable per-instance settings" switch outright for modpack versions. They are now enabled automatically only on first detection (when no fclversion.cfg exists yet), the user's choice is respected once a settings file exists, newly installed/externally imported modpacks behave as before, and the switch is usable again; the "Isolate Working Directory" switch stays disabled (modpack mod loading depends on the mods folder inside the version directory, so allowing it would break the modpack outright), and its displayed value is now always on, avoiding the misleading global "off" value shown after turning per-instance settings off while isolation was still enforced
Keyboard toggle out of sync with the input method's actual visibility: After closing the keyboard with the input method's own key, the in-game keyboard toggle stayed on and reopening it required two taps; keyboard visibility is now determined from the system WindowInsets on Android 11+ and estimated from the visible display height on older versions (same source and threshold as JVMActivity's screen shift), and when a layout callback detects that the keyboard appeared and then disappeared while the input field still has focus, it is treated as closed by the input method and goes through the unified cleanup (clearing input, hiding, and returning focus and pointer capture to the game view); a latch during opening prevents misjudgment mid-animation
Control-group visibility binding dialog layout issues (#1982): The list area changed from a fixed 320dp to weighted sizing — it shrinks to fit when content is short and gives way when the screen runs out, so the confirm/cancel buttons stay visible on small landscape screens; the back key can now close the dialog so users don't get stuck; item dropdowns no longer auto-tint their text and inherit the default text color, fixing poor text contrast against the white background in light mode
"Use System Vulkan driver" switch toggling without animation (#1993): Toggling it triggered a full list rebind while the reused row was detached, and setting the same checked state again hit SwitchCompat's snap branch, cancelling the thumb animation so it jumped instantly; now only the custom driver row that shows/hides with the switch is inserted/removed locally, the switch row itself is no longer rebound, and setChecked is skipped when the state is unchanged to guard other full-refresh paths
➖ Removals
MultiMC modpack export: The MultiMC option and its export task were removed from the export type selection page; importing is unaffected — the install task, manifest parsing and launch argument fix (#1984) are all kept, so MultiMC modpacks exported by external tools such as HMCL still import normally