Version
- Automobility: 0.5.0.h+1.21.1-neoforge
- Minecraft: 1.21.1 / NeoForge 21.1.235
- Triggering mod: Xaero's World Map 1.43.0 (via xaerolib 1.6.0)
Description
NeoForgeSlopeBakedModel.getQuads(...) resolves the frame sprite from
data.get(FRAME_SPRITE). FRAME_SPRITE is only ever populated in
getModelData(). When another mod calls getQuads with an empty/underived
ModelData (Xaero's World Map does this to compute block translucency while
caching map chunks), data.get(FRAME_SPRITE) returns null. That null sprite
is passed into buildSlopeGeometry → rightTriPrism →
NeoForgeGeometryBuilder.vertex, which calls sprite.getU0() and throws NPE.
Stack trace (abridged)
Caused by: java.lang.NullPointerException: Cannot invoke
"net.minecraft.client.renderer.texture.TextureAtlasSprite.getU0()" because "sprite" is null
at automobility/...NeoForgeGeometryBuilder.vertex(NeoForgeGeometryBuilder.java:56)
at automobility/...SlopeBakedModel.rightTriPrism(SlopeBakedModel.java:143)
at automobility/...SlopeBakedModel.buildSlopeGeometry(SlopeBakedModel.java:83)
at automobility/...NeoForgeSlopeBakedModel.getQuads(NeoForgeSlopeBakedModel.java:83)
at xaerolib/...NeoForgeBlockModelUtils.getQuads(NeoForgeBlockModelUtils.java:39)
at xaerolib/...BlockTranslucencyUtils.getModelBasedTranslucency(...)
at xaeroworldmap/...MapWriter.shouldOverlay(MapWriter.java:642)
... (Xaero's World Map chunk writer)
Steps to reproduce
- Install Automobility + Xaero's World Map on NeoForge 1.21.1.
- Place any Automobility slope block in the world.
- Have the world map cache/render a chunk containing that slope block.
→ Client crashes with the NPE above.
Suggested fix
Guard against a missing frame sprite in NeoForgeSlopeBakedModel.getQuads
(and/or null-check sprite in NeoForgeGeometryBuilder.vertex), e.g. return
Collections.emptyList() when data.get(FRAME_SPRITE) == null, since a caller
without proper ModelData cannot provide the sprite anyway.
Version
Description
NeoForgeSlopeBakedModel.getQuads(...)resolves the frame sprite fromdata.get(FRAME_SPRITE).FRAME_SPRITEis only ever populated ingetModelData(). When another mod callsgetQuadswith an empty/underivedModelData(Xaero's World Map does this to compute block translucency whilecaching map chunks),
data.get(FRAME_SPRITE)returnsnull. That null spriteis passed into
buildSlopeGeometry→rightTriPrism→NeoForgeGeometryBuilder.vertex, which callssprite.getU0()and throws NPE.Stack trace (abridged)
Caused by: java.lang.NullPointerException: Cannot invoke
"net.minecraft.client.renderer.texture.TextureAtlasSprite.getU0()" because "sprite" is null
at automobility/...NeoForgeGeometryBuilder.vertex(NeoForgeGeometryBuilder.java:56)
at automobility/...SlopeBakedModel.rightTriPrism(SlopeBakedModel.java:143)
at automobility/...SlopeBakedModel.buildSlopeGeometry(SlopeBakedModel.java:83)
at automobility/...NeoForgeSlopeBakedModel.getQuads(NeoForgeSlopeBakedModel.java:83)
at xaerolib/...NeoForgeBlockModelUtils.getQuads(NeoForgeBlockModelUtils.java:39)
at xaerolib/...BlockTranslucencyUtils.getModelBasedTranslucency(...)
at xaeroworldmap/...MapWriter.shouldOverlay(MapWriter.java:642)
... (Xaero's World Map chunk writer)
Steps to reproduce
→ Client crashes with the NPE above.
Suggested fix
Guard against a missing frame sprite in
NeoForgeSlopeBakedModel.getQuads(and/or null-check
spriteinNeoForgeGeometryBuilder.vertex), e.g. returnCollections.emptyList()whendata.get(FRAME_SPRITE) == null, since a callerwithout proper ModelData cannot provide the sprite anyway.