FramedBlocks icon indicating copy to clipboard operation
FramedBlocks copied to clipboard

[Bug]: Occasional StackOverflowError when entering chunks with framed blocks

Open iconmaster5326 opened this issue 9 months ago • 3 comments

Minecraft version

1.21

(Neo)Forge version

21.1.143

FramedBlocks version

10.3.1

Describe the bug

On occasion when I enter my house, which uses some framed blocks, I get a StackOverflowError.

I'm using the latest version of FTB Evolution, so it's a big modpack. Sorry I can't narrow it down any further. Some of my framed blocks are sitting out and about, but some are part of Create moving contraptions.

The part of the stack that's looping is this bit here:

	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.buildRenderTypeCache(FramedBlockModel.java:171) ~[FramedBlocks-10.3.1.jar%23743!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.getCachedRenderTypes(FramedBlockModel.java:160) ~[FramedBlocks-10.3.1.jar%23743!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.getRenderTypes(FramedBlockModel.java:149) ~[FramedBlocks-10.3.1.jar%23743!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.block.BlockCamoClientHandler.getRenderTypes(BlockCamoClientHandler.java:23) ~[FramedBlocks-10.3.1.jar%23743!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.block.BlockCamoClientHandler.getRenderTypes(BlockCamoClientHandler.java:14) ~[FramedBlocks-10.3.1.jar%23743!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.CamoContainerHelper$Client.getRenderTypes(CamoContainerHelper.java:238) ~[FramedBlocks-10.3.1.jar%23743!/:?]

How to reproduce the bug

Enter some chunks with framed blocks.

Expected behavior

The game does not crash.

Additional details

No response

Crash log

https://gist.github.com/iconmaster5326/165f985bfb8689c4753329998c3a6f26

iconmaster5326 avatar Apr 14 '25 14:04 iconmaster5326

This should not be possible under normal circumstances, so I'm going to need some more info. Please provide the crash report and, if possible, the full NBT data of the block entity at the position being rendered (the crash report should provide this info).

XFactHD avatar Apr 14 '25 22:04 XFactHD

Ah, yep, you're right, I uploaded the wrong thing there. Here's the crash report proper!

crash-2025-04-14_10.41.57-client.txt

Unfortunately, I don't see the offending block being recorded.

iconmaster5326 avatar Apr 15 '25 11:04 iconmaster5326

Hmm, that annoyingly doesn't provide any more info. It would be very useful to know where the problematic call comes from in the first place. Please try two things:

  • Try removing Sodium (almost certainly won't fix the issue but may change the info that is provided in the crash report)
  • Try adding -XX:MaxJavaStackTraceDepth=999999 as a JVM parameter in Prism in order to get the full stacktrace of the stack overflow, including the original caller

XFactHD avatar Apr 15 '25 17:04 XFactHD

After trying the second suggestion with another player experiencing the same crash, we obtained the following stacktrace. I've shortened it slightly, but it should include everything that's relevant.

net.minecraft.ReportedException: Rendering entity in world
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.entity.EntityRenderDispatcher.render$mixinextras$wrapped$71(EntityRenderDispatcher.java:190) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.entity.EntityRenderDispatcher.mixinextras$bridge$render$mixinextras$wrapped$71$72(EntityRenderDispatcher.java) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.entity.EntityRenderDispatcher.wrapMethod$epi000$transmog$wrapRender(EntityRenderDispatcher.java:5051) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.entity.EntityRenderDispatcher.render(EntityRenderDispatcher.java) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.LevelRenderer.renderEntity(LevelRenderer.java:1256) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.LevelRenderer.renderLevel(LevelRenderer.java:1034) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.renderLevel(GameRenderer.java:1271) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.render$mixinextras$wrapped$253(GameRenderer.java:1024) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.mixinextras$bridge$render$mixinextras$wrapped$253$254(GameRenderer.java) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.wrapMethod$epj000$transmog$wrapRender(GameRenderer.java:9744) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.runTick(Minecraft.java:1195) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.run(Minecraft.java:807) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at TRANSFORMER/[email protected]/net.minecraft.client.main.Main.main(Main.java:230) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:136) ~[loader-4.0.39.jar%23161!/:4.0]
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:124) ~[loader-4.0.39.jar%23161!/:4.0]
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonClientLaunchHandler.runService(CommonClientLaunchHandler.java:32) ~[loader-4.0.39.jar%23161!/:4.0]
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.lambda$launchService$4(CommonLaunchHandler.java:118) ~[loader-4.0.39.jar%23161!/:4.0]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-11.0.4.jar%23166!/:?]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-11.0.4.jar%23166!/:?]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-11.0.4.jar%23166!/:?]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:103) [modlauncher-11.0.4.jar%23166!/:?]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:74) [modlauncher-11.0.4.jar%23166!/:?]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-11.0.4.jar%23166!/:?]
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-11.0.4.jar%23166!/:?]
	at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.run(BootstrapLauncher.java:210) [bootstraplauncher-2.0.2.jar:?]
	at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:69) [bootstraplauncher-2.0.2.jar:?]
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
	at io.github.zekerzhayard.forgewrapper.installer.Main.main(Main.java:67) [ForgeWrapper-prism-2024-02-29.jar:prism-2024-02-29]
	at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:105) [NewLaunch.jar:?]
	at org.prismlauncher.EntryPoint.listen(EntryPoint.java:129) [NewLaunch.jar:?]
	at org.prismlauncher.EntryPoint.main(EntryPoint.java:70) [NewLaunch.jar:?]
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.StackOverflowError
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2084) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache.get(LocalCache.java:4012) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4922) ~[guava-32.1.2-jre.jar%23125!/:?]
	at TRANSFORMER/[email protected]/net.createmod.catnip.render.SuperByteBufferCache.get(SuperByteBufferCache.java:43) ~[Ponder-NeoForge-1.21.1-1.0.46.jar%231342!/:1.0.46]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.contraptions.render.ContraptionRenderInfo.getBuffer(ContraptionRenderInfo.java:74) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer.render(ContraptionEntityRenderer.java:67) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.trains.entity.CarriageContraptionEntityRenderer.render(CarriageContraptionEntityRenderer.java:41) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.trains.entity.CarriageContraptionEntityRenderer.render(CarriageContraptionEntityRenderer.java:18) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.entity.EntityRenderDispatcher.render$mixinextras$wrapped$71(EntityRenderDispatcher.java:159) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]
	... 34 more
Caused by: java.lang.StackOverflowError
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.block.BlockCamoClientHandler.getRenderTypes(BlockCamoClientHandler.java:14) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.CamoContainerHelper$Client.getRenderTypes(CamoContainerHelper.java:238) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.buildRenderTypeCache(FramedBlockModel.java:171) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.getCachedRenderTypes(FramedBlockModel.java:160) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.getRenderTypes(FramedBlockModel.java:149) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.block.BlockCamoClientHandler.getRenderTypes(BlockCamoClientHandler.java:23) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.block.BlockCamoClientHandler.getRenderTypes(BlockCamoClientHandler.java:14) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.api.camo.CamoContainerHelper$Client.getRenderTypes(CamoContainerHelper.java:238) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.buildRenderTypeCache(FramedBlockModel.java:171) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.getCachedRenderTypes(FramedBlockModel.java:160) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/xfacthd.framedblocks.client.model.FramedBlockModel.getRenderTypes(FramedBlockModel.java:149) ~[FramedBlocks-10.3.1.jar%23821!/:?]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.contraptions.render.ContraptionRenderInfo.buildStructureBuffer(ContraptionRenderInfo.java:130) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.contraptions.render.ContraptionRenderInfo.lambda$getBuffer$0(ContraptionRenderInfo.java:74) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4927) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3571) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2313) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2190) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2080) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache.get(LocalCache.java:4012) ~[guava-32.1.2-jre.jar%23125!/:?]
	at MC-BOOTSTRAP/[email protected]/com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4922) ~[guava-32.1.2-jre.jar%23125!/:?]
	at TRANSFORMER/[email protected]/net.createmod.catnip.render.SuperByteBufferCache.get(SuperByteBufferCache.java:43) ~[Ponder-NeoForge-1.21.1-1.0.46.jar%231342!/:1.0.46]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.contraptions.render.ContraptionRenderInfo.getBuffer(ContraptionRenderInfo.java:74) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.contraptions.render.ContraptionEntityRenderer.render(ContraptionEntityRenderer.java:67) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.trains.entity.CarriageContraptionEntityRenderer.render(CarriageContraptionEntityRenderer.java:41) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/com.simibubi.create.content.trains.entity.CarriageContraptionEntityRenderer.render(CarriageContraptionEntityRenderer.java:18) ~[create-1.21.1-6.0.4.jar%23757!/:6.0.4]
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.entity.EntityRenderDispatcher.render$mixinextras$wrapped$71(EntityRenderDispatcher.java:159) ~[client-1.21.1-20240808.144430-srg.jar%23652!/:?]

embeddedt avatar May 03 '25 00:05 embeddedt

Further debugging suggests the issue occurs when the framed block on the Create contraption has a framed block as its camo. I am not 100% sure how this happens. However, the BE on the Create contraption appears to be encoding the camo state as an ID, which seems dangerous if block state IDs are not synced between client and server (I forget if they are), or if this ID was persisted to disk and then reloaded after mods were updated and shuffled the IDs. On the client the ID shown in the state camo tag for the problematic block on the contraption corresponds precisely to a framed slope. I unfortunately do not have ability to attach a debugger to the server to verify this desync theory.

EDIT: I just realized ID shuffling is already a known problem (https://github.com/XFactHD/FramedBlocks/issues/617), so most likely this is just an unlucky flavor of that issue where the ID it lands on happens to be a framed block.

Image

embeddedt avatar May 03 '25 01:05 embeddedt

Thank you very much for the in-depth debugging. I did suspect that it would be something along those lines.

With respect to the safety of using blockstate IDs instead of serializing the full state: there is currently no sync or validation of the blockstate ID map (we still have an open issue for that on Neo) but registry sync causes an explicit rebuild of the state ID map so the IDs are guaranteed to match as long as the properties assigned to each block are the same on the server and client. Vanilla also uses this ID map extensively for syncing, so a broken state ID map breaks far more than just this.

With that said, I will look into backporting an optimization from my 1.21.5 branch which should implicitly fix this issue (I had started a backport of it a while ago but dropped it because it didn't actually provide any performance benefit on 1.21.1).

XFactHD avatar May 03 '25 13:05 XFactHD