AzureLib represents a branch derived from Geckolib 4.x, serving as an animation engine tailored for Minecraft Mods. It boasts various features, including support for intricate 3D keyframe-driven animations, over 30 different easing functions, concurrent animation capabilities, sound and particle keyframes, event-based keyframes, and numerous other functionalities. Currently, I'll focus on maintaining and supporting AzureLib; no help will be given to Geckolib.
Are you a developer and want to use this library in your mod? Add the following to your build.gradle Follow the steps here.
Need a server to play with friends? Don't know how to setup one? Just rent an already configured server from BisectHosting!
Click on the picture above, select plan(at least 4GB), and use my code azuredoom to get 25% off your first month and enjoy playing with your friends!
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.38
|
18h ago | 1 | |||
|
R
1.0.38
|
18h ago | 1 | |||
|
R
1.0.44
|
18h ago | 1 | |||
|
R
1.0.44
|
18h ago | 1 | |||
|
R
1.0.35
|
18h ago | 1 | |||
|
R
1.0.35
|
18h ago | 1 | |||
|
R
1.0.39
|
18h ago | 1 | |||
|
R
1.0.39
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.37
|
18h ago | 1 | |||
|
R
1.0.37
|
18h ago | 1 | |||
|
R
1.0.43
|
18h ago | 1 | |||
|
R
1.0.43
|
18h ago | 1 | |||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.38
|
18h ago | 1 | |||
|
R
1.0.38
|
18h ago | 1 | |||
|
R
1.0.37
|
18h ago | 1 | |||
|
R
1.0.37
|
18h ago | 1 | |||
|
R
1.0.36
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.36
|
18h ago | 1 | |||
|
R
1.0.36
|
18h ago | 1 | |||
|
R
1.0.42
|
18h ago | 1 | |||
|
R
1.0.42
|
18h ago | 1 | |||
|
R
1.0.33
|
18h ago | 1 | |||
|
R
1.0.33
|
18h ago | 1 | |||
|
R
1.0.36
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.35
|
18h ago | 1 | |||
|
R
1.0.35
|
18h ago | 1 | |||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.33
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.35
|
18h ago | 1 | |||
|
R
1.0.35
|
18h ago | 1 | |||
|
R
1.0.41
|
18h ago | 1 | |||
|
R
1.0.41
|
18h ago | 1 | |||
|
R
1.0.32
|
18h ago | 1 | |||
|
R
1.0.32
|
18h ago | 1 | |||
|
R
1.0.15
|
18h ago | 1 | |||
|
R
1.0.15
|
18h ago | 1 | |||
|
R
1.0.32
|
18h ago | 1 | |||
|
R
1.0.32
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.40
|
18h ago | 1 | |||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.40
|
18h ago | 1 | |||
|
R
1.0.31
|
18h ago | 1 | |||
|
R
1.0.14
|
18h ago | 1 | |||
|
R
1.0.31
|
18h ago | 1 | |||
|
R
1.0.31
|
18h ago | 1 | |||
|
R
1.0.14
|
18h ago | 1 | |||
|
R
1.0.31
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.33
|
18h ago | 1 | |||
|
R
1.0.33
|
18h ago | 1 | |||
|
R
1.0.39
|
18h ago | 1 | |||
|
R
1.0.39
|
18h ago | 1 | |||
|
R
1.0.30
|
18h ago | 1 | |||
|
R
1.0.30
|
18h ago | 1 | |||
|
R
1.0.13
|
18h ago | 1 | |||
|
R
1.0.13
|
18h ago | 1 | |||
|
R
1.0.30
|
18h ago | 1 | |||
|
R
1.0.30
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.32
|
18h ago | 1 | |||
|
R
1.0.32
|
18h ago | 1 | |||
|
R
1.0.38
|
18h ago | 1 | |||
|
R
1.0.38
|
18h ago | 1 | |||
|
R
1.0.29
|
18h ago | 1 | |||
|
R
1.0.29
|
18h ago | 1 | |||
|
R
1.0.12
|
18h ago | 1 | |||
|
R
1.0.12
|
18h ago | 1 | |||
|
R
1.0.29
|
18h ago | 1 | |||
|
R
1.0.29
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.37
|
18h ago | 1 | |||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.34
|
18h ago | 1 | |||
|
R
1.0.33
|
18h ago | 1 |
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animation LOD now works. Past
animLodDistance, entities update their animations once everyanimLodTickIntervalticks and hold their pose in between, instead of animating every frame.
### Fixes
- Fixed animation LOD having no effect. The LOD decision was computed but ignored, so distant entities still animated every frame.
- Fixed models and animations that could briefly go missing during a resource reload (F3+T or changing resource packs in-world). The caches were filled in place on a background thread while the game was still rendering from them; they are now loaded separately and swapped in once the reload finishes.
- Fixed models and animations from removed resource packs staying loaded until restart.
- Fixed one geo model that failed to bake stopping every remaining model from loading. The broken model is now logged and skipped.
- Fixed a crash when an animation file
includesa file that is missing or failed to load. The animation is now logged as missing instead. - Fixed bone LOD being able to hide bones on the shared model template before an entity had its own copy, which newly spawned entities could then inherit.
- Fixed per-entity LOD state never being released after entities unloaded.
### Changes
- Changed LOD to be DISABLED by default when a render doesn't call
withLodConfig.
### Developer Notes
AzResourceCache#loadResourcesnow returnsCompletableFuture<Map<ResourceLocation, T>>and no longer takes aBiConsumer.AzBakedAnimationCache#loadAnimationsandAzBakedModelCache#loadModelsreturn the loaded map; publish it with the newapply(Map). Namespaces inEXCLUDED_NAMESPACESare now skipped before loading instead of after.- Added
AzEntityRenderer#shouldAnimateThisFrame()and the overridableupdateLod(...). Custom entity model renderers that overriderendershould checkshouldAnimateThisFrame()before callinghandleAnimation, or animation LOD won't apply to them. - LOD is opt-in: renderers that never call
withLodConfigdon't use bone or animation LOD. PassAzLodConfig.DEFAULTfor the built-in preset (one animation update every 2 ticks past 48 blocks; bones deeper than depth 3 hidden past 40 blocks) or build your own withAzLodConfig.builder().
### Additions
- Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes, which noticeably cuts animation cost for models with many bones.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. - Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes, which noticeably cuts animation cost for models with many bones.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. - Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes, which noticeably cuts animation cost for models with many bones.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. - Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes, which noticeably cuts animation cost for models with many bones.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. - Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Large groups of animated entities are now cheaper to render:
- Bones no longer allocate a new pose every frame. Each bone used to create a new
PoseStackpose, matrix and normal matrix every frame for every entity on screen; the pose is now saved and restored in place. This roughly halves render-thread allocation and makes garbage collection pauses about half as frequent. - Animations no longer look up every animated bone by name every frame. Each controller resolves its animation's bones once and reuses them until the animation or model changes.
- Bone LOD no longer walks every bone of every nearby entity each frame when no bones are hidden.
- Animated textures no longer use reflection, and no longer throw and catch an exception, on every render of every textured model.
### Fixes
- Fixed animation transitions stopping for every remaining bone when one bone had no snapshot or animation queue, instead of skipping just that bone.
### Developer Notes
- Added
AzModelRenderer#saveBonePoseandrestoreBonePose, which replacePoseStack#pushPose/popPosearound each bone. The entity and block entity model renderers use them; the item and armor model renderers no longer push their own pose per bone. Custom model renderers that overriderenderRecursivelyshould do the same, sincepushPoseallocates on every call in this version. - Added
AzBoneAnimationQueueCache#resolveQueues(AzBakedAnimation), which returns each bone animation's queue by index, cached per animation and model. AnimatableTexture#setAndUpdatehandles AzureLib's own textures with a plain type check. For other texture classes it still callssetAnimationFrame(int)when they have one, but looks the method up once per class instead of on every call.- Bone LOD now tracks which baked models currently have LOD-hidden bones, so un-hiding only runs when something was actually hidden.
### Additions
- Added the
math.min_angle(value)Molang function, which wraps an angle in degrees into the range [-180, 180). - Added
AzProfilerstage hooks (mod.azure.azurelib.profiling) for external profiling tools. No cost when no listener is installed.
### Fixes
- Fixed
math.copy_sign,math.sign,math.inverse_lerpand all 30math.ease_*Molang functions failing to resolve. They were only registered under their bare names, so themath.-prefixed forms used by Blockbench and Bedrock animations parsed to 0. - Fixed the entity and block entity geometry caches never hitting: their keys included each instance's position. Bone visibility is now part of the entity cache key.
- A missing glowmask no longer draws the whole model a second time with an empty texture.
### Performance
- Vertex recordings are sized from the previous frame, handed to submit without copying, and pooled per frame instead of allocated per animatable.
- The auto-glowing layer reuses the main model pass instead of re-rendering the model (when no bone overrides are in use), and only submits quads whose UVs cover glowing pixels in the glowmask, including animated glowmasks.
- The entity and block entity geometry caches switch themselves off per type when they aren't getting hits, and probe periodically.
- Zero-area faces (the edges of flat cubes) are no longer baked or rendered.
- Cube pivot rotations are baked once at load instead of being applied to the pose stack for every cube every frame.
- Entity and block entity renderers reuse their extraction pose stack instead of allocating one per render.
- Flat-cube normal fixes are precomputed per cube; bone, cube and layer loops no longer allocate iterators.
- Glowmask texture paths are cached instead of rebuilt every frame.
- Removed a per-quad texture size lookup for bones without a texture override.
### Developer Notes
- The fixed Molang functions are now registered only under their
math.names, matching the existing classic functions. Expressions that called them without the prefix (e.g.ease_in_quad(0, 1, t)) must be updated to usemath.ease_in_quad(0, 1, t). AzCubehas two new record components,transformandnormalFlips. The six-argument constructor still works; code that deconstructs the record with a pattern needs updating.AzModelRenderer#renderCubeno longer modifies the pose stack, andrenderCubesOfBoneno longer pushes and pops it per cube. Overrides ofrenderCubethat change the pose stack must push and pop it themselves.AzEntityGeometryCache.CacheKeyandAzBlockEntityGeometryCache.CacheKeyno longer have position components.AzBufferSourcerecordings are only valid until the end of the frame; their arrays are reused after that.- New:
AzBufferSource#mirror(with an optionalQuadFilter),AzGlowCoverage, andAzAutoGlowingLayer#canReuseModelPass/#glowFilterfor subclasses that draw their glow differently.
### Additions
- Added the
math.min_angle(value)Molang function, which wraps an angle in degrees into the range [-180, 180). - Added
AzProfilerstage hooks (mod.azure.azurelib.profiling) for external profiling tools. No cost when no listener is installed.
### Fixes
- Fixed
math.copy_sign,math.sign,math.inverse_lerpand all 30math.ease_*Molang functions failing to resolve. They were only registered under their bare names, so themath.-prefixed forms used by Blockbench and Bedrock animations parsed to 0. - Fixed the entity and block entity geometry caches never hitting: their keys included each instance's position. Bone visibility is now part of the entity cache key.
- A missing glowmask no longer draws the whole model a second time with an empty texture.
### Performance
- Vertex recordings are sized from the previous frame, handed to submit without copying, and pooled per frame instead of allocated per animatable.
- The auto-glowing layer reuses the main model pass instead of re-rendering the model (when no bone overrides are in use), and only submits quads whose UVs cover glowing pixels in the glowmask, including animated glowmasks.
- The entity and block entity geometry caches switch themselves off per type when they aren't getting hits, and probe periodically.
- Zero-area faces (the edges of flat cubes) are no longer baked or rendered.
- Cube pivot rotations are baked once at load instead of being applied to the pose stack for every cube every frame.
- Entity and block entity renderers reuse their extraction pose stack instead of allocating one per render.
- Flat-cube normal fixes are precomputed per cube; bone, cube and layer loops no longer allocate iterators.
- Glowmask texture paths are cached instead of rebuilt every frame.
- Removed a per-quad texture size lookup for bones without a texture override.
### Developer Notes
- The fixed Molang functions are now registered only under their
math.names, matching the existing classic functions. Expressions that called them without the prefix (e.g.ease_in_quad(0, 1, t)) must be updated to usemath.ease_in_quad(0, 1, t). AzCubehas two new record components,transformandnormalFlips. The six-argument constructor still works; code that deconstructs the record with a pattern needs updating.AzModelRenderer#renderCubeno longer modifies the pose stack, andrenderCubesOfBoneno longer pushes and pops it per cube. Overrides ofrenderCubethat change the pose stack must push and pop it themselves.AzEntityGeometryCache.CacheKeyandAzBlockEntityGeometryCache.CacheKeyno longer have position components.AzBufferSourcerecordings are only valid until the end of the frame; their arrays are reused after that.- New:
AzBufferSource#mirror(with an optionalQuadFilter),AzGlowCoverage, andAzAutoGlowingLayer#canReuseModelPass/#glowFilterfor subclasses that draw their glow differently.
### Additions
- Added the
math.min_angle(value)Molang function, which wraps an angle in degrees into the range [-180, 180). - Added
AzProfilerstage hooks (mod.azure.azurelib.profiling) for external profiling tools. No cost when no listener is installed.
### Fixes
- Fixed
math.copy_sign,math.sign,math.inverse_lerpand all 30math.ease_*Molang functions failing to resolve. They were only registered under their bare names, so themath.-prefixed forms used by Blockbench and Bedrock animations parsed to 0.
### Performance
- The auto-glowing layer only draws quads whose UVs cover glowing pixels in the glowmask, including animated glowmasks, and skips the pass entirely when the glowmask has nothing visible.
- Zero-area faces (the edges of flat cubes) are no longer baked or rendered.
- Cube pivot rotations are baked once at load instead of being applied to the pose stack for every cube every frame.
- Flat-cube normal fixes are precomputed per cube; bone, cube and layer loops no longer allocate iterators.
- Glowmask texture paths are cached instead of rebuilt every frame.
### Developer Notes
- The fixed Molang functions are now registered only under their
math.names, matching the existing classic functions. Expressions that called them without the prefix (e.g.ease_in_quad(0, 1, t)) must be updated to usemath.ease_in_quad(0, 1, t). GeoCubehas two new record components,transformandnormalFlips. The six-argument constructor still works; code that deconstructs the record with a pattern needs updating.AzModelRenderer#renderCubeno longer modifies the pose stack. Overrides ofrenderCubethat change the pose stack must push and pop it themselves.- New:
AzQuadFilter,AzRendererPipelineContext#quadFilter/#setQuadFilter,AzGlowCoverage, andAzAutoGlowingLayer#glowFilterfor subclasses that draw their glow differently.
### Additions
- Added the
math.min_angle(value)Molang function, which wraps an angle in degrees into the range [-180, 180). - Added
AzProfilerstage hooks (mod.azure.azurelib.profiling) for external profiling tools. No cost when no listener is installed.
### Fixes
- Fixed
math.copy_sign,math.sign,math.inverse_lerpand all 30math.ease_*Molang functions failing to resolve. They were only registered under their bare names, so themath.-prefixed forms used by Blockbench and Bedrock animations parsed to 0.
### Performance
- The auto-glowing layer only draws quads whose UVs cover glowing pixels in the glowmask, including animated glowmasks, and skips the pass entirely when the glowmask has nothing visible.
- Zero-area faces (the edges of flat cubes) are no longer baked or rendered.
- Cube pivot rotations are baked once at load instead of being applied to the pose stack for every cube every frame.
- Flat-cube normal fixes are precomputed per cube; bone, cube and layer loops no longer allocate iterators.
- Glowmask texture paths are cached instead of rebuilt every frame.
### Developer Notes
- The fixed Molang functions are now registered only under their
math.names, matching the existing classic functions. Expressions that called them without the prefix (e.g.ease_in_quad(0, 1, t)) must be updated to usemath.ease_in_quad(0, 1, t). GeoCubehas two new record components,transformandnormalFlips. The six-argument constructor still works; code that deconstructs the record with a pattern needs updating.AzModelRenderer#renderCubeno longer modifies the pose stack. Overrides ofrenderCubethat change the pose stack must push and pop it themselves.- New:
AzQuadFilter,AzRendererPipelineContext#quadFilter/#setQuadFilter,AzGlowCoverage, andAzAutoGlowingLayer#glowFilterfor subclasses that draw their glow differently.
### Additions
- Added the
math.min_angle(value)Molang function, which wraps an angle in degrees into the range [-180, 180). - Added
AzProfilerstage hooks (mod.azure.azurelib.profiling) for external profiling tools. No cost when no listener is installed.
### Fixes
- Fixed
math.copy_sign,math.sign,math.inverse_lerpand all 30math.ease_*Molang functions failing to resolve. They were only registered under their bare names, so themath.-prefixed forms used by Blockbench and Bedrock animations parsed to 0.
### Performance
- The auto-glowing layer only draws quads whose UVs cover glowing pixels in the glowmask, including animated glowmasks, and skips the pass entirely when the glowmask has nothing visible.
- Zero-area faces (the edges of flat cubes) are no longer baked or rendered.
- Cube pivot rotations are baked once at load instead of being applied to the pose stack for every cube every frame.
- Flat-cube normal fixes are precomputed per cube; bone, cube and layer loops no longer allocate iterators.
- Glowmask texture paths are cached instead of rebuilt every frame.
### Developer Notes
- The fixed Molang functions are now registered only under their
math.names, matching the existing classic functions. Expressions that called them without the prefix (e.g.ease_in_quad(0, 1, t)) must be updated to usemath.ease_in_quad(0, 1, t). GeoCubehas two new record components,transformandnormalFlips. The six-argument constructor still works; code that deconstructs the record with a pattern needs updating.AzModelRenderer#renderCubeno longer modifies the pose stack. Overrides ofrenderCubethat change the pose stack must push and pop it themselves.- New:
AzQuadFilter,AzRendererPipelineContext#quadFilter/#setQuadFilter,AzGlowCoverage, andAzAutoGlowingLayer#glowFilterfor subclasses that draw their glow differently.
### Additions
- Added the
math.min_angle(value)Molang function, which wraps an angle in degrees into the range [-180, 180). - Added
AzProfilerstage hooks (mod.azure.azurelib.profiling) for external profiling tools. No cost when no listener is installed.
### Fixes
- Fixed
math.copy_sign,math.sign,math.inverse_lerpand all 30math.ease_*Molang functions failing to resolve. They were only registered under their bare names, so themath.-prefixed forms used by Blockbench and Bedrock animations parsed to 0.
### Performance
- The auto-glowing layer only draws quads whose UVs cover glowing pixels in the glowmask, including animated glowmasks, and skips the pass entirely when the glowmask has nothing visible.
- Zero-area faces (the edges of flat cubes) are no longer baked or rendered.
- Cube pivot rotations are baked once at load instead of being applied to the pose stack for every cube every frame.
- Flat-cube normal fixes are precomputed per cube; bone, cube and layer loops no longer allocate iterators.
- Glowmask texture paths are cached instead of rebuilt every frame.
### Developer Notes
- The fixed Molang functions are now registered only under their
math.names, matching the existing classic functions. Expressions that called them without the prefix (e.g.ease_in_quad(0, 1, t)) must be updated to usemath.ease_in_quad(0, 1, t). GeoCubehas two new record components,transformandnormalFlips. The six-argument constructor still works; code that deconstructs the record with a pattern needs updating.AzModelRenderer#renderCubeno longer modifies the pose stack. Overrides ofrenderCubethat change the pose stack must push and pop it themselves.- New:
AzQuadFilter,AzRendererPipelineContext#quadFilter/#setQuadFilter,AzGlowCoverage, andAzAutoGlowingLayer#glowFilterfor subclasses that draw their glow differently.