
Bug: Cannot register GeckoLib GeoEntityRenderer with EntityRenderersEvent.RegisterRenderers on NeoForge
Closed this issue · 1 comments
❓ What I'm Trying To Do
I'm creating a custom entity (ForesterEntity) using NeoForge 1.21.4 / version 21.4.137, and using GeckoLib 4.7 for NeoForge 1.21.1 to add animations.
I created a custom renderer:
public class ForesterRenderer extends GeoEntityRenderer { ... }
Then I attempted to register it via EntityRenderersEvent.RegisterRenderers like so:
event.registerEntityRenderer(ModEntities.FORESTER.get(), ForesterRenderer::new);
Or with explicit casting:
event.registerEntityRenderer(ModEntities.FORESTER.get(),
(EntityRendererProvider) (context -> new ForesterRenderer(context)));
💥 The Error
I consistently get this compile-time error:
error: incompatible types: bad return type in method reference
ForesterRenderer cannot be converted to EntityRenderer<ForesterEntity,?>
Even though:
ForesterRenderer extends GeoEntityRenderer<ForesterEntity>
GeoEntityRenderer<T> implements EntityRenderer<T>
✅ What I’ve Tried
Lambda syntax with cast
Triple-casting to raw types
Wrapper/bridge class returning new ForesterRenderer(context)
Suppressing warnings
Registering during RegisterRenderers and client setup
Confirmed that the method signature of ForesterRenderer matches expected EntityRendererProvider<ForesterEntity>
📦 Versions
NeoForge: 21.4.137 (for Minecraft 1.21.4)
GeckoLib: 4.7 for NeoForge 1.21.1
Java: Java 21
Gradle: 8.5+
🧩 Suspected Issue
It appears there’s a type erasure or generic mismatch between:
NeoForge’s EntityRendererProvider<T>
GeckoLib’s GeoEntityRenderer<T> (which does implement EntityRenderer<T>)
This might be caused by NeoForge being overly strict in its generic inference or due to GeckoLib’s generic signature using additional type parameters internally.
✅ What I'm Hoping For
A way to cleanly register a GeoEntityRenderer<T> as an EntityRendererProvider<T>
Or clarification on how GeckoLib renderers are expected to be registered under NeoForge 1.21.4