Forge 1.21.5
on 2026 Apr 25GeckoLib v5.0-alpha2
注意
- 仍在研究骨骼级渲染处理的替代方案,因为Mojang已使之前的动态渲染器不再实用。
问题修复
- 修复了GeoObjectRenderer未存储打包光照的问题(#712)
- 修复了GeoEntityRenderer不允许通用扩展RenderStates的问题
- 修复了
AutoGlowingGeoLayer中部分错误的Java文档 - 修复了GeoArmorRenderer未考虑发光或隐身DataTickets的问题
- 重新加载纹理会导致发光与动画纹理出现异常问题
内部变更
- AutoGlowingGeoLayer不再移除基础纹理的部分区域,允许选择性动态自发光
- AutoGlowingGeoLayer不再禁用着色器兼容性
- 动画纹理与发光遮罩不再相互依赖。你可以在动画纹理上使用非动画发光遮罩,反之亦可。
新增内容
- 新增
RenderUtil#getEmissiveResource辅助方法 - AutoGlowingGeoLayer现在包含
shouldRespectWorldLighting方法,允许你在绝对自发光与随世界光照变化的自发光之间进行选择
移除内容
- GeckoLib的自发光纹理不再支持mcmeta生成。请改用发光遮罩图像(反正也更简单)
NeoForge 1.21.5
on 2026 Apr 25GeckoLib v5.0-alpha1
注意
- 自
alpha1起,发光遮罩(glowmasks)和带动画的纹理尚不可用。此问题将很快修复 :) - 此外,我正在研究骨骼级渲染处理的替代方案,因为 Mojang 已使原先的动态渲染器不再实用。
- 如果你使用了上述任何功能,请等待 5.0 正式版发布,谢谢。
通用变更
- 更新至 Minecraft 1.21.5
- 将更新日志转换为 Markdown 格式
内部变更
- 重写了资源加载系统,以正确支持并行化资源处理,避免过度占用 I/O
- 使 GeoArmorRenderer 从 HumanoidArmorLayer#setPartVisibility 继承骨骼可见性,以更好地兼容第三方模组
- 默认将 boneResetTime 设为 5 游戏刻,并在重置时间设为 0 时自动完成重置。这可防止不可避免的部分游戏刻骨骼重置
- 修复了对同步动画物品中键点击时,在使用触发动画或同步数据时产生冲突的问题 (#681)
- 现在使用动画进行完整旋转的骨骼在重置时不再反向旋转,从而使旋转动画更流畅
- 同步动画物品现在彼此之间可以正常堆叠
- 为动画数据添加内存压缩。大型整合包的内存占用应有所降低
- 为 Molang 中 Actor 变量的无效使用添加了安全检查
- GeckoLib 实体渲染现已自动兼容 NeoForge 的 EntityRenderState 修改器
- 覆盖了原版对实体名称牌渲染距离 64 方块的硬性上限。你现在最多可设置为 256 方块
- 修复了 GeoBones 的世界空间定位未考虑部分游戏刻插值的问题
- 修复了非生物实体渲染时未正确处理 Y 轴旋转的问题
- 修复了死亡旋转在部分游戏刻下重复叠加的问题
- 修复了
GeoObjectRenderer中 BufferSource 未被正确设为非空的问题 - 修复了
GeoEntityRenderer在重新渲染时重复应用其他 PoseStack 操作的问题 - 将大量渲染值创建逻辑移回原版实现,以提升与原版及其他模组的兼容性
- 移除了
AnimationProcessor中多个冗余的方法参数 - 将
AnimationController#process重命名为AnimationController#startTick - 修复了
DefaultAnimations#genericFlyController在不移动时无法停止的问题 - 将 AnimationState 的处理提前至渲染之前,以优化 Molang 查询的填充
- 修复了
AnimationController的动画速度可能在单次渲染过程中被多次重新计算,导致动画处理不一致的问题 - 将
Keyframes重命名为KeyframeMarkers - GeckoLib 现在会预先确定每帧渲染所使用的 Molang 查询,并预先计算所有相关值并缓存,从而支持更复杂的动画
- 将
AnimatableManager及其派生类移至不同包中 - 将
AnimationController、AnimationProcessor、AnimationState移至不同包中 - 将
AutoPlayingSoundKeyframeHandler移至不同包中 - 移除了
AnimationPointQueue - 将骨骼级渲染层的渲染移至其余渲染完成之后执行
- 调整了
DyeableGeoArmorRenderer的工作方式,使其更加准确 - 修复了多个 GeoRenderEvent 类中的 Javadoc 错误
API 变更
- 所有 GeckoLib 资源现位于 /assets/geckolib/ 下
- 动画文件位于
/assets/<modid>/geckolib/animations/ - 模型文件位于
/assets/<modid>/geckolib/models/
- 动画文件位于
- 所有 GeoRenderer 现在基于 GeoRenderStates 运行,而非传递 animatable 对象。Mojang 已明确表示这是我们必须采用的方式 :(
- 移除了
GeoRenderer#getAnimatable - 从 GeoRenderer 的方法中移除了多个参数,默认移至
GeoRenderState - 移除了
GeoEntityRenderer#isShaking
- 移除了
AnimationState现在是用于在处理过程中传递动画状态的内部类。用户现在应使用AnimationTest,其功能相同- GeoRenderer 扩展现在接受第二个泛型类型,即 RenderState 类型(以及 GeoRenderState)
- GeoModel 的模型/动画引用不再需要文件路径前缀或后缀(例如,返回的模型资源中无需包含
geo/或.geo.json) DataTicket现在必须通过工厂方法创建,以确保身份一致性SerializableDataTicket不再需要注册,但仍必须在模组构造阶段创建GeoRenderer中所有渲染方法的参数顺序已调整:PoseStack 和 RenderState(原 Animatable)位置互换- Molang 变量现在均为基于当前渲染通道的
AnimationState运行的函数 AnimationController不再需要传入 animatable 对象- 拆分了
AutoGlowingGeoLayer中纹理获取与使用逻辑,以便模组按需覆盖纹理 - 所有
DefaultAnimations辅助方法现在默认使用 0 游戏刻过渡时间,以保持一致性与清晰性 - 将 FormatVersion 转换为字符串,并采用更灵活的系统
- 引入基于身份的查找机制用于同步单例 animatable 对象,以期消除类重复冲突
- 将
AnimationState#getData标记为可空,以避免混淆 - 将
EasingType中的 easingType 参数标记为可空,以避免混淆 - 清理了 EasingType 的 Javadoc
GeoReplacedEntityRenderer现在在尝试将实体作为 animatable 插入时会显式崩溃,以防止内存泄漏- 使
GeoReplacedEntityRenderer与GeoEntityRenderer更加一致,以确保准确性 CustomInstructionKeyframeEvent、SoundKeyframeEvent和ParticleKeyframeEvent已合并为KeyFrameEventCustomInstructionKeyframeHandler、SoundKeyframeHandler和ParticleKeyframeHandler已合并为KeyframeEventHandler- 将
KeyFrameEvent转换为 record 类型 - 将
Calculation转换为 record 类型 MolangQueries再次变为环境无关(side-agnostic)- GeoRenderer 的多个部分现在额外提供关联对象用于处理(ItemStack、替换实体等)
- 将
prepLivingEntityRenderState移入GeoEntityRenderer,以便必要时可被覆写 - 移除了
EntityModelData - 移除了
DeferredGeoRenderProvider - 移除了
InternalUtil - 移除了
FileLoader - 移除了
Color,现已完全由net.minecraft.util.ARGB取代 - 从各类
GeoModelgetter 方法中移除了GeoRenderer参数,因其已不再需要 - 重命名了
GeoArmorRenderer中的骨骼变量,以避免与HumanoidArmorModel的字段名冲突 - 将
GeckoLibCache重命名为GeckoLibResources - 将
AnimatableManager#setData重命名为AnimatableManager#setAnimatableData(及其对应的 getter) - 将
AutoGlowingTexture#getEmissiveResource重命名为#getOrCreateEmissiveTexture以提高清晰度 - 将
GeoEntityRenderState移至GeoRenderState GeckoLibUtil中的各类单例注册辅助方法已移至新的SyncedSingletonAnimatableCache,相关方法的层级作用域也已缩小,以提高清晰度与安全性- 将
GeoRenderLayer#renderForBone重命名为#createPerBoneRender,现在要求你返回一个稍后执行的 Runnable 操作 - 移除了
DynamicGeoBlockRenderer、DynamicGeoEntityRenderer和DynamicGeoItemRenderer。请改用渲染层处理骨骼特定逻辑。我将研究为此创建辅助类或其他替代方案 - 改进了各类
GeoRenderEvent的泛型类型,使其更具实用性
新增内容
- 为
SingletonGeoAnimatable添加了stopTriggeredAnimation - 添加了
triggerArmorAnim用于触发护甲动画 (#433) - 添加了
query.controller_speedMolang 查询 - 添加了
query.limb_swingMolang 查询 - 添加了
query.limb_swing_amountMolang 查询 - 为基岩版风格动画 JSON 添加了 Catmull-Rom(平滑)缓动原生支持(感谢 Zigy 的初始工作)
- 带动画的纹理现已支持发光遮罩 (#456)
- 在
GeoRenderer中添加了#setBonesVisible辅助方法,便于使用 - 添加了
AnimationController#isTriggeredAnimation用于检查当前触发的动画 - 添加了
AnimationController#setAnimationState用于在必要时直接设置控制器状态 - 为每种渲染器类型添加了
CompileRenderState事件钩子
Forge 1.21.5
on 2026 Apr 25GeckoLib v5.0-alpha1
注意
- 自
alpha1起,发光遮罩(glowmasks)和动画纹理暂不可用。此问题将很快修复 :) - 此外,我正在研究骨骼级渲染处理的替代方案,因为 Mojang 已使之前的动态渲染器不再实用。
- 如果你使用了上述任何功能,请等待 5.0 正式版发布,谢谢。
通用变更
- 更新至 Minecraft 1.21.5
- 将更新日志转换为 Markdown 格式
内部变更
- 重写了资源加载系统,以正确支持并行化资源处理,避免对 I/O 造成过大压力
- 使
GeoArmorRenderer继承自HumanoidArmorLayer#setPartVisibility的骨骼可见性逻辑,以更好地兼容第三方模组 - 默认将
boneResetTime设为 5 刻,并在重置刻数为 0 时自动完成重置,避免无法避免的部分刻骨骼重置问题 - 修复了中键点击同步动画物品时,在使用触发式动画或同步数据时产生冲突的问题(#681)
- 现在使用动画进行完整旋转的骨骼在重置时将不再反向旋转,从而实现更干净的旋转动画
- 同步动画物品现在可以相互堆叠
- 为动画数据添加内存压缩,大型整合包应能减少内存占用
- 为 Molang 中无效使用 Actor 变量的情况添加安全检查
- GeckoLib 实体渲染现已自动兼容 NeoForge 的
EntityRenderState修改器 - 覆盖了原版对实体命名牌渲染距离 64 格的硬性上限,现在最大可支持 256 格
- 修复了
GeoBone的世界空间定位未考虑部分刻线性插值(lerping)的问题 - 修复了非生物实体渲染时未考虑其 Y 轴旋转的问题
- 修复了死亡旋转在部分刻(partialTick)下重复叠加的问题
- 修复了
GeoObjectRenderer中BufferSource未被正确设为非空的问题 - 修复了
GeoEntityRenderer在重新渲染时重复应用其他PoseStack操作的问题 - 将大量渲染值的创建逻辑移回原版,以提升与原版及其他模组的兼容性
- 移除了
AnimationProcessor中多个冗余的方法参数 - 将
AnimationController#process重命名为AnimationController#startTick - 修复了
DefaultAnimations#genericFlyController在不移动时无法停止的问题 - 将
AnimationState的处理提前至渲染之前,以优化 Molang 查询的填充 - 修复了
AnimationController的动画速度可能在单次渲染过程中被多次重新计算,导致动画处理不一致的问题 - 将
Keyframes重命名为KeyframeMarkers - GeckoLib 现在会预先确定每一渲染帧将使用的 Molang 查询,并预先计算所有相关值并缓存,以支持复杂动画
- 将
AnimatableManager及其派生类移至不同包中 - 将
AnimationController、AnimationProcessor、AnimationState移至不同包中 - 将
AutoPlayingSoundKeyframeHandler移至不同包中 - 移除了
AnimationPointQueue - 将骨骼级渲染层的渲染移至其余渲染完成后执行
- 修改了
DyeableGeoArmorRenderer的工作方式,使其更加准确 - 修复了多个
GeoRenderEvent类中的 Javadoc 错误
API 变更
- 所有 GeckoLib 资源现存放于
/assets/geckolib/目录下- 动画文件存放于
/assets/<modid>/geckolib/animations/ - 模型文件存放于
/assets/<modid>/geckolib/models/
- 动画文件存放于
- 所有
GeoRenderer现在基于GeoRenderState运行,而非传递 animatable 对象。Mojang 已明确表示这是必须采用的方式 :(- 移除了
GeoRenderer#getAnimatable - 从
GeoRenderer的多个方法中移除了若干参数,默认移至GeoRenderState - 移除了
GeoEntityRenderer#isShaking
- 移除了
AnimationState现为内部类,用于在处理过程中携带动画状态。用户应改用AnimationTest,其功能相同GeoRenderer扩展类现在接受第二个泛型类型,即渲染状态类型(RenderState和GeoRenderState)GeoModel的模型/动画引用不再需要文件路径前缀或后缀(例如:返回的模型资源无需包含geo/或.geo.json)DataTicket现需通过工厂方法创建,以确保身份一致性SerializableDataTicket不再需要注册,但仍须在模组构造阶段创建GeoRenderer中所有渲染方法的参数顺序已调整:PoseStack与RenderState(原为Animatable)位置互换- Molang 变量现均为作用于当前渲染帧
AnimationState的函数 AnimationController不再需要传入 animatable 对象- 拆分了
AutoGlowingGeoLayer中的纹理获取与使用逻辑,以便模组按需覆盖纹理 - 所有
DefaultAnimations辅助方法现默认使用 0 刻过渡时间,以保证一致性与清晰性 - 将
FormatVersion转换为字符串,并改为更灵活的系统 - 引入基于身份的查找机制用于同步单例 animatable,以期消除类重复导致的冲突
- 将
AnimationState#getData标记为可空,避免混淆 - 将
EasingType中的easingType参数标记为可空,避免混淆 - 清理了
EasingType的 Javadoc GeoReplacedEntityRenderer现在在尝试将实体作为 animatable 插入时会显式崩溃,以防止内存泄漏- 使
GeoReplacedEntityRenderer与GeoEntityRenderer更加一致,确保准确性 - 将
CustomInstructionKeyframeEvent、SoundKeyframeEvent和ParticleKeyframeEvent合并为KeyFrameEvent - 将
CustomInstructionKeyframeHandler、SoundKeyframeHandler和ParticleKeyframeHandler合并为KeyframeEventHandler - 将
KeyFrameEvent转换为 record 类型 - 将
Calculation转换为 record 类型 MolangQueries再次变为环境无关(side-agnostic)GeoRenderer的多个部分现在额外提供关联对象用于处理(如ItemStack、替换实体等)- 将
prepLivingEntityRenderState移入GeoEntityRenderer,以便按需重写 - 移除了
EntityModelData - 移除了
DeferredGeoRenderProvider - 移除了
InternalUtil - 移除了
FileLoader - 移除了
Color,现已完全由net.minecraft.util.ARGB取代 - 从多个
GeoModel获取方法中移除了GeoRenderer参数,因其已不再需要 - 将
GeoArmorRenderer中的骨骼变量重命名,以避免与HumanoidArmorModel的字段名冲突 - 将
GeckoLibCache重命名为GeckoLibResources - 将
AnimatableManager#setData重命名为AnimatableManager#setAnimatableData(及其对应的 getter) - 将
AutoGlowingTexture#getEmissiveResource重命名为#getOrCreateEmissiveTexture,以更清晰表达其用途 - 将
GeoEntityRenderState移至GeoRenderState GeckoLibUtil中的各种单例注册辅助方法现已移至新的SyncedSingletonAnimatableCache,相关方法的作用域层级也已缩小,以提高清晰度与安全性- 将
GeoRenderLayer#renderForBone重命名为#createPerBoneRender,现需返回一个Runnable供稍后执行 - 移除了
DynamicGeoBlockRenderer、DynamicGeoEntityRenderer和DynamicGeoItemRenderer。请改用渲染层处理骨骼级逻辑。我将考虑为此创建辅助类或替代方案 - 改进了各类
GeoRenderEvent的泛型类型,使其更具实用性
新增内容
- 为
SingletonGeoAnimatable添加stopTriggeredAnimation方法 - 添加
triggerArmorAnim用于触发射甲动画(#433) - 添加
query.controller_speedMolang 查询 - 添加
query.limb_swingMolang 查询 - 添加
query.limb_swing_amountMolang 查询 - 为 Bedrock 风格动画 JSON 添加原生 Catmull-Rom(平滑)缓动支持(感谢 Zigy 的初步工作)
- 动画纹理现已支持发光遮罩(#456)
- 在
GeoRenderer中添加便捷方法#setBonesVisible - 添加
AnimationController#isTriggeredAnimation以检查当前触发的动画 - 添加
AnimationController#setAnimationState以在必要时直接设置控制器状态 - 为每种渲染器类型添加
CompileRenderState事件钩子
Forge 1.20.1
on 2026 Apr 25v4.7.1.2
Fabric:
- 将 Redirect mixins 移至 WrapOperations,以避免与其他模组发生冲突
Forge:
- 回滚 4.7.1 版本中对物品堆叠数量的更改,因为 Forge 不包含 MixinExtras,而强行添加会导致偶尔出现冲突解决的问题
Forge 1.20.1
on 2026 Apr 25v4.7.1.1
- 修复了一些错误的物品堆叠比较,这些问题曾导致卡顿/异常(#689)
NeoForge 1.21.1
on 2026 Apr 25Forge 1.21.1
on 2026 Apr 25v4.7.5.1
- 移除样条插值中的帧外推
NeoForge 1.21.1
on 2026 Apr 25Forge 1.21.1
on 2026 Apr 25v4.7.5
- 重新处理无效的动画关键帧。优雅地成功处理,而非直接失败
- 新增
query.controller_speedMolang 查询 - 移除 GeoModel 中
getTextureResource和getModelResource的 forRemoval 弃用标记
NeoForge 1.21.1
on 2026 Apr 25v4.7.4.1
- 修复了某些非标准动画 JSON 文件的加载问题
- 修复了单例可动画对象的停止触发动画大多无法正常工作的问题
- 修复了仅部分发光的动态发光纹理加载不正确的问题
Forge 1.21.1
on 2026 Apr 25v4.7.4.1
- 修复了某些非标准动画 JSON 文件的加载问题
- 修复了单例可动画对象的停止触发动画大多无法正常工作的问题
- 修复了仅部分发光的动态发光纹理无法正确加载的问题
NeoForge 1.21.1
on 2026 Apr 25v4.7.4
- 为基岩版风格的动画 JSON 添加了原生支持的 Catmull-Rom(平滑)缓动效果(感谢 Zigy 的初始工作)
- 使 GeoArmorRenderer 从 HumanoidArmorLayer#setPartVisibility 继承骨骼可见性,以更好地兼容第三方模组
- 默认将 boneResetTime 设为 5 刻,并在重置刻数为 0 时自动补全。这可避免不可避免的部分刻数骨骼重置
- 引入基于身份标识的查找机制用于同步的单例动画对象,希望能消除类重复导致的冲突
- 修复了中键点击同步动画物品时,在使用触发式动画或同步数据时引发冲突的问题 (#681)
- 同步动画物品现在不再阻止彼此堆叠
- 现在使用动画进行完整旋转的骨骼在重置时应不再反向旋转,从而实现更流畅的旋转动画
- 将 AnimationState#getData 标记为可空,以避免混淆
- 新增
triggerArmorAnim用于触发护甲动画 (#433) - 动画纹理现已支持发光遮罩 (#456)
- 将 EasingType 中的 easingType 参数标记为可空,以避免混淆
- 为动画数据添加内存压缩功能,大型整合包应能减少内存占用
Forge 1.21.1
on 2026 Apr 25v4.7.4
- 为基岩版风格的动画 JSON 添加了对 Catmull-Rom(平滑)缓动的原生支持(感谢 Zigy 的初始工作)
- 使 GeoArmorRenderer 从 HumanoidArmorLayer#setPartVisibility 继承骨骼可见性,以更好地兼容第三方模组
- 将默认的 boneResetTime 设为 5 刻,并在重置刻时间为 0 时自动完成重置。这可避免无法规避的部分刻骨骼重置问题
- 引入基于身份标识的查找机制用于同步的单例可动画对象,希望能消除类重复导致的冲突
- 修复了对同步可动画物品中键点击时,在使用触发式动画或同步数据时引发冲突的问题(#681)
- 同步可动画物品不再互相阻止堆叠
- 现在使用动画进行完整旋转的骨骼在重置时应不再反向旋转,从而实现更干净的旋转动画
- 将 AnimationState#getData 标记为可空,以避免混淆
- 新增
triggerArmorAnim用于触发护甲动画(#433) - 动画纹理现已支持发光遮罩(#456)
- 将 EasingType 中的 easingType 参数标记为可空,以避免混淆
- 为动画数据添加内存压缩。大型整合包的内存占用应有所降低
NeoForge 1.21.4
on 2026 Apr 25v4.8.4
- 修复了 NeoForge 在 .84 版本中引入的崩溃问题
Forge 1.21.4
on 2026 Apr 25v4.8.4
- 修复了 .84 版本中 NeoForge 引入的崩溃问题
NeoForge 1.21.4
on 2026 Apr 25v4.8.3
- 将资源加载移至加载器特定的处理逻辑中。修复了在较新 NeoForge 版本上崩溃的问题
Forge 1.21.4
on 2026 Apr 25v4.8.3
- 将资源加载移至加载器特定的处理逻辑中。修复了在较新 NeoForge 构建版本中的崩溃问题
NeoForge 1.21.4
on 2026 Apr 25Forge 1.21.4
on 2026 Apr 25v4.8.2
- 再次修复 Forge 上崩溃的 Mixin 问题
NeoForge 1.21.1
on 2026 Apr 25v4.7.3
- 修复了实体速度主要由 x 坐标速度决定的问题
getTextureResource和getModelResource现在会接收渲染器,以支持上下文相关的变体



