
Sparkle's Morpher
The successor to Fox Model Loader — a universal Minecraft custom model loader supporting YSM, Blockbench, animations, sounds, multiplayer synchronization, and more.
- Загрузки
- 3K
- Подписчики
- 6
- Обновлён
- 23 августа 2026 г.
- Лицензия
- MIT
Опубликован 26 мая 2026 г.
Sparkle's Morpher
Formerly Fox Model Loader
Sparkle's Morpher is the official successor to Fox Model Loader.
Fox Model Loader has been discontinued, and active development now continues as Sparkle's Morpher. The project retains its original custom-model functionality while expanding into a more universal Minecraft model-loading platform.
Existing Fox Model Loader releases remain available as legacy versions.
Sparkle's Morpher is a universal custom model loader for Minecraft that allows players to replace the vanilla player model with custom models, animations, textures, sounds, and more.
✨ Features
Custom Player Models
Replace the vanilla Steve and Alex player models with fully customized 3D characters.
Custom models can include geometry, textures, skeletal animations, custom first-person arms, sound effects, and custom actions.
Multiple Model Formats
Sparkle's Morpher currently supports:
- YSM (
.ysm) - Blockbench (
.bbmodel) - Figura avatar archives
- Compatible ZIP-based model packages
Support for additional model formats is planned as the project continues to evolve.
Animation System
The built-in animation system supports movement, actions, item usage, custom animation controllers, Molang expressions, and multiple playback modes.
An animation carousel allows model-specific actions and animations to be triggered directly in game.
Sound Effects
Models can include voice lines and other sound effects, with Opus audio decoding and cross-platform native acceleration.
Model Management
Import and organize models from local files, directories, archives, URLs, and supported remote sources.
Models can also be grouped and added to favorites.
Multiplayer
Sparkle's Morpher supports multiplayer model synchronization and includes server-side functionality such as:
- Model synchronization
- Model manifests
- Model uploads
- Model blacklists
- Transfer scheduling
- Configurable global bandwidth limits
🔄 Migrating from Fox Model Loader
Fox Model Loader users should remove the old Fox Model Loader JAR before installing Sparkle's Morpher.
Fox Model Loader used the mod ID:
yes_steve_model
Sparkle's Morpher uses:
sparkle_morpher
Do not intentionally install both mods at the same time.
Sparkle's Morpher includes compatibility code that can migrate the legacy configuration directory:
config/yes_steve_model
to:
config/sparkle_morpher
when the new configuration directory does not already exist.
Existing YSM models continue to be supported.
We recommend backing up important custom models and configuration files before performing a major upgrade.
📦 Legacy Fox Model Loader Releases
Older versions on this Modrinth project page that use the Fox Model Loader name are intentionally preserved as legacy releases.
They remain available for users of older Minecraft versions, existing installations, compatibility purposes, and rollback.
Fox Model Loader is no longer actively maintained.
All future development continues as Sparkle's Morpher.
🔗 Links
Source Code
https://github.com/sdf123098/Sparkle-Morpher
Legacy Fox Model Loader Source
https://github.com/sdf123098/Fox-Model-Loader
Issue Tracker
https://github.com/sdf123098/Sparkle-Morpher/issues
Discord
Telegram
QQ Group
1104823534
📜 Credits & License
Sparkle's Morpher is open source under the MIT License.
The project originates from the Fox Model Loader / OpenYSM codebase and uses components from the OpenYSM ecosystem.
Relevant upstream projects and third-party components are credited in the source repository.
Ченджлог
1.2.2Релиз26.2 · 23 августа 2026 г.
Sparkle Morpher 1.2.2 delivers the main work planned for the 1.2.x “Cross-Backend Performance & Stabilization” phase. All six actual source repositories were synchronized, built, verified, and pushed to their matching GitHub branches.
Highlights
Modern HUD modernization and stabilization:
- 26.x uses explicit VAO, SSBO, BoneSkinShader, and a 144-byte-per-bone layout for the unified skeleton path.
- Restored the separate translucent blend stage and alpha handling for transparent materials.
- Fixed layout anchors, AABB/FBO framing, glow-bone exclusion, pose snapshots, scale, and yaw handling.
- Fixed classic HUD
input_verticaldirection contamination and lost context during deferred world-model submit replay. - Every Modern HUD rendering, layout, and title option is marked “Experimental”. Modern HUD remains disabled by default while Classic HUD remains enabled by default.
Minecraft 26.1.2/26.2 held-item crash fix:
- 26.x Modern HUD now uses Mojang’s GUI item RenderState extraction API for main-hand and off-hand items.
- Removed the erroneous manual
ItemEntityRenderStatecreation path, which submitted an item through the GUI deferred/Picture-in-Picture pipeline to anEntityRenderDispatcherwith no assigned renderer. - Main hand, off hand, Scale, Yaw, and HUD Layout behavior are preserved; 1.21.1 keeps its version-specific legacy API.
Cross-backend rendering and performance:
- Roulette stage 1 now uses cached geometry through
GuiGraphicsExtractor.fill, avoiding raw GL/CommandEncoder submissions during extraction that were later overwritten; a CPU fallback keeps visibility consistent across OpenGL and Vulkan. - The 26.2 Vulkan path detects the actual Minecraft
GpuDevice, uses the 144-byte-per-bone Vulkan ABI and Native SIMD bone calculation, and falls back to Java when the native path is not applicable. - The implementation keeps business logic behind the backend-neutral Blaze3D/vanilla boundary instead of coupling it to raw OpenGL/Vulkan.
- Roulette stage 1 now uses cached geometry through
Compatibility and reliability:
- Fixed TouhouLittleMaid sitting-state access and custom-model state synchronization across all six loader/version branches.
- Fixed the 1.21.1 item-buffer/glint immediate path (Issue #18) and the Fabric 26.x flight animation frame-boundary stutter.
- Added or tightened architecture-boundary, RenderState contract, material contract, and six-branch build checks while retaining the required 1.21.1 and 26.x adapters.
Build and verification
- All six branches were pushed with
git push; each local HEAD was then compared with its matching remote branch after fetch. - A clean release build completed on 2026-08-23 and produced a 1.2.2 original JAR for every branch. The six original JARs in this release are the primary downloads.
- Full build output is included as
BUILD_LOG_1.2.2_2026-08-23.txt; branch logs were collected under.buildlogs/6branches/. - This release does not claim real Minecraft 26.2 Vulkan client visual regression coverage; that still requires an actual Vulkan client environment. Fabric 26.2 also retains pre-existing ArchitectureBoundaryTest violations, which are not presented as fixed by this release.
Release assets
- Six original Fabric/NeoForge JARs.
- Chinese notes, English notes, and the build log.
The 1.2.2 scope freeze remains in effect: the large Action Runtime, Paper Doll, Import Pipeline, Cloud, and PortableGpuRenderPath rewrites are out of scope for this release.
1.2.2Релиз26.1, 26.1.1, 26.1.2 · 23 августа 2026 г.
Sparkle Morpher 1.2.2 delivers the main work planned for the 1.2.x “Cross-Backend Performance & Stabilization” phase. All six actual source repositories were synchronized, built, verified, and pushed to their matching GitHub branches.
Highlights
Modern HUD modernization and stabilization:
- 26.x uses explicit VAO, SSBO, BoneSkinShader, and a 144-byte-per-bone layout for the unified skeleton path.
- Restored the separate translucent blend stage and alpha handling for transparent materials.
- Fixed layout anchors, AABB/FBO framing, glow-bone exclusion, pose snapshots, scale, and yaw handling.
- Fixed classic HUD
input_verticaldirection contamination and lost context during deferred world-model submit replay. - Every Modern HUD rendering, layout, and title option is marked “Experimental”. Modern HUD remains disabled by default while Classic HUD remains enabled by default.
Minecraft 26.1.2/26.2 held-item crash fix:
- 26.x Modern HUD now uses Mojang’s GUI item RenderState extraction API for main-hand and off-hand items.
- Removed the erroneous manual
ItemEntityRenderStatecreation path, which submitted an item through the GUI deferred/Picture-in-Picture pipeline to anEntityRenderDispatcherwith no assigned renderer. - Main hand, off hand, Scale, Yaw, and HUD Layout behavior are preserved; 1.21.1 keeps its version-specific legacy API.
Cross-backend rendering and performance:
- Roulette stage 1 now uses cached geometry through
GuiGraphicsExtractor.fill, avoiding raw GL/CommandEncoder submissions during extraction that were later overwritten; a CPU fallback keeps visibility consistent across OpenGL and Vulkan. - The 26.2 Vulkan path detects the actual Minecraft
GpuDevice, uses the 144-byte-per-bone Vulkan ABI and Native SIMD bone calculation, and falls back to Java when the native path is not applicable. - The implementation keeps business logic behind the backend-neutral Blaze3D/vanilla boundary instead of coupling it to raw OpenGL/Vulkan.
- Roulette stage 1 now uses cached geometry through
Compatibility and reliability:
- Fixed TouhouLittleMaid sitting-state access and custom-model state synchronization across all six loader/version branches.
- Fixed the 1.21.1 item-buffer/glint immediate path (Issue #18) and the Fabric 26.x flight animation frame-boundary stutter.
- Added or tightened architecture-boundary, RenderState contract, material contract, and six-branch build checks while retaining the required 1.21.1 and 26.x adapters.
Build and verification
- All six branches were pushed with
git push; each local HEAD was then compared with its matching remote branch after fetch. - A clean release build completed on 2026-08-23 and produced a 1.2.2 original JAR for every branch. The six original JARs in this release are the primary downloads.
- Full build output is included as
BUILD_LOG_1.2.2_2026-08-23.txt; branch logs were collected under.buildlogs/6branches/. - This release does not claim real Minecraft 26.2 Vulkan client visual regression coverage; that still requires an actual Vulkan client environment. Fabric 26.2 also retains pre-existing ArchitectureBoundaryTest violations, which are not presented as fixed by this release.
Release assets
- Six original Fabric/NeoForge JARs.
- Chinese notes, English notes, and the build log.
The 1.2.2 scope freeze remains in effect: the large Action Runtime, Paper Doll, Import Pipeline, Cloud, and PortableGpuRenderPath rewrites are out of scope for this release.
1.2.2Релиз1.21.1 · 23 августа 2026 г.
Sparkle Morpher 1.2.2 delivers the main work planned for the 1.2.x “Cross-Backend Performance & Stabilization” phase. All six actual source repositories were synchronized, built, verified, and pushed to their matching GitHub branches.
Highlights
Modern HUD modernization and stabilization:
- 26.x uses explicit VAO, SSBO, BoneSkinShader, and a 144-byte-per-bone layout for the unified skeleton path.
- Restored the separate translucent blend stage and alpha handling for transparent materials.
- Fixed layout anchors, AABB/FBO framing, glow-bone exclusion, pose snapshots, scale, and yaw handling.
- Fixed classic HUD
input_verticaldirection contamination and lost context during deferred world-model submit replay. - Every Modern HUD rendering, layout, and title option is marked “Experimental”. Modern HUD remains disabled by default while Classic HUD remains enabled by default.
Minecraft 26.1.2/26.2 held-item crash fix:
- 26.x Modern HUD now uses Mojang’s GUI item RenderState extraction API for main-hand and off-hand items.
- Removed the erroneous manual
ItemEntityRenderStatecreation path, which submitted an item through the GUI deferred/Picture-in-Picture pipeline to anEntityRenderDispatcherwith no assigned renderer. - Main hand, off hand, Scale, Yaw, and HUD Layout behavior are preserved; 1.21.1 keeps its version-specific legacy API.
Cross-backend rendering and performance:
- Roulette stage 1 now uses cached geometry through
GuiGraphicsExtractor.fill, avoiding raw GL/CommandEncoder submissions during extraction that were later overwritten; a CPU fallback keeps visibility consistent across OpenGL and Vulkan. - The 26.2 Vulkan path detects the actual Minecraft
GpuDevice, uses the 144-byte-per-bone Vulkan ABI and Native SIMD bone calculation, and falls back to Java when the native path is not applicable. - The implementation keeps business logic behind the backend-neutral Blaze3D/vanilla boundary instead of coupling it to raw OpenGL/Vulkan.
- Roulette stage 1 now uses cached geometry through
Compatibility and reliability:
- Fixed TouhouLittleMaid sitting-state access and custom-model state synchronization across all six loader/version branches.
- Fixed the 1.21.1 item-buffer/glint immediate path (Issue #18) and the Fabric 26.x flight animation frame-boundary stutter.
- Added or tightened architecture-boundary, RenderState contract, material contract, and six-branch build checks while retaining the required 1.21.1 and 26.x adapters.
Build and verification
- All six branches were pushed with
git push; each local HEAD was then compared with its matching remote branch after fetch. - A clean release build completed on 2026-08-23 and produced a 1.2.2 original JAR for every branch. The six original JARs in this release are the primary downloads.
- Full build output is included as
BUILD_LOG_1.2.2_2026-08-23.txt; branch logs were collected under.buildlogs/6branches/. - This release does not claim real Minecraft 26.2 Vulkan client visual regression coverage; that still requires an actual Vulkan client environment. Fabric 26.2 also retains pre-existing ArchitectureBoundaryTest violations, which are not presented as fixed by this release.
Release assets
- Six original Fabric/NeoForge JARs.
- Chinese notes, English notes, and the build log.
The 1.2.2 scope freeze remains in effect: the large Action Runtime, Paper Doll, Import Pipeline, Cloud, and PortableGpuRenderPath rewrites are out of scope for this release.
1.2.2Релиз1.21.1 · 23 августа 2026 г.
Sparkle Morpher 1.2.2 delivers the main work planned for the 1.2.x “Cross-Backend Performance & Stabilization” phase. All six actual source repositories were synchronized, built, verified, and pushed to their matching GitHub branches.
Highlights
Modern HUD modernization and stabilization:
- 26.x uses explicit VAO, SSBO, BoneSkinShader, and a 144-byte-per-bone layout for the unified skeleton path.
- Restored the separate translucent blend stage and alpha handling for transparent materials.
- Fixed layout anchors, AABB/FBO framing, glow-bone exclusion, pose snapshots, scale, and yaw handling.
- Fixed classic HUD
input_verticaldirection contamination and lost context during deferred world-model submit replay. - Every Modern HUD rendering, layout, and title option is marked “Experimental”. Modern HUD remains disabled by default while Classic HUD remains enabled by default.
Minecraft 26.1.2/26.2 held-item crash fix:
- 26.x Modern HUD now uses Mojang’s GUI item RenderState extraction API for main-hand and off-hand items.
- Removed the erroneous manual
ItemEntityRenderStatecreation path, which submitted an item through the GUI deferred/Picture-in-Picture pipeline to anEntityRenderDispatcherwith no assigned renderer. - Main hand, off hand, Scale, Yaw, and HUD Layout behavior are preserved; 1.21.1 keeps its version-specific legacy API.
Cross-backend rendering and performance:
- Roulette stage 1 now uses cached geometry through
GuiGraphicsExtractor.fill, avoiding raw GL/CommandEncoder submissions during extraction that were later overwritten; a CPU fallback keeps visibility consistent across OpenGL and Vulkan. - The 26.2 Vulkan path detects the actual Minecraft
GpuDevice, uses the 144-byte-per-bone Vulkan ABI and Native SIMD bone calculation, and falls back to Java when the native path is not applicable. - The implementation keeps business logic behind the backend-neutral Blaze3D/vanilla boundary instead of coupling it to raw OpenGL/Vulkan.
- Roulette stage 1 now uses cached geometry through
Compatibility and reliability:
- Fixed TouhouLittleMaid sitting-state access and custom-model state synchronization across all six loader/version branches.
- Fixed the 1.21.1 item-buffer/glint immediate path (Issue #18) and the Fabric 26.x flight animation frame-boundary stutter.
- Added or tightened architecture-boundary, RenderState contract, material contract, and six-branch build checks while retaining the required 1.21.1 and 26.x adapters.
Build and verification
- All six branches were pushed with
git push; each local HEAD was then compared with its matching remote branch after fetch. - A clean release build completed on 2026-08-23 and produced a 1.2.2 original JAR for every branch. The six original JARs in this release are the primary downloads.
- Full build output is included as
BUILD_LOG_1.2.2_2026-08-23.txt; branch logs were collected under.buildlogs/6branches/. - This release does not claim real Minecraft 26.2 Vulkan client visual regression coverage; that still requires an actual Vulkan client environment. Fabric 26.2 also retains pre-existing ArchitectureBoundaryTest violations, which are not presented as fixed by this release.
Release assets
- Six original Fabric/NeoForge JARs.
- Chinese notes, English notes, and the build log.
The 1.2.2 scope freeze remains in effect: the large Action Runtime, Paper Doll, Import Pipeline, Cloud, and PortableGpuRenderPath rewrites are out of scope for this release.
1.2.2Релиз26.1, 26.1.1, 26.1.2 · 23 августа 2026 г.
Sparkle Morpher 1.2.2 delivers the main work planned for the 1.2.x “Cross-Backend Performance & Stabilization” phase. All six actual source repositories were synchronized, built, verified, and pushed to their matching GitHub branches.
Highlights
Modern HUD modernization and stabilization:
- 26.x uses explicit VAO, SSBO, BoneSkinShader, and a 144-byte-per-bone layout for the unified skeleton path.
- Restored the separate translucent blend stage and alpha handling for transparent materials.
- Fixed layout anchors, AABB/FBO framing, glow-bone exclusion, pose snapshots, scale, and yaw handling.
- Fixed classic HUD
input_verticaldirection contamination and lost context during deferred world-model submit replay. - Every Modern HUD rendering, layout, and title option is marked “Experimental”. Modern HUD remains disabled by default while Classic HUD remains enabled by default.
Minecraft 26.1.2/26.2 held-item crash fix:
- 26.x Modern HUD now uses Mojang’s GUI item RenderState extraction API for main-hand and off-hand items.
- Removed the erroneous manual
ItemEntityRenderStatecreation path, which submitted an item through the GUI deferred/Picture-in-Picture pipeline to anEntityRenderDispatcherwith no assigned renderer. - Main hand, off hand, Scale, Yaw, and HUD Layout behavior are preserved; 1.21.1 keeps its version-specific legacy API.
Cross-backend rendering and performance:
- Roulette stage 1 now uses cached geometry through
GuiGraphicsExtractor.fill, avoiding raw GL/CommandEncoder submissions during extraction that were later overwritten; a CPU fallback keeps visibility consistent across OpenGL and Vulkan. - The 26.2 Vulkan path detects the actual Minecraft
GpuDevice, uses the 144-byte-per-bone Vulkan ABI and Native SIMD bone calculation, and falls back to Java when the native path is not applicable. - The implementation keeps business logic behind the backend-neutral Blaze3D/vanilla boundary instead of coupling it to raw OpenGL/Vulkan.
- Roulette stage 1 now uses cached geometry through
Compatibility and reliability:
- Fixed TouhouLittleMaid sitting-state access and custom-model state synchronization across all six loader/version branches.
- Fixed the 1.21.1 item-buffer/glint immediate path (Issue #18) and the Fabric 26.x flight animation frame-boundary stutter.
- Added or tightened architecture-boundary, RenderState contract, material contract, and six-branch build checks while retaining the required 1.21.1 and 26.x adapters.
Build and verification
- All six branches were pushed with
git push; each local HEAD was then compared with its matching remote branch after fetch. - A clean release build completed on 2026-08-23 and produced a 1.2.2 original JAR for every branch. The six original JARs in this release are the primary downloads.
- Full build output is included as
BUILD_LOG_1.2.2_2026-08-23.txt; branch logs were collected under.buildlogs/6branches/. - This release does not claim real Minecraft 26.2 Vulkan client visual regression coverage; that still requires an actual Vulkan client environment. Fabric 26.2 also retains pre-existing ArchitectureBoundaryTest violations, which are not presented as fixed by this release.
Release assets
- Six original Fabric/NeoForge JARs.
- Chinese notes, English notes, and the build log.
The 1.2.2 scope freeze remains in effect: the large Action Runtime, Paper Doll, Import Pipeline, Cloud, and PortableGpuRenderPath rewrites are out of scope for this release.
1.2.2Релиз26.2 · 23 августа 2026 г.
Sparkle Morpher 1.2.2 delivers the main work planned for the 1.2.x “Cross-Backend Performance & Stabilization” phase. All six actual source repositories were synchronized, built, verified, and pushed to their matching GitHub branches.
Highlights
Modern HUD modernization and stabilization:
- 26.x uses explicit VAO, SSBO, BoneSkinShader, and a 144-byte-per-bone layout for the unified skeleton path.
- Restored the separate translucent blend stage and alpha handling for transparent materials.
- Fixed layout anchors, AABB/FBO framing, glow-bone exclusion, pose snapshots, scale, and yaw handling.
- Fixed classic HUD
input_verticaldirection contamination and lost context during deferred world-model submit replay. - Every Modern HUD rendering, layout, and title option is marked “Experimental”. Modern HUD remains disabled by default while Classic HUD remains enabled by default.
Minecraft 26.1.2/26.2 held-item crash fix:
- 26.x Modern HUD now uses Mojang’s GUI item RenderState extraction API for main-hand and off-hand items.
- Removed the erroneous manual
ItemEntityRenderStatecreation path, which submitted an item through the GUI deferred/Picture-in-Picture pipeline to anEntityRenderDispatcherwith no assigned renderer. - Main hand, off hand, Scale, Yaw, and HUD Layout behavior are preserved; 1.21.1 keeps its version-specific legacy API.
Cross-backend rendering and performance:
- Roulette stage 1 now uses cached geometry through
GuiGraphicsExtractor.fill, avoiding raw GL/CommandEncoder submissions during extraction that were later overwritten; a CPU fallback keeps visibility consistent across OpenGL and Vulkan. - The 26.2 Vulkan path detects the actual Minecraft
GpuDevice, uses the 144-byte-per-bone Vulkan ABI and Native SIMD bone calculation, and falls back to Java when the native path is not applicable. - The implementation keeps business logic behind the backend-neutral Blaze3D/vanilla boundary instead of coupling it to raw OpenGL/Vulkan.
- Roulette stage 1 now uses cached geometry through
Compatibility and reliability:
- Fixed TouhouLittleMaid sitting-state access and custom-model state synchronization across all six loader/version branches.
- Fixed the 1.21.1 item-buffer/glint immediate path (Issue #18) and the Fabric 26.x flight animation frame-boundary stutter.
- Added or tightened architecture-boundary, RenderState contract, material contract, and six-branch build checks while retaining the required 1.21.1 and 26.x adapters.
Build and verification
- All six branches were pushed with
git push; each local HEAD was then compared with its matching remote branch after fetch. - A clean release build completed on 2026-08-23 and produced a 1.2.2 original JAR for every branch. The six original JARs in this release are the primary downloads.
- Full build output is included as
BUILD_LOG_1.2.2_2026-08-23.txt; branch logs were collected under.buildlogs/6branches/. - This release does not claim real Minecraft 26.2 Vulkan client visual regression coverage; that still requires an actual Vulkan client environment. Fabric 26.2 also retains pre-existing ArchitectureBoundaryTest violations, which are not presented as fixed by this release.
Release assets
- Six original Fabric/NeoForge JARs.
- Chinese notes, English notes, and the build log.
The 1.2.2 scope freeze remains in effect: the large Action Runtime, Paper Doll, Import Pipeline, Cloud, and PortableGpuRenderPath rewrites are out of scope for this release.
1.2.1Релиз26.2 · 13 августа 2026 г.
Sparkle Morpher 1.2.1
Sparkle Morpher 1.2.1 fixes a singleplayer crash on the Fabric 26.x line, aligns the 26.2 branch with the real 26.2 APIs, and brings the rendering/network/Maid refactor series R0–R11 (recorded between 2026-08-10 and 2026-08-13, including everything from the 08-12 prerelease 1.2.0-beta-R11MAID) into a formal release across Fabric and NeoForge × 1.21.1 / 26.1.2 / 26.2.
Highlights
Crash fixes (focus of this release)
- Fixed
IncompatibleClassChangeErroron joining singleplayer (Fabric 26.1.2 / 26.2): removed the compile-time shadow stubs whereMinecraft.execute/submit/isLocalServerwere wrongly declaredstatic, which madeMinecraft.getInstance().execute(...)compile toinvokestaticand crash at runtime against the real instance methods. Everything is now compiled back toinvokevirtual(verified by a full ASM scan: 0 remaining). - Fa26.2 stub cleanup & alignment with real 26.2 APIs: removed 24 vestigial/shadowing stubs, keeping only 4 runtime compat layers (
MultiBufferSource/IrisApi/ModConfig/IForgeGuiGraphicsExtractor); 6 call sites (getScoreboard/renderNames/renderBuffers/getMainRenderTarget/screenetc.) moved to the real 26.2 APIs. - Sync packet queue overflow → bounded backpressure: bursts no longer abort the whole sync when the queue briefly fills; the enqueue side now waits with a bounded budget (server bandwidth limiting + outbound drain form a backpressure loop).
Rendering & performance
- Classic HUD deep performance rewrite: FBO partial physical-pixel offscreen cache (was ~35 ms full CPU render per frame → ~0.17 ms); GPU path with a 60 Hz independent refresh budget, SIMD/compat path at 10 Hz throttle; 8-slot bone SSBO ring +
GL_STREAM_DRAWstreaming uploads, eliminating shared-buffer sync stalls; explicit alpha compositing and batching isolation. - First-person hand rendering fix (26.x): the hand always uses the
entityTranslucentpass. - Preview rotation pollution fix (1.21.1): entity yaw and preview mode are reset even on exception paths (try/finally).
- Hand rendering NPE guard:
getAnimationBundle()==nullmid-state protection (12 sites across 6 branches). - R10-series internal refactors:
RenderBackendinterface isolation (Blaze3D / OpenGL / SIMD / Java implementations),GpuMeshRegistryleases + orphan sweeps, unified resource ownership for model assemblies (deterministic release), weighted-LRU audio cache.
Networking & model sync
- Fixed crash when clients without SPM join: per-player channel pre-checks before sending (NeoForge/Fabric) + batch send fallback.
- Systemic fix for sync timeouts / stuck "receiving model data":
LegacySyncFlowControl64 KiB burst backpressure + 512 MiB in-flight budget; a dedicated single-threaded sync executor with a bounded ordered packet queue (decrypt/verify/disk-write no longer blocks network/main threads); termination frame sent when the server cache is unavailable so the client never hangs forever; the watchdog no longer reports false success. - neo1.21.1 stuck-at-LOADING fix:
toClientboundPacketnull packet → wrapped inClientboundCustomPayloadPacket. - R9 networking modularization (internal): send-entry pre-checks, connection-state split, upload-transport interfaces.
Maid (TLM) compatibility (R11)
MaidModelSyncdivergence converged across branches (byte-identical in all six).C2SSetMaidModelPacket(id 24) ported to all branches: maid model switching now uses SPM's own chain (auth pipeline); the official TLM protocol remains as fallback.- TLM-environment startup crash fixed (
@Mixin(targets=...)to avoidMixinTargetAlreadyLoaded). - 26.x GUI maid preview not replacing YSM models — fixed.
- R11
compat.apiservice layer (internal, no startup-order dependencies).
GUI / HUD
- Classic / Modern HUD dual toggles: independent switches in settings; the legacy keybinding and old screen were removed.
ClassicHudLayoutScreenlayout editor: drag, unbounded scaling, scroll zoom, yaw rotation, one-click reset.ModernHudRendererindependent entry contract (off by default, internal).
Other fixes
- Abnormal head rotation while riding (
RiderRotationMathpure-angle helper, verified on 6 branches). - 1.21.1 default model rotation not following the camera (cross-frame cache registry retained).
- Server model pack name JSON-quote display fix.
Internal refactors (R0–R9, core of 1.2.1)
- S0 security hotfixes: YSM folder path-escape sandbox, atomic audio-cache dedup.
- R2 unified thread pools (
SmExecutorsbounded queues + CallerRuns backpressure + TaskScope). - R3
ModelStoragePathscentralization +PersistentStoreatomic writes. - R4 unified resource container (folder / zip GBK / limits) + zip-bomb protection.
- R5 Model Domain / R6 EntityModelResolver (priority + revision race protection).
- R7
ClientModelManagersplit (3024 lines → 5 focused classes). - R8
ServerModelManagersplit (1899 lines → 8 focused classes, atomic file moves + upload policy). - Tests grown from 45 → 201 per branch (YsmCrypt golden vectors, model corpus, race acceptance).
1.2.1Релиз26.1, 26.1.1, 26.1.2 · 13 августа 2026 г.
Sparkle Morpher 1.2.1
Sparkle Morpher 1.2.1 fixes a singleplayer crash on the Fabric 26.x line, aligns the 26.2 branch with the real 26.2 APIs, and brings the rendering/network/Maid refactor series R0–R11 (recorded between 2026-08-10 and 2026-08-13, including everything from the 08-12 prerelease 1.2.0-beta-R11MAID) into a formal release across Fabric and NeoForge × 1.21.1 / 26.1.2 / 26.2.
Highlights
Crash fixes (focus of this release)
- Fixed
IncompatibleClassChangeErroron joining singleplayer (Fabric 26.1.2 / 26.2): removed the compile-time shadow stubs whereMinecraft.execute/submit/isLocalServerwere wrongly declaredstatic, which madeMinecraft.getInstance().execute(...)compile toinvokestaticand crash at runtime against the real instance methods. Everything is now compiled back toinvokevirtual(verified by a full ASM scan: 0 remaining). - Fa26.2 stub cleanup & alignment with real 26.2 APIs: removed 24 vestigial/shadowing stubs, keeping only 4 runtime compat layers (
MultiBufferSource/IrisApi/ModConfig/IForgeGuiGraphicsExtractor); 6 call sites (getScoreboard/renderNames/renderBuffers/getMainRenderTarget/screenetc.) moved to the real 26.2 APIs. - Sync packet queue overflow → bounded backpressure: bursts no longer abort the whole sync when the queue briefly fills; the enqueue side now waits with a bounded budget (server bandwidth limiting + outbound drain form a backpressure loop).
Rendering & performance
- Classic HUD deep performance rewrite: FBO partial physical-pixel offscreen cache (was ~35 ms full CPU render per frame → ~0.17 ms); GPU path with a 60 Hz independent refresh budget, SIMD/compat path at 10 Hz throttle; 8-slot bone SSBO ring +
GL_STREAM_DRAWstreaming uploads, eliminating shared-buffer sync stalls; explicit alpha compositing and batching isolation. - First-person hand rendering fix (26.x): the hand always uses the
entityTranslucentpass. - Preview rotation pollution fix (1.21.1): entity yaw and preview mode are reset even on exception paths (try/finally).
- Hand rendering NPE guard:
getAnimationBundle()==nullmid-state protection (12 sites across 6 branches). - R10-series internal refactors:
RenderBackendinterface isolation (Blaze3D / OpenGL / SIMD / Java implementations),GpuMeshRegistryleases + orphan sweeps, unified resource ownership for model assemblies (deterministic release), weighted-LRU audio cache.
Networking & model sync
- Fixed crash when clients without SPM join: per-player channel pre-checks before sending (NeoForge/Fabric) + batch send fallback.
- Systemic fix for sync timeouts / stuck "receiving model data":
LegacySyncFlowControl64 KiB burst backpressure + 512 MiB in-flight budget; a dedicated single-threaded sync executor with a bounded ordered packet queue (decrypt/verify/disk-write no longer blocks network/main threads); termination frame sent when the server cache is unavailable so the client never hangs forever; the watchdog no longer reports false success. - neo1.21.1 stuck-at-LOADING fix:
toClientboundPacketnull packet → wrapped inClientboundCustomPayloadPacket. - R9 networking modularization (internal): send-entry pre-checks, connection-state split, upload-transport interfaces.
Maid (TLM) compatibility (R11)
MaidModelSyncdivergence converged across branches (byte-identical in all six).C2SSetMaidModelPacket(id 24) ported to all branches: maid model switching now uses SPM's own chain (auth pipeline); the official TLM protocol remains as fallback.- TLM-environment startup crash fixed (
@Mixin(targets=...)to avoidMixinTargetAlreadyLoaded). - 26.x GUI maid preview not replacing YSM models — fixed.
- R11
compat.apiservice layer (internal, no startup-order dependencies).
GUI / HUD
- Classic / Modern HUD dual toggles: independent switches in settings; the legacy keybinding and old screen were removed.
ClassicHudLayoutScreenlayout editor: drag, unbounded scaling, scroll zoom, yaw rotation, one-click reset.ModernHudRendererindependent entry contract (off by default, internal).
Other fixes
- Abnormal head rotation while riding (
RiderRotationMathpure-angle helper, verified on 6 branches). - 1.21.1 default model rotation not following the camera (cross-frame cache registry retained).
- Server model pack name JSON-quote display fix.
Internal refactors (R0–R9, core of 1.2.1)
- S0 security hotfixes: YSM folder path-escape sandbox, atomic audio-cache dedup.
- R2 unified thread pools (
SmExecutorsbounded queues + CallerRuns backpressure + TaskScope). - R3
ModelStoragePathscentralization +PersistentStoreatomic writes. - R4 unified resource container (folder / zip GBK / limits) + zip-bomb protection.
- R5 Model Domain / R6 EntityModelResolver (priority + revision race protection).
- R7
ClientModelManagersplit (3024 lines → 5 focused classes). - R8
ServerModelManagersplit (1899 lines → 8 focused classes, atomic file moves + upload policy). - Tests grown from 45 → 201 per branch (YsmCrypt golden vectors, model corpus, race acceptance).
Комментарии
Загружаем…