Structurize

Structurize

52M Downloads

minecolonies-1.1.947-1.21.1-snapshot crash when opening 'Building options'.

Closed this issue · 4 comments

commented

Is there an existing issue for this?

  • I have searched the existing issues.

Are you using the latest Structurize Version?

  • I am running the latest beta/release version of Structurize for my Minecraft version.
    I am also running the latest versions of other mods that are part of my problem.

Did you check on the Wiki? or ask on Discord?

  • I checked the MineColonies/Structurize Wiki or I asked on discord.

Minecraft Version

1.21

Structurize Version

minecolonies-1.1.947-1.21.1-snapshot.jar

MineColonies Version (if related bug)

structurize-1.0.771-1.21.1-snapshot.jar

Related Mods and their Versions

NeoForge 1.21.1-164
minecolonies-1.1.947-1.21.1-snapshot.jar
structurize-1.0.771-1.21.1-snapshot.jar

Current Behavior

Open 'Building Options', crash the game. Got quite a few mods involved.

Crash reports:
crash-2025-04-29_18.59.29-client.txt
crash-2025-04-29_19.00.17-client.txt
crash-2025-04-29_19.00.21-client.txt
crash-2025-04-29_18.49.02-client.txt
crash-2025-04-29_18.49.17-client.txt
crash-2025-04-29_18.59.25-client.txt

Crash report analysis by o4-mini-high:

  1. StackOverflowError in the component-map mixins

java.lang.StackOverflowError: Unexpected error
at ReferencePipeline.toArray(ReferencePipeline.java:622)

at PatchedDataComponentMap.handler$…restorePatch(PatchedDataComponentMap.java:609)
at DerivedComponentMap.derive(DerivedComponentMap.java:33)
at ItemStack.(ItemStack.java:265)

This infinite recursion between PatchedDataComponentMap.restorePatch(...) (from the Accessories and Lithium mixins) and DerivedComponentMap.derive(...) (from OWO) during ItemStack initialization is overflowing the stack. A nearly identical trace shows up again at 19:00:17

  1. StackOverflowError in Structurize’s BlockUtils

java.lang.StackOverflowError: Unexpected error
at BlockUtils.getItemFromBlock(BlockUtils.java:313)
at BlockUtils.getItem(BlockUtils.java:306)
at BlockUtils.getItemStackFromBlockState(BlockUtils.java:450)

Here, getItemFromBlock(...) and getItem(...) call each other without termination, causing an endless loop in Structurize’s placement handler.

  1. NullPointerException in Structurize’s Blueprint code

java.lang.NullPointerException: Cannot invoke "Level.registryAccess()" because "level" is null
at Blueprint.setRotationMirrorRelative(Blueprint.java:653)
at Blueprint.setRotationMirror(Blueprint.java:640)
at WindowBuildBuilding.lambda$updateResources$6(WindowBuildBuilding.java:315)

Whenever MineColonies’ build-window UI tries to rotate or mirror a blueprint before it’s been bound to a world level, level is null and causes an NPE. This repeats at 18:49:17, 18:59:29, and 19:00:21.

Root causes

Mixin conflict between Accessories, Lithium, and OWO on Minecraft’s DataComponentMap → infinite patch/derive loop.

Recursive bug in Structurize’s BlockUtils.getItem… methods → unbounded mutual calls.

Missing null-check in Structurize’s Blueprint.setRotationMirrorRelative when used outside a loaded world.

Expected Behavior

No crash.

Reproduction Steps

Open 'Building Options', crash the game.

Logs

https://pastebin.com/qspqmpsg

Anything else?

One log in the pastebin, the remainder attached in the 'Current Behavior' section.

Footer


Viewers

  • Add a thumbs-up to the bug report if you are also affected. This helps the bug report become more visible to the team and doesn't clutter the comments.
  • Add a comment if you have any insights or background information that isn't already part of the conversation.
commented

Related owo-lib bug report: wisp-forest/owo-lib#380

commented

Related accessories bug report: wisp-forest/accessories#276

commented

Hello, commenting on all three issues:

  1. a 2. are same - this is caused by some block not being considered solid enough - @Raycoms we might want to add StackOverflow crashhandler to the placementHandlers that require solidness, so we now what block is causing this, or this whole tag logic was mby overengineered.. a little bit.. not sure i want to go down the rabbit hole again, but to me it looks like in certain tag scenario you can get this loop:
	at TRANSFORMER/[email protected]/com.ldtteam.structurize.placement.handlers.placement.PlacementHandlers$FallingBlockPlacementHandler.getRequiredItems(PlacementHandlers.java:241)
	at TRANSFORMER/[email protected]/com.ldtteam.structurize.placement.handlers.placement.PlacementHandlers.getRequiredItemsForState(PlacementHandlers.java:1073)
	at TRANSFORMER/[email protected]/com.ldtteam.structurize.placement.handlers.placement.PlacementHandlers$FallingBlockPlacementHandler.getRequiredItems(PlacementHandlers.java:259)
	at TRANSFORMER/[email protected]/com.ldtteam.structurize.placement.handlers.placement.PlacementHandlers.getRequiredItemsForState(PlacementHandlers.java:1073)
  1. this is minecolonies error, if not caused by mixins, itself unrecoverable from structurize pov
commented

Thanks! Re. 3, should I raise an issue in the minecolonies repository?