Tags
Creators
Details
Licensed MIT
Created 4 years ago
All versions
5.0-alpha1
Release
Fabric 1.21.5last year 2,519
Compatibility
Minecraft: Java Edition
1.21.5
Platform
Fabric
Supported environments
Client-side
Client and server
Required content
Changes
GeckoLib v5.0-alpha1
NOTE
- As of
alpha1glowmasks and animated textures are not functional. This will be resolved soon :) - Additionally, I'm looking into alternate solutions for per-bone render handling since Mojang has made the previous Dynamic renderers not practical.
- If you use any of these functionalities, wait until the 5.0 full release, thanks.
General Changes
- Updated to Minecraft 1.21.5
- Converted the changelog to Markdown format
Internal Changes
- Rewrote the resource loading system to properly account for parallelised resource handling without hammering I/O
- Made GeoArmorRenderer inherit bone visibility from HumanoidArmorLayer#setPartVisibility to better work with third-party mods
- Default boneResetTime to 5-ticks, and auto-complete the reset the tick time is 0. This prevents unavoidable partial-tick bone resets
- Fixed middle-clicking on synced animatable items causing them to conflict when using triggered animations or synced data (#681)
- Bones that now use animations to do a full rotation should now no longer counter-rotate when resetting, allowing for cleaner rotation animations
- Synced animatable items no longer prevent stacking with each other
- Added memory compression to animation data. Larger modpacks should receive a reduction in memory usage
- Added a safety check for invalid use of Actor Variables in molang
- GeckoLib Entity rendering is now automatically compatible with NeoForge EntityRenderState modifiers
- Overrode vanilla's default hard-cap on entity nameplate rendering of 64 blocks. You can now go up to 256 blocks
- Fixed world-space positioning on GeoBones not accounting for partial-tick lerping
- Fixed non-living entities not having their Y-rotation accounted for in rendering
- Fixed death rotation doubling up on partialTick
- Fixed the BufferSource not being properly non-nulled in
GeoObjectRenderer - Fixed
GeoEntityRendererre-applying other PoseStack manipulations when reRendering - Moved a lot of the render value creation back to vanilla to allow for better compatibility with vanilla and other mods
- Removed a number of superfluous method parameters throughout
AnimationProcessor - Renamed
AnimationController#processtoAnimationController#startTick - Fixed the
DefaultAnimations#genericFlyControllernot stopping if not moving - Moved the AnimationState to prior to rendering to allow for optimised Molang Query population
- Fixed
AnimationController's animation speed potentially being re-computed multiple times per render pass, resulting in inconsistent animation handling - Renamed
KeyframestoKeyframeMarkers - GeckoLib now pre-determines which Molang Queries will be used for any given render frame, and pre-compute all relevant values and cache them. This allows for complex animation
- Moved
AnimatableManagerand any derivatives to a different package - Moved
AnimationController,AnimationProcessor,AnimationStateto a different package - Moved
AutoPlayingSoundKeyframeHandlerto a different package - Removed
AnimationPointQueue - Moved per-bone render layer rendering to after the rest of rendering is complete
- Changed the way
DyeableGeoArmorRendererworks to be a bit more accurate - Fixed some javadoc mistakes in the various GeoRenderEvent classes
API Changes
- All GeckoLib assets now go in /assets/geckolib/
- Animations go in
/assets/<modid>/geckolib/animations/ - Models go in
/assets/<modid>/geckolib/models/
- Animations go in
- All GeoRenderers now run on GeoRenderStates, rather than passing the animatable around. Mojang has made it clear this is the way we have to go :(
- Removed
GeoRenderer#getAnimatable - Removed various parameters from GeoRenderer's methods, moved them to
GeoRenderStateby default - Removed
GeoEntityRenderer#isShaking
- Removed
AnimationStateis now an internal class used for carrying the animation state through processing. Users should now useAnimationTest. It works functionally the same- GeoRenderers extensions now take a second generic type; that of the RenderState type (and GeoRenderState)
- GeoModel model/animation references no longer expect the file path prefix or suffix (I.E. You do not need to include
geo/or.geo.jsonin your returned model resources) DataTickets now require creation through a factory method to ensure identity-paritySerializableDataTickets no longer require registration, but must still be created during mod construct- All render methods in
GeoRendererhas had the PoseStack and RenderState (previously Animatable) swap places in the args - Molang variables are now all functions that operate on the current
AnimationStatefor the render pass AnimationControllers no longer need the animatable passed to it- Split the texture-retrieval and usage in
AutoGlowingGeoLayerso that mods can override the texture as needed - All
DefaultAnimationshelpers now default to 0-tick transition time for consistency and clarity - Converted the FormatVersion to a string and converted it to a more flexible system
- Introduced an identity-based lookup for synced singleton animatables, to hopefully eliminate class-duplication collisions
- Marked
AnimationState#getDataas nullable to avoid confusion - Marked the easingType argument in
EasingTypeas nullable to avoid confusion - Cleaned up the javadoc for EasingType
GeoReplacedEntityRenderernow explicitly crashes upon trying to insert an entity as the animatable to prevent memory leaks- Brought
GeoReplacedEntityRenderermuch more in line withGeoEntityRendererto ensure accuracy CustomInstructionKeyframeEvent,SoundKeyframeEvent, andParticleKeyframeEventhave all been consolidated intoKeyFrameEventCustomInstructionKeyframeHandler,SoundKeyframeHandler, andParticleKeyframeHandlerhave all been consolidated intoKeyframeEventHandler- Converted
KeyFrameEventto a record - Converted
Calculationto a record MolangQueriesis once again side-agnostic- Various parts of the GeoRenderers are additionally provided an associated object for handling (ItemStack, replaced entity, etc.)
- Moved
prepLivingEntityRenderStateintoGeoEntityRendererso it can be overridden if needed - Removed
EntityModelData - Removed
DeferredGeoRenderProvider - Removed
InternalUtil - Removed
FileLoader - Removed
Color. Has been fully superceded bynet.minecraft.util.ARGB - Removed the
GeoRendererparameter from the variousGeoModelgetters as it is no longer needed - Renamed the bone variables in
GeoArmorRendererto prevent collisions withHumanoidArmorModel's field names - Renamed
GeckoLibCachetoGeckoLibResources - Renamed
AnimatableManager#setDatatoAnimatableManager#setAnimatableData(and its associated getter) - Renamed
AutoGlowingTexture#getEmissiveResourceto#getOrCreateEmissiveTexturefor clarity - Moved
GeoEntityRenderStatetoGeoRenderState - The various Singleton registration helpers in
GeckoLibUtilhave been moved to the newSyncedSingletonAnimatableCache, with associated methods having their hierarchical scope reduced for clarity and safety - Renamed
GeoRenderLayer#renderForBoneto#createPerBoneRender, which now requires that you return your operation as a runnable to be run later - Removed
DynamicGeoBlockRenderer,DynamicGeoEntityRenderer, andDynamicGeoItemRenderer. Use render layers instead for bone-specific handling. I will be looking at creating a helper class or alternate option for this - Improved the generic typing for the various
GeoRenderEvents to be more useful
New Stuff
- Added
stopTriggeredAnimationtoSingletonGeoAnimatable - Added
triggerArmorAnimfor triggering armor animations (#433) - Added
query.controller_speedMolang query - Added
query.limb_swingMolang query - Added
query.limb_swing_amountMolang query - Added native support for catmull-rom (smooth) easings for bedrock-style animation jsons (Thanks for the initial work Zigy)
- Animated textures now support glowmasks (#456)
- Added helper methods in
GeoRenderer#setBonesVisiblefor ease of use - Added
AnimationController#isTriggeredAnimationto check for the currently triggered animation - Added
AnimationController#setAnimationStateto directly set the state of the controller, if necessary - Added
CompileRenderStateevent hooks for each renderer type
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:8BmcQJ2H:xJWRzLbN"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:8BmcQJ2H:xJWRzLbN"
}

