NeoForge 1.21.11-5.4.5
on 2026 Mar 03GeckoLib v5.4.5
错误修复
- 修复了动画在结束时有时会过渡到自身的问题
- 修复了 CustomBoneTextureGeoLayer 未在正确位置渲染的问题
- 修复了 MathParser 未能正确解析组内负数的问题
Forge 1.21.11-5.4.5
on 2026 Mar 03GeckoLib v5.4.5
修复的错误
- 修复了动画在结束时有时会过渡到自身的问题
- 修复了 CustomBoneTextureGeoLayer 未在正确位置渲染的问题
- 修复了 MathParser 未能正确解析组内负数的问题
Fabric 1.21.11-5.4.5
on 2026 Mar 03GeckoLib v5.4.5
修复的错误
- 修复了动画在结束时有时会过渡到自身的问题
- 修复了 CustomBoneTextureGeoLayer 渲染位置不正确的问题
- 修复了 MathParser 无法正确解析组内负数的问题
NeoForge 1.21.11-5.4.4
on 2026 Feb 27GeckoLib v5.4.4
更改
API
- 新增
RenderPassInfo#getPreRenderMatrixPose与RenderPassInfo#getModelRenderMatrixPose,用于捕获完整的 PoseStack 姿态,而不仅限于矩阵姿态本身 - 新增
OverridingDataTicket—— 一种DataTicket实现,优先使用已存在的 RenderState 字段值,再应用自身逻辑- 此机制可捕获那些在渲染器提取后、由原版或其他模组修改的 RenderState 字段值(修复 #818)
错误修复
- 修复循环动画有时导致实体消失的问题
- 修复 GeckoLib 在关键帧键为空字符串时无法加载动画的问题
- 修复
RenderUtil#transformToBone对PoseStack执行反向操作的问题(#819) - 修复
RenderUtil#transformToBone未考虑回退至支点位置的问题(#822) - 修复
MathParser有时错误解析数学表达式的问题(#820) - 修复未注册为同步动画实体的
GeoItem有时发生 ID 冲突的问题 - 修复在极特定情况下某些动画偶尔重复播放最后几帧的问题
Forge 1.21.11-5.4.4
on 2026 Feb 27GeckoLib v5.4.4
更改
API
- 新增
RenderPassInfo#getPreRenderMatrixPose与RenderPassInfo#getModelRenderMatrixPose,用于捕获完整的 PoseStack 姿态,而不仅限于矩阵姿态本身 - 新增
OverridingDataTicket—— 一种DataTicket实现,优先使用已存在的 RenderState 字段值,再应用自身逻辑- 此机制可捕获那些在渲染器提取后被原版或其他模组修改的 RenderState 字段值(修复 #818)
问题修复
- 修复了循环动画有时导致实体消失的问题
- 修复了 GeckoLib 在关键帧键为空字符串时无法加载动画的问题
- 修复了
RenderUtil#transformToBone对PoseStack的操作顺序颠倒的问题(#819) - 修复了
RenderUtil#transformToBone未考虑回退至支点位置的问题(#822) - 修复了
MathParser有时错误解析数学表达式的问题(#820) - 修复了未注册为同步可动画物品的
GeoItem有时发生 ID 冲突的问题 - 修复了在极特定情况下某些动画偶尔重复播放最后几帧的问题
Fabric 1.21.11-5.4.4
on 2026 Feb 27GeckoLib v5.4.4
更改
API
- 新增
RenderPassInfo#getPreRenderMatrixPose与RenderPassInfo#getModelRenderMatrixPose,用于捕获完整的 PoseStack 姿态,而不仅限于矩阵姿态本身 - 新增
OverridingDataTicket—— 一种DataTicket实现,优先使用已存在的 RenderState 字段值,再应用自身逻辑- 此机制可捕获那些在渲染器提取后、由原版或其他模组修改的 RenderState 字段值(修复 #818)
Bug 修复
- 修复循环动画有时导致实体消失的问题
- 修复 GeckoLib 在关键帧键为空字符串时无法加载动画的问题
- 修复
RenderUtil#transformToBone对PoseStack执行反向操作的问题(#819) - 修复
RenderUtil#transformToBone未考虑回退至支点位置的问题(#822) - 修复
MathParser有时错误解析数学表达式的问题(#820) - 修复未注册为同步动画实体的
GeoItem有时发生 ID 冲突的问题 - 修复某些动画在极特定情况下偶尔重复播放最后几帧的问题
NeoForge 1.21.11-5.4.3
on 2026 Jan 28GeckoLib v5.4.3
新增内容
- 新增
RenderUtil#prepMatrixForBoneAndUpdateListeners - 新增
RenderUtil#addPosToMatrix
错误修复
- 修复骨骼位置监听器未能获取正确位置的问题
Forge 1.21.11-5.4.3
on 2026 Jan 28GeckoLib v5.4.3
新增内容
- 新增
RenderUtil#prepMatrixForBoneAndUpdateListeners - 新增
RenderUtil#addPosToMatrix
错误修复
- 修复骨骼位置监听器未获取正确位置的问题
Fabric 1.21.11-5.4.3
on 2026 Jan 28GeckoLib 5.4.3 版
新增内容
- 新增
RenderUtil#prepMatrixForBoneAndUpdateListeners - 新增
RenderUtil#addPosToMatrix
错误修复
- 修复骨骼位置监听器未能获取正确位置的问题
NeoForge 1.21.11-5.4.2
on 2026 Jan 11GeckoLib v5.4.2
新增内容
- 添加了基于骨骼名称的
RenderPassInfo#addBonePositionListener等效功能 - 为 Common、NeoForge 和 Fabric 添加了传递性接口注入
- 为
DataTickets添加了类的TypeToken替代方案,以支持泛型类型的 DataTickets
错误修复
- 修复了导致动画的第一个关键帧被完全跳过的问题 (#807, #805)
- 修复了“保持在最后一帧”循环类型无法正常工作的问题 (#806)
Forge 1.21.11-5.4.2
on 2026 Jan 11GeckoLib v5.4.2
新增内容
- 添加了基于骨骼名称的
RenderPassInfo#addBonePositionListener等效功能 - 为 Common、NeoForge 和 Fabric 添加了传递性接口注入
- 为
DataTickets添加了TypeToken替代类,以支持泛型类型的 DataTickets
错误修复
- 修复了导致动画的第一个关键帧被完全跳过的错误 (#807, #805)
- 修复了“保持在最后一帧”的循环类型无法正常工作的问题 (#806)
Fabric 1.21.11-5.4.2
on 2026 Jan 11GeckoLib v5.4.2
新增
- 添加了基于骨骼名称的
RenderPassInfo#addBonePositionListener等效功能 - 为 Common、[Neo] 和 Fabric 添加了传递性接口注入
- 为
DataTickets添加了类的TypeToken替代方案,以支持泛型类型的 DataTickets
Bug 修复
- 修复了导致动画的第一个关键帧被完全跳过的问题 (#807, #805)
- 修复了“保持在最后一帧”循环类型不生效的问题 (#806)
NeoForge 1.21.11
on 2026 Jan 01GeckoLib v5.4.1
更新内容:
- 清理了一些过时的提示信息
- 为
RenderPassInfo#addBoneUpdater中的 DeferredCache 错误添加了更多上下文信息
错误修复:
- 修复了
AnimationController有时认为时间倒流的问题(感谢 Mojang?) - 修复了
AnimationController在处理触发动画时使用了游戏刻而非秒数的问题 - 修复了关键帧标记未被正确触发(或有时完全不触发)的问题
- 修复了代码中循环类型设置未被遵守的问题
Forge 1.21.11
on 2026 Jan 01GeckoLib v5.4.1
更新内容:
- 清理了一些过时的提示信息
- 为
RenderPassInfo#addBoneUpdater中的 DeferredCache 错误添加了更多上下文信息
修复内容:
- 修复了
AnimationController有时认为时间倒流的问题(感谢 Mojang?) - 修复了
AnimationController在处理触发动画时以游戏刻而非秒为单位的问题 - 修复了关键帧标记未被正确触发(或有时根本不触发)的问题
- 修复了代码中设置的循环类型未被遵守的问题
Fabric 1.21.11
on 2026 Jan 01GeckoLib v5.4.1
更新内容:
- 清理了一些过时的提示信息
- 为来自
RenderPassInfo#addBoneUpdater的 DeferredCache 错误添加了更多上下文信息
问题修复:
- 修复了
AnimationController有时认为时间倒流的问题(感谢 Mojang?) - 修复了
AnimationController在处理触发动画时使用的是游戏刻而非秒数的问题 - 修复了关键帧标记未被正确触发(或有时根本不触发)的问题
- 修复了代码中设置的循环类型未被遵守的问题
NeoForge 1.21.11
on 2025 Dec 29GeckoLib v5.4
变更:
修复:
- 修复 GeoArmorRenderer 渲染异常的问题
- 修复在使用渲染层时 GeoArmorRenderer 崩溃的问题
- 修复动画在已完成的前一个动画基础上继续插值的问题
- 修复当过渡时间存在时,动画结束未能正确返回基础姿态的问题
- 修复骨骼默认旋转时动画旋转不正确的问题
- 修复骨骼缩放未生效的问题
API:
- GeoRenderState#addGeckolibData 不再接受
null值 - 重新添加
#setTransitionTicks到AnimationController - 添加
JsonUtil#jsonToVec3直接辅助方法 - 开始构建基于 SPI 的 .json 反序列化管道,以实现更安全、更可扩展的模型与动画加载
- 默认情况下,GeckoLib 将继续使用 GSON 反序列化为中间的未烘焙对象
- 我正考虑开发一个 GeckoLib 附加组件,使用更快的库(可能是 FastJson?)来加速资源加载,可能大幅提升性能
- 此系统尚未完全实现,但大部分代码已编写并审查完毕,确保其符合当前 Bedrock 几何体与动画规范(分别为 1.21.0 和 1.8.0)
- 理论上这将允许模组作者创建自己的适配器,用于自定义加载或处理,同时不牺牲安全性
- 默认情况下,GeckoLib 将继续使用 GSON 反序列化为中间的未烘焙对象
- 移除
GeckoLibClient#getGeoModelForItem,因其未被使用且多余,请改用RenderUtil#getGeckoLibItemRenderer并按需获取模型 - 将
GeckoLibServices.Client提取为GeckoLibClientServices,因为 Java 编译时常无故失败 - 创建
GeoBone#positionAndRender,用于实现指定骨骼的完整渲染操作 - 为
GeoRenderState#getOrDefaultGeckolibData添加基于 supplier 的备用重载,支持延迟计算 - 添加
SerializableDataTicket#enforceValidTicket
内部:
- 将 GeckoLib 的空值注解迁移至 JSpecify 规范
- 您会发现库中空值标注和空值处理显著增加,有助于消除对代码状态的困惑
- 进一步清理 Javadoc
- 新增大量文档,特别是 package-info 文件和参数类型描述
- 将 RawAnimation#additionalTicks 重命名为 RawAnimation#waitTicks
- 从骨骼格式中移除
bind_pose_rotation旧版支持 - 移除未使用的
AnimationVariables类 - 将
GeoObjectRenderer的关联对象泛型类型从E更改为O,以与其他部分保持一致 - 将
BoneSnapshots、PerBoneRender和RenderPassInfo移至渲染器基础包 - 将各种内置的
GeoRenderLayer类移至 builtin 子包 - 将 GeckoLib 的 GSON 实例从
KeyFramesAdapter移至GeckoLibResources - 将
KeyFramesAdapter重命名为KeyFrameMarkersAdapter - 在整个库中清理并标准化空值处理
- 更新部分更新前遗留的过时 Javadoc
Forge 1.21.11
on 2025 Dec 29GeckoLib v5.4
变更:
修复:
- 修复了 GeoArmorRenderer 无法正确渲染的问题
- 修复了在使用 renderlayers 时 GeoArmorRenderer 崩溃的问题
- 修复了动画在已完成的前一个动画基础上继续插值的问题
- 修复了当动画结束且存在过渡时间时,未能正确返回基础姿态的问题
- 修复了默认旋转的骨骼在动画过程中旋转不正确的问题
- 修复了骨骼缩放未生效的问题
API:
- GeoRenderState#addGeckolibData 不再接受
null值 - 重新添加了
AnimationController中的#setTransitionTicks方法 - 添加了
JsonUtil#jsonToVec3直接辅助方法 - 开始构建基于 SPI 的 .json 反序列化管道,以实现更安全、更可扩展的模型和动画加载
- 默认情况下,GeckoLib 将继续使用 GSON 反序列化为中间的未烘焙对象
- 我正在考虑开发一个 GeckoLib 附加组件,使用更快的库(可能是 FastJson?)来加速资源加载,可能大幅提升性能
- 该系统尚未完全实现,但大部分代码已经编写并审查完毕,确保其符合当前 Bedrock 几何与动画规范(分别为 1.21.0 和 1.8.0)
- 理论上这将允许模组作者创建自己的适配器,用于自定义加载或处理,同时不牺牲安全性
- 默认情况下,GeckoLib 将继续使用 GSON 反序列化为中间的未烘焙对象
- 移除了未使用且不必要的
GeckoLibClient#getGeoModelForItem,请改用RenderUtil#getGeckoLibItemRenderer并按需获取模型 - 将
GeckoLibServices.Client提取为GeckoLibClientServices,因为 Java 在编译时无故失败 - 创建了
GeoBone#positionAndRender,实现了对指定骨骼的完整渲染操作 - 为
GeoRenderState#getOrDefaultGeckolibData添加了基于 Supplier 的备用重载,支持延迟计算 - 添加了
SerializableDataTicket#enforceValidTicket
内部:
- 将 GeckoLib 的空值注解迁移至 JSpecify 规范
- 您会发现库中显著增加了空值注解和空值处理,有助于消除对代码状态的困惑
- 进一步清理了 Javadoc
- 添加了大量额外文档——特别是 package-info 文件和参数类型描述
- 将 RawAnimation#additionalTicks 重命名为 RawAnimation#waitTicks
- 从 Bone 格式中移除了
bind_pose_rotation的旧版支持 - 移除了未使用的
AnimationVariables类 - 将
GeoObjectRenderer中相关对象的泛型类型从E更改为O,以与其他部分保持一致 - 将
BoneSnapshots、PerBoneRender和RenderPassInfo移至渲染器基础包 - 将各种内置的
GeoRenderLayer类移至 builtin 子包 - 将 GeckoLib 的 GSON 实例从
KeyFramesAdapter移至GeckoLibResources - 将
KeyFramesAdapter重命名为KeyFrameMarkersAdapter - 在整个库中清理并标准化了空值处理
- 更新了一些更新前遗留的过时 Javadoc
Fabric 1.21.11
on 2025 Dec 27GeckoLib v5.4
变更:
修复:
- 修复了 GeoArmorRenderer 渲染异常的问题
- 修复了在使用 renderlayers 时 GeoArmorRenderer 崩溃的问题
- 修复了动画在已完成的前一个动画基础上继续插值的问题
- 修复了当存在过渡时间时,动画结束无法返回基础姿态的问题
- 修复了默认旋转的骨骼在动画过程中旋转不正确的问题
- 修复了骨骼缩放未生效的问题
API:
- GeoRenderState#addGeckolibData 不再接受
null值 - 重新添加了
AnimationController中的#setTransitionTicks方法 - 添加了
JsonUtil#jsonToVec3直接辅助方法 - 开始构建基于 SPI 的 .json 反序列化管道,以实现更安全、更可扩展的模型与动画加载
- 默认情况下,GeckoLib 将继续使用 GSON 反序列化为中间的未烘焙对象
- 我正考虑开发一个 GeckoLib 附加组件,使用更快的库(可能是 FastJson?)来加速资源加载,可能带来显著性能提升
- 该系统尚未完全实现,但大部分代码已经编写并审查完毕,确保其符合当前 Bedrock 几何体与动画规范(分别为 1.21.0 和 1.8.0)
- 理论上这将允许模组作者创建自己的适配器,用于自定义加载或处理,同时不牺牲安全性
- 默认情况下,GeckoLib 将继续使用 GSON 反序列化为中间的未烘焙对象
- 移除了未使用且不必要的
GeckoLibClient#getGeoModelForItem,请改用RenderUtil#getGeckoLibItemRenderer并按需获取模型 - 将
GeckoLibServices.Client提取为GeckoLibClientServices,因为 Java 无故编译失败 - 创建了
GeoBone#positionAndRender,用于实现指定骨骼的完整渲染操作 - 为
GeoRenderState#getOrDefaultGeckolibData添加了基于 supplier 的回退重载,支持延迟计算 - 添加了
SerializableDataTicket#enforceValidTicket
内部:
- 将 GeckoLib 的空值注解迁移至 JSpecify 规范
- 你会在库中发现大量增加的空值标注和空值处理,有助于消除对代码状态的困惑
- 进一步清理了 Javadoc
- 添加了大量额外文档——特别是 package-info 文件和参数类型描述
- 将 RawAnimation#additionalTicks 重命名为 RawAnimation#waitTicks
- 从骨骼格式中移除了
bind_pose_rotation的旧版支持 - 移除了未使用的
AnimationVariables类 - 将
GeoObjectRenderer的关联对象泛型类型从E改为O,以与其他部分保持一致 - 将
BoneSnapshots、PerBoneRender和RenderPassInfo移至渲染器基础包 - 将各种内置的
GeoRenderLayer类移至 builtin 子包 - 将 GeckoLib 的 GSON 实例从
KeyFramesAdapter移至GeckoLibResources - 将
KeyFramesAdapter重命名为KeyFrameMarkersAdapter - 在整个库中清理并标准化了空值处理
- 更新了一些更新前遗留的过时 Javadoc
NeoForge 1.21.11
on 2025 Dec 10GeckoLib v5.4-alpha-1
变更:
Fabric 1.21.10
on 2025 Nov 05GeckoLib v5.3-alpha-3
Alpha 3 说明:
- 修复了加载世界时崩溃的问题 (#776)
- 对护甲渲染和 ItemArmorGeoLayer 进行了更多内部调整
- 很抱歉,下一个版本还将带来更多的 API 变动 :(
Alpha 2 说明:
- 修复了在较新版本的 Forge 上加载时崩溃的问题 (#773)
- 修复了 GeoArmorRenderer 在未渲染完整套装时崩溃的问题 (#771)
- 将
BlockAndItemGeoLayer#renderStackForBone和#renderBlockForBone分别重命名为#submitItemStackRender和#submitBlockRender - 将
OBJECT_RENDER_POSE和MODEL_RENDER_POSEDataTicket 移至基础GeoRenderer类中,使子类无需在重写方法中处理它们 - 修复了每个
GeoBone仅能处理一个PerBoneRenderTask的问题 - 新增
GeoBone#transformToBone - 将
PerBoneRender任务拆分为GeoRenderer#submitPerBoneRenderTasks - 移除了多个
GeoRenderer方法调用中的skipPerBoneTasks参数,因其已不再需要 - 创建了
PerBoneRenderTasks以更清晰地管理复杂度增加的逐骨骼渲染任务 - 限制
GeoArmorLayer的泛型类型必须为AvatarRenderState,因为模型实际使用的就是该类型 - 新增
RenderStateUtil
变更内容
- 移植至 1.21.10
- 注意:这是一个 ALPHA 版本,在 alpha 标签移除前可能会有破坏性变更。
- 大多数 GeoRenderer 不再填充 PACKED_LIGHT DataTicket,因为基础 RenderState 类现在默认包含
lightCoords - 新增
GeoRenderState#getPackedLight GeoRenderer#defaultRender已重命名为#submitRenderTasks,以更准确反映其功能(此时并未真正执行渲染)GeoRenderer#actuallyRender已重命名为#buildRenderTask,以更准确反映其功能GeoLayer#render已重命名为#buildRenderTask,以更准确反映其功能- 移除了
GeoRenderer#reRender。取而代之的是,渲染层或渲染器应通过GeoRenderer#buildRenderTask提交新的渲染任务。因此,你不再需要在渲染器方法中检查isReRender preRender、scaleModelForRender和adjustPositionForRender均已移至 preRender 事件检查之后执行- 新增
GeoRenderer#createRenderState - 移除了
GeoEntityRenderer#createBaseRenderState—— 请改用#createRenderState - 从默认设置中移除了多个 DataTicket,这些原本只是对现有原版属性的重复拷贝,此举可消除多数据源并提升性能
- 将 GeckoLib 渲染器中的各种 Matrix4f 变量迁移至 DataTicket 管理
- 移除了
GeoRenderer#doPostRenderCleanup - 向
GeoArmorLayer.RenderData添加了关联的 HumanoidModel - 新增
RenderModelPositioner
- 重写了
GeoArmorRenderer—— 现在使用和理解起来应该简单得多 - 修改 DefaultedEntityGeoModel,使其接受可自定义的骨骼名称而非简单的布尔值
- 为各类
GeoRenderer添加了#withRenderLayer方法,支持函数式实例化 GeoObjectRenderer现在对其GeoRenderState使用泛型,以支持泛型扩展- 直接将 partialTick 传递给
GeoRenderer#addRenderData、GeoRenderLayer#addRenderData、GeoModel#prepareForRenderPass以及各种CompileRenderState事件/钩子 (#762) - 将
GeoRenderer#adjustPositionForRender重命名为#adjustRenderPose,以更准确反映其用途 ItemArmorGeoLayer.RenderData现在使用GeoArmorRenderer.ArmorSegment而非手动插槽和部件获取器- 使
GeoRenderEvent及其各类子事件支持多加载器环境 - 所有平台特定的 GeckoLib 事件现已拆分为独立类,便于查找和管理。例如:
CompileBlockRenderLayersEvent
新增功能
- 新增“无状态”可动画对象(Stateless Animatables)。这是处理 GeckoLib 动画对象的另一种方式。
- 参见:https://github.com/bernie-g/geckolib/wiki/Stateless-Animatable-Handling-(Geckolib5)
- 新增:
StatelessGeoBlockEntityStatelessGeoEntityStatelessGeoObjectStatelessGeoReplacedEntityStatelessGeoSingletonAnimatableStatelessAnimationController
- 新增
attack.punch默认动画常量 - 新增
misc.idle.flying默认动画常量 - 新增
move.dive默认动画常量 - 新增
DefaultAnimations#triggerOnlyController,用于创建专用于任意触发动画的控制器 - 新增
RawAnimation#getStageCount - 新增
AnimationController#getStateHandler - 新增
DefaultAnimations#genericWalkFlyIdleController - 为各类 GeckoLib 渲染器添加了构造函数重载,可直接传入物品并基于其注册 ID 创建默认实例,便于快速使用
- 示例:
new GeoEntityRenderer(ModEntities.MY_ENTITY);
- 示例:
- 新增
GeoRenderEvent#hasData - 新增
RenderUtil#getReplacedEntityRenderer - 新增
RenderUtil#getGeckoLibItemRenderer - 新增
RenderUtil#getGeckoLibEntityRenderer - 新增
RenderUtil#getGeckoLibBlockRenderer - 新增
RenderUtil#getGeckoLibArmorRenderer
Bug 修复
- 添加对双深度 bedrock 关键帧解析的支持,因为不清楚为何 Blockbench 会导出这种格式
- 修复多人游戏中其他玩家无法看到新物品堆叠上触发动画的问题
- 修复了 AnimationController 中一些错误的 Javadoc
- 确保在传递给
GeoArmorRenderer提取前已正确提取EntityRenderState
内部变更
- 将 GeckoLib 的数据包重新组织到文件夹中
- 为
Animation.Stage添加 StreamCodec 实现 - 为
RawAnimation添加 StreamCodec 实现 - 为更多内部方法及所有 Mixin 添加 Javadoc 以提高可读性
- 改进了
GeoRenderEvent#getRenderData的 Javadoc - 移除了
RenderUtil#getCurrentSystemTick - 移除了
RenderUtil#booleanToFloat - 移除了
RenderUtil#getGeoModelForEntityType - 移除了
RenderUtil#getGeoModelForEntity - 移除了
RenderUtil#getGeoModelForItem - 移除了
RenderUtil#getGeoModelForBlock - 移除了
RenderUtil#getGeoModelForArmor - 将
RenderUtil#getCurrentTick移至ClientUtil - 将
RenderUtil#arrayToVec移至JsonUtil - 从
GeoRenderProvider#getGeoArmorRenderer中移除了部分冗余参数 - 将
ItemArmorGeoLayer#prepHumanoidModelForRender重命名为#positionModelPartFromBone



