GeckoLib v5.5
- Port to 26.1
Changes
API
- Refactored the base packages of GeckoLib from
software.bernie.geckolibtocom.geckolib - Added
GeoLocator- A object implementation for locators. They are only used for listening to render positions- Added
BakedGeoModel#getLocatorandBakedGeoModel#locators - Added
GeoBone#locators - Added
RenderPassUtil#addLocatorPositionListener - Extracted
GeoBone#updateBonePositionListenerstoRenderUtil#providePositionsToListeners
- Added
- Modified GeckoLib's resource loading to allow for completely custom resource formats
- Gives root-level access to
Resourceinstances. Write an adapter to read resource files from any format you want! - Changed
GeckoLibLoaderfrom an SPI to a registerable interface - Added
GeckoLibUtil#addResourceLoader - Removed
GeckoLibUtil#addCustomBakedModelFactory - Converted
BakedGeoModelto a non-record, extendable class, for potential third-party adapters - Converted
Animationto a non-record, extendable class, for potential third-party adapters - Converted
ModelPropertiesto a non-record, extendable class, for potential third-party adapters - Converted
MathParserback to an instantiable object to allow for extensible implementations, added a deduplication schema to it, and performed a general cleanup - Improved the deduplication schema for
MathParser, further reducing memory consumption - Removed
BakedAnimationsAdapterandKeyFrameMarkersAdapter - Removed the legacy loading objects:
BoneCubeFaceUVLocatorClassLocatorValueMinecraftGeometryModelPolyMeshPolysUnionTextureMeshUVFacesUVUnionBoneStructureGeometryTree- Moved
ModelPropertiestogeckolib.cache.model - Moved
BakedAnimationstogeckolib.cache.animation
- Gives root-level access to
- Cleaned up
EasingType- Added a zero-parameter factory constructor to
EasingTypeand inGeckoLibUtil - Added
EasingState#interpolate - Added
EasingState#getFirstEasingArg - Added
EasingType#modifyKeyframes - Changed
EasingType#registerto return a generic type instead ofEasingType - Removed
EasingType#easeIn - Removed
EasingType#lerpWithOverride - Removed
EasingType#fromJson
- Added a zero-parameter factory constructor to
- Added
BakedAnimationCache#sizeandBakedModelCache#size - Added the
.jsonresource path toBakedGeoModel'sModelProperties - Removed
GeoReplacedEntity#getReplacingEntityTypeas it was no longer used - Converted all Javadocs to Markdown format
- Folded internal implementation methods in
BakedGeoModelandGeoBonefor API visibility - Removed the class parameter for TokenType-based
DataTickets, and properly typed the builtin GeckoLib tickets - Removed
MiscUtil#WORLD_TO_MODEL_SIZE - Removed
MiscUtil#MODEL_TO_WORLD_SIZE - Added
JsonUtil#worldToModelUnitsandJsonUtil#modelToWorldUnits - Removed the dual-type generics for renderstates from:
DirectionalProjectileRendererDyeableGeoArmorRendererGeoArmorRendererGeoBlockRendererGeoEntityRendererGeoReplacedEntityRenderer
- Moved
ModelFormatVersiontocom.geckolib.loading.definition.geometry.object - Renamed
RotationtoUvFaceRotationand moved tocom.geckolib.loading.definition.geometry.object - Removed
headBoneand its associated constructor inDefaultedEntityGeoModelsince it's no longer used - Added direct-object constructors for
DefaultedBlockGeoModel,DefaultedEntityGeoModel, andDefaultedItemGeoModel - Removed
GeckoLibPlatform#getGameDiras it is no longer used - Removed
SerializableDataTickets. They haven't had a place in GeckoLib since early 1.21.x versions, and they've always had unresolvable implementation issues. - Added
VanillaModelModifier- This is mostly an internal implementation class to bridge a gap that vanilla's implementation left us - Fixed and renabled
ItemArmorGeoLayer, added support for non-Equippableitems GeoRenderer#performRenderPassnow supports multiple pre-madeBoneUpdaterswhen starting a render pass- Converted some
BlockStateandItemStackreferences in rendering toItemStackRenderStateandBlockModelRenderStateper Minecraft standards- Vanilla hasn't yet set the systems in place for this to be everywhere, so I'm just doing it where I can
- Added
RenderUtil#createRenderStateForItem - Added
RenderUtil#createRenderStateForBlock
- Added
DataTickets#createas a shortcut/helper method for creating DataTickets - Changed
DataTicket.GLOW_COLOURtoDataTicket.OUTLINE_COLOR - Moved
DataTicket.BLOCK_FACINGtoGeoBlockRenderer.DIRECTION_FACING - Moved
DataTicket.ITEMtoGeoItemRenderer.CURRENT_ITEM - Moved
DataTicket.EQUIPMENT_SLOTtoGeoArmorRenderer.CURRENT_SLOT - Moved
DataTicket.IS_GECKOLIB_WEARERtoGeoArmorRenderer.IS_GECKOLIB_WEARER - Moved
DataTicket.HUMANOID_MODELtoGeoArmorRenderer.BASE_MODEL - Added
BlockEntityRendererProvider.Contextto the constructor ofGeoBlockRenderer
Other
- Added
1.16.0and1.19.30to the known geometry model definitions - Improved resource loading performance
- Added an interface injection for
BlockEntityRenderState->GeoRenderState - GeckoLib will no longer crash when unable to find a model; and will instead render a missing texture cube
Bug Fixes
- Fixed
RenderUtil#transformToBonerunning in reverse order - Fixed
AnimationControllerhaving the wrong InternalApi annotations - Fixed top-level bones not always providing the correct position to
BonePositionListeners - Fixed GeckoLib model bones not rendering in the correct order when nested under parent bones
- Fixed GeckoLib model loading not respecting
mirrorandinflatevalues properly - Reduced backface z-fighting on 0-depth cubes. Stop making your cubes 0-thickness!
v4.8.4
- Prevent crashing from an empty molang string
- Fixed Molang calculations sometimes parsing math incorrectly (#820)
- Fixed MathParser not parsing group negatives properly (#820)
GeckoLib v5.4.5
Bug Fixes
- Fixed animations transitioning to themselves when finishing sometimes
- Fixed CustomBoneTextureGeoLayer not rendering in the correct position
- Fixed MathParser not parsing group negatives properly
GeckoLib v5.4.4
Changes
API
- Added
RenderPassInfo#getPreRenderMatrixPoseandRenderPassInfo#getModelRenderMatrixPose, capturing the entire PoseStack pose instead of just the matrix pose itself - Added
OverridingDataTicket- ADataTicketimplementation that defers to an existing RenderState field first before applying itself.- This allows for capturing RenderState field values that may be modified by vanilla or other mods after extraction by the renderer (Fixes #818)
Bug Fixes
- Fixed looping animations sometimes causing vanishing entities
- Fixed GeckoLib failing to load an animation with an empty string as the keyframe
- Fixed
RenderUtil#transformToBonemanipulating thePoseStackin reverse (#819) - Fixed
RenderUtil#transformToBonenot accounting for back-translating to the pivot point (#822) - Fixed
MathParsersometimes parsing mathmematical expressions incorrectly (#820) - Fixed
GeoItems sometimes having their id collide if not registered as a synced animatable - Fixed some animations replaying the last few frames of their animation occasionally under very specific circumstances
v4.8.3
- Fix GeckoLib not knowing what
math.piis and breaking animations (??? How has no-one told me about this until now) - Add incompatibility with geckoanimfix since the author refuses to remove the mod even though it breaks Geckolib and actually does nothing at all
GeckoLib v5.4.3
Additions
- Added
RenderUtil#prepMatrixForBoneAndUpdateListeners - Added
RenderUtil#addPosToMatrix
Bug Fixes
- Fixed Bone Position Listeners not getting the right positions
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)


