GeckoLib v5.4.2
Additions
- Added a bone name based equivalent of
RenderPassInfo#addBonePositionListener - Added transitive interface injections for Common, NeoForge, and Fabric
- Added a
TypeTokenalternative to classes forDataTickets, to allow for generic-typed DataTickets
Bug Fixes
- Fixed a bug causing the first keyframe of animations to be skipped entirely (#807, #805)
- Fixed hold on last frame loop type not working (#806)
v4.8.3
- Added a safety check for mods attempting to render GeckoLib armor without using GeoRenderProvider. (#755, #804, etc)
- Marked GeckoAnimFix as an incompatible mod since they refuse to stop breaking GeckoLib with their download-farming mod.
GeckoLib v5.4.1
Changes:
- Cleaned up some outdated tooltips
- Added some additional context to DeferredCache errors from
RenderPassInfo#addBoneUpdater
Bug Fixes:
- Fixed
AnimationControllersometimes thinking time has gone backwards (thanks Mojang?) - Fixed
AnimationControllerhandling triggered animations in ticks instead of seconds - Fixed keyframe markers not being triggered properly (or sometimes at all)
- Fixed in-code loop type usage not being respected
GeckoLib v5.4
Changes:
Fixes:
- Fixed GeoArmorRenderer not rendering properly
- Fixed GeoArmorRenderer crashing when using renderlayers
- Fixed animations interpolating from previous animations that had already finished
- Fixed animations not transitioning back to base pose when finishing if transition time is present
- Fixed animations not rotating properly when animating bones that are rotated by default
- Fixed bone scaling not applying
API:
- GeoRenderState#addGeckolibData no longer accepts
nullvalues - Re-added
#setTransitionTickstoAnimationController - Added
JsonUtil#jsonToVec3direct helper method - Begun building a new SPI-based .json deserialization pipeline, to allow for safer and more extensible model & animation loading
- By default, GeckoLib will continue to use GSON to deserialize into intermediary unbaked objects
- I am looking at making a GeckoLib addon that uses a faster library (possibly FastJson?) to speed up loading of assets, potentially substantially
- This system is not fully implemented yet, but the majority of the code has been written and reviewed to ensure it meets current Bedrock geometry & animation specs (1.21.0 and 1.8.0 respectively)
- This will in theory allow mod authors to create their own adapters in the event they want to do custom loading or handling, without sacrificing on safety
- By default, GeckoLib will continue to use GSON to deserialize into intermediary unbaked objects
- Removed
GeckoLibClient#getGeoModelForItemas it was unused and unnecessary, useRenderUtil#getGeckoLibItemRendererinstead and get the model as needed GeckoLibServices.Clientwas extracted toGeckoLibClientServices, because java kept failing to compile for seemingly no reason- Created
GeoBone#positionAndRender, which implements the full render operation for a given bone - Added a supplier-based fallback overload for
GeoRenderState#getOrDefaultGeckolibDatafor deferred computation - Added
SerializableDataTicket#enforceValidTicket
Internal:
- Moved GeckoLib's nullability annotations to the JSpecify spec
- You will find a significant increase in nullability notations and null handling in the library, which should help eliminate confusion as to the state of the code
- Cleaned up more Javadocs
- Added a significant amount of additional documentation - specifically in package-info files and parameter type descriptions
- Renamed RawAnimation#additionalTicks to RawAnimation#waitTicks
- Removed
bind_pose_rotationlegacy support from the Bone format - Removed the unused
AnimationVariablesclass - Changed the related-object generic type for
GeoObjectRendererfromEtoOto match the rest of the library - Moved
BoneSnapshots,PerBoneRender, andRenderPassInfoto the renderer base package - Moved the various builtin
GeoRenderLayerclasses to a builtin subpackage - Moved GeckoLib's GSON instance from
KeyFramesAdaptertoGeckoLibResources - Renamed
KeyFramesAdaptertoKeyFrameMarkersAdapter - Cleaned up and standardized nullability throughout the library
- Updated some outdated javadocs from pre-update
GeckoLib v5.4-alpha-1
Changes:
GeckoLib v5.3-alpha-3
Alpha 3 Notes:
- Fixed a crash on world load (#776)
- More internal changes around armour rendering and ItemArmorGeoLayer
- Sorry to say, there's more API changes coming in the next version :(
Alpha 2 Notes:
- Fix Forge crashing on load on newer Forge versions (#773)
- Fix GeoArmorRenderer crashing when not rendering a full set (#771)
BlockAndItemGeoLayer#renderStackForBoneand#renderBlockForBonerenamed to#submitItemStackRenderand#submitBlockRenderrespectively- Moved the
OBJECT_RENDER_POSEandMODEL_RENDER_POSEDataTickets to the baseGeoRenderer, so that subclasses do not need to handle them in overrides - Fixed only handling 1
PerBoneRenderTaskperGeoBone - Added
GeoBone#transformToBone - Split
PerBoneRendertasks out intoGeoRenderer#submitPerBoneRenderTasks - Removed the
skipPerBoneTasksin severalGeoRenderermethod calls as it is no longer needed - Created
PerBoneRenderTasksfor neatly handling per-bone render tasks given their added complexity - Restricted
GeoArmorLayer's generic type to require anAvatarRenderState, as that is the actual type required by the models used - Added
RenderStateUtil
Changes
- Port to 1.21.10
- NOTE: This is an ALPHA build, and may be subject to breaking changes until the alpha tag is removed.
- The PACKED_LIGHT DataTicket is no longer filled for most GeoRenderers, as the base RenderState classes contain
lightCoordsnow by default - Added
GeoRenderState#getPackedLight GeoRenderer#defaultRenderhas been renamed to#submitRenderTasksto better represent its function now that we're not actually rendering at the time of that callGeoRenderer#actuallyRenderhas been renamed to#buildRenderTaskto better represent its functionGeoLayer#renderhas been renamed to#buildRenderTaskto better represent its functionGeoRenderer#reRenderhas been removed. Instead, render layers or renderers should submit another render task viaGeoRenderer#buildRenderTask. Consequently, you no longer need to check forisReRenderin renderer methodspreRender,scaleModelForRender, andadjustPositionForRenderhave all been moved to after the preRender event check- Added
GeoRenderer#createRenderState - Removed
GeoEntityRenderer#createBaseRenderState- Use#createRenderStateinstead - Removed various DataTickets from the default setup, where they're just a blatant clone of existing vanilla properties, to eliminate multiple sources of truth and improve performance
- The various Matrix4f variables in GeckoLib renderers has been moved to DataTickets
- Removed
GeoRenderer#doPostRenderCleanup - Added the associated HumanoidModel to
GeoArmorLayer.RenderData - Added
RenderModelPositioner
- Rewrote
GeoArmorRenderer- it should now be significantly easier to use and understand - Change DefaultedEntityGeoModel to take a customisable bone name instead of a flat boolean
- Added
#withRenderLayerto the variousGeoRenderers to allow for a functional instantiation GeoObjectRenderernow uses a generic for itsGeoRenderState, allowing for generic extensibility- Directly pass the partialTick to
GeoRenderer#addRenderData,GeoRenderLayer#addRenderData,GeoModel#prepareForRenderPass, and the variousCompileRenderStateevents/hooks (#762) - Renamed
GeoRenderer#adjustPositionForRenderto#adjustRenderPoseto better reflect its intended usage ItemArmorGeoLayer.RenderDatanow usesGeoArmorRenderer.ArmorSegments instead of manual slots and part getters- Made
GeoRenderEventand its various sub-events multiloader compatible - All platform-specific GeckoLib events are now split into their own individual classes to make it easier to find and manage them. E.G.
CompileBlockRenderLayersEvent
Additions
- Added "Stateless" animatables. These are an alternate way of handling animations for GeckoLib animatables.
- See: https://github.com/bernie-g/geckolib/wiki/Stateless-Animatable-Handling-(Geckolib5)
- Added:
StatelessGeoBlockEntityStatelessGeoEntityStatelessGeoObjectStatelessGeoReplacedEntityStatelessGeoSingletonAnimatableStatelessAnimationController
- Added
attack.punchDefaultAnimation constant - Added
misc.idle.flyingDefaultAnimation constant - Added
move.diveDefaultAnimation constant - Added
DefaultAnimations#triggerOnlyControllerfor creating a controller specifically for arbitrary triggered animations - Added
RawAnimation#getStageCount - Added
AnimationController#getStateHandler - Added
DefaultAnimations#genericWalkFlyIdleController - Added a constructor overload for various GeckoLib renderers that takes the item directly and creates a defaulted instance using the object's registered ID for quick and easy handling
- E.G.
new GeoEntityRenderer(ModEntities.MY_ENTITY);
- E.G.
- Added
GeoRenderEvent#hasData - Added
RenderUtil#getReplacedEntityRenderer - Added
RenderUtil#getGeckoLibItemRenderer - Added
RenderUtil#getGeckoLibEntityRenderer - Added
RenderUtil#getGeckoLibBlockRenderer - Added
RenderUtil#getGeckoLibArmorRenderer
Bug Fixes
- Add double-depth bedrock keyframe parsing because I have no idea why Blockbench is exporting that
- Fixed triggered animations not visually working on brand-new stacks in multiplayer for other players
- Fixed some incorrect javadocs in AnimationController
- Ensure the
EntityRenderStateis properly extracted before passing toGeoArmorRendererfor extraction
Internal Changes
- Reorganised GeckoLib's packets into folders
- Added a StreamCodec implementation for
Animation.Stage - Added a StreamCodec implementation for
RawAnimation - Added javadocs to more internal methods and all of the mixins, for clarity
- Improved the Javadoc on
GeoRenderEvent#getRenderData - Removed
RenderUtil#getCurrentSystemTick - Removed
RenderUtil#booleanToFloat - Removed
RenderUtil#getGeoModelForEntityType - Removed
RenderUtil#getGeoModelForEntity - Removed
RenderUtil#getGeoModelForItem - Removed
RenderUtil#getGeoModelForBlock - Removed
RenderUtil#getGeoModelForArmor - Moved
RenderUtil#getCurrentTicktoClientUtil - Moved
RenderUtil#arrayToVectoJsonUtil - Removed some superfluous parameters from
GeoRenderProvider#getGeoArmorRenderer - Renamed
ItemArmorGeoLayer#prepHumanoidModelForRenderto#positionModelPartFromBone
GeckoLib v5.3-alpha-2
Alpha 2 Notes:
- Fix Forge crashing on load on newer Forge versions (#773)
- Fix GeoArmorRenderer crashing when not rendering a full set (#771)
BlockAndItemGeoLayer#renderStackForBoneand#renderBlockForBonerenamed to#submitItemStackRenderand#submitBlockRenderrespectively- Moved the
OBJECT_RENDER_POSEandMODEL_RENDER_POSEDataTickets to the baseGeoRenderer, so that subclasses do not need to handle them in overrides - Fixed only handling 1
PerBoneRenderTaskperGeoBone - Added
GeoBone#transformToBone - Split
PerBoneRendertasks out intoGeoRenderer#submitPerBoneRenderTasks - Removed the
skipPerBoneTasksin severalGeoRenderermethod calls as it is no longer needed - Created
PerBoneRenderTasksfor neatly handling per-bone render tasks given their added complexity - Restricted
GeoArmorLayer's generic type to require anAvatarRenderState, as that is the actual type required by the models used - Added
RenderStateUtil
Changes
- Port to 1.21.10
- NOTE: This is an ALPHA build, and may be subject to breaking changes until the alpha tag is removed.
- The PACKED_LIGHT DataTicket is no longer filled for most GeoRenderers, as the base RenderState classes contain
lightCoordsnow by default - Added
GeoRenderState#getPackedLight GeoRenderer#defaultRenderhas been renamed to#submitRenderTasksto better represent its function now that we're not actually rendering at the time of that callGeoRenderer#actuallyRenderhas been renamed to#buildRenderTaskto better represent its functionGeoLayer#renderhas been renamed to#buildRenderTaskto better represent its functionGeoRenderer#reRenderhas been removed. Instead, render layers or renderers should submit another render task viaGeoRenderer#buildRenderTask. Consequently, you no longer need to check forisReRenderin renderer methodspreRender,scaleModelForRender, andadjustPositionForRenderhave all been moved to after the preRender event check- Added
GeoRenderer#createRenderState - Removed
GeoEntityRenderer#createBaseRenderState- Use#createRenderStateinstead - Removed various DataTickets from the default setup, where they're just a blatant clone of existing vanilla properties, to eliminate multiple sources of truth and improve performance
- The various Matrix4f variables in GeckoLib renderers has been moved to DataTickets
- Removed
GeoRenderer#doPostRenderCleanup - Added the associated HumanoidModel to
GeoArmorLayer.RenderData
- Rewrote
GeoArmorRenderer- it should now be significantly easier to use and understand - Change DefaultedEntityGeoModel to take a customisable bone name instead of a flat boolean
- Added
#withRenderLayerto the variousGeoRenderers to allow for a functional instantiation GeoObjectRenderernow uses a generic for itsGeoRenderState, allowing for generic extensibility- Directly pass the partialTick to
GeoRenderer#addRenderData,GeoRenderLayer#addRenderData,GeoModel#prepareForRenderPass, and the variousCompileRenderStateevents/hooks (#762) - Renamed
GeoRenderer#adjustPositionForRenderto#adjustRenderPoseto better reflect its intended usage ItemArmorGeoLayer.RenderDatanow usesGeoArmorRenderer.ArmorSegments instead of manual slots and part getters- Made
GeoRenderEventand its various sub-events multiloader compatible - All platform-specific GeckoLib events are now split into their own individual classes to make it easier to find and manage them. E.G.
CompileBlockRenderLayersEvent
Additions
- Added "Stateless" animatables. These are an alternate way of handling animations for GeckoLib animatables.
- See: https://github.com/bernie-g/geckolib/wiki/Stateless-Animatable-Handling-(Geckolib5)
- Added:
StatelessGeoBlockEntityStatelessGeoEntityStatelessGeoObjectStatelessGeoReplacedEntityStatelessGeoSingletonAnimatableStatelessAnimationController
- Added
attack.punchDefaultAnimation constant - Added
misc.idle.flyingDefaultAnimation constant - Added
move.diveDefaultAnimation constant - Added
DefaultAnimations#triggerOnlyControllerfor creating a controller specifically for arbitrary triggered animations - Added
RawAnimation#getStageCount - Added
AnimationController#getStateHandler - Added
DefaultAnimations#genericWalkFlyIdleController - Added a constructor overload for various GeckoLib renderers that takes the item directly and creates a defaulted instance using the object's registered ID for quick and easy handling
- E.G.
new GeoEntityRenderer(ModEntities.MY_ENTITY);
- E.G.
- Added
GeoRenderEvent#hasData - Added
RenderUtil#getReplacedEntityRenderer - Added
RenderUtil#getGeckoLibItemRenderer - Added
RenderUtil#getGeckoLibEntityRenderer - Added
RenderUtil#getGeckoLibBlockRenderer - Added
RenderUtil#getGeckoLibArmorRenderer
Bug Fixes
- Add double-depth bedrock keyframe parsing because I have no idea why Blockbench is exporting that
- Fixed triggered animations not visually working on brand-new stacks in multiplayer for other players
- Fixed some incorrect javadocs in AnimationController
- Ensure the
EntityRenderStateis properly extracted before passing toGeoArmorRendererfor extraction
Internal Changes
- Reorganised GeckoLib's packets into folders
- Added a StreamCodec implementation for
Animation.Stage - Added a StreamCodec implementation for
RawAnimation - Added javadocs to more internal methods and all of the mixins, for clarity
- Improved the Javadoc on
GeoRenderEvent#getRenderData - Removed
RenderUtil#getCurrentSystemTick - Removed
RenderUtil#booleanToFloat - Removed
RenderUtil#getGeoModelForEntityType - Removed
RenderUtil#getGeoModelForEntity - Removed
RenderUtil#getGeoModelForItem - Removed
RenderUtil#getGeoModelForBlock - Removed
RenderUtil#getGeoModelForArmor - Moved
RenderUtil#getCurrentTicktoClientUtil - Moved
RenderUtil#arrayToVectoJsonUtil - Removed some superfluous parameters from
GeoRenderProvider#getGeoArmorRenderer - Renamed
ItemArmorGeoLayer#prepHumanoidModelForRenderto#positionModelPartFromBone



