Skip to content

AE2 and sable crash when saving world #1222

Open

Description

@AtomicMagnet

Context

when you grab a sub level platform and put a powered AE2 setup on it the game crashes when saving the world, causing a "thread caused non-unwinding panic. aborting.", message in logs, followed by a core dump message and exit code 134

EDIT: ive done more testing, crash is directly related to Sable, game still crashes with Create: Aeronautics and Create removed,

Image

versions and mods:
sable: 2.0.3
guideme: 21.1.16
AE2: 19.2.17

Crash Report

it didn't make a crash report

Activity

  1. changed the title [-]AE2 and sable incompatability[/-] [+]AE2 and sable crash when saving world[/+] on Jun 26, 2026
  2. Water-Moon commented on Jul 21, 2026

    @Water-Moon

    If it helps, here's my view on this issue while I attempted to fix a broken save.

    I have managed to retrieve the exact stacktrace before this crash:

    Dumped Call Stack
    TRANSFORMER/sable_rapier@1.21.1-2.0.3/dev.ryanhcode.sable.physics.impl.rapier.Rapier3D.getPose(native)
    TRANSFORMER/sable_rapier@1.21.1-2.0.3/dev.ryanhcode.sable.physics.impl.rapier.RapierPhysicsPipeline.readPose(RapierPhysicsPipeline.java:304)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.system.SubLevelPhysicsSystem.updatePose(SubLevelPhysicsSystem.java:313)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.api.physics.mass.MergedMassTracker.uploadData(MergedMassTracker.java:122)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.api.physics.mass.MergedMassTracker.update(MergedMassTracker.java:103)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.ServerSubLevel.updateMergedMassData(ServerSubLevel.java:265)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.system.SubLevelPhysicsSystem.updateMassDataFromBlockChange(SubLevelPhysicsSystem.java:539)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.system.SubLevelPhysicsSystem.handleBlockChange(SubLevelPhysicsSystem.java:471)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.SableCommonEvents.handleBlockChange(SableCommonEvents.java:91)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.world.level.chunk.LevelChunk.wrapOperation$zlm000$sable$setBlockState(LevelChunk.java:1802)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.world.level.chunk.LevelChunk.setBlockState(LevelChunk.java:249)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.world.level.Level.setBlock(Level.java:236)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.world.level.Level.setBlock(Level.java:212)
    TRANSFORMER/ae2@19.2.17/appeng.blockentity.crafting.CraftingBlockEntity.updateSubType(CraftingBlockEntity.java:147)
    TRANSFORMER/ae2@19.2.17/appeng.blockentity.crafting.CraftingBlockEntity.onMainNodeStateChanged(CraftingBlockEntity.java:217)
    TRANSFORMER/ae2@19.2.17/appeng.me.helpers.BlockEntityNodeListener.onStateChanged(BlockEntityNodeListener.java:38)
    TRANSFORMER/ae2@19.2.17/appeng.me.helpers.BlockEntityNodeListener.onStateChanged(BlockEntityNodeListener.java:28)
    TRANSFORMER/ae2@19.2.17/appeng.me.GridNode.lambda$notifyStatusChange$0(GridNode.java:173)
    TRANSFORMER/ae2@19.2.17/appeng.me.GridNode.callListener(GridNode.java:166)
    TRANSFORMER/ae2@19.2.17/appeng.me.GridNode.notifyStatusChange(GridNode.java:173)
    TRANSFORMER/ae2@19.2.17/appeng.me.GridNode.setGrid(GridNode.java:338)
    TRANSFORMER/ae2@19.2.17/appeng.me.Grid.create(Grid.java:90)
    TRANSFORMER/ae2@19.2.17/appeng.me.GridNode.validateGrid(GridNode.java:208)
    TRANSFORMER/ae2@19.2.17/appeng.me.GridNode.destroy(GridNode.java:381)
    TRANSFORMER/ae2@19.2.17/appeng.me.ManagedGridNode.destroy(ManagedGridNode.java:143)
    TRANSFORMER/ae2@19.2.17/appeng.blockentity.grid.AENetworkedPoweredBlockEntity.onChunkUnloaded(AENetworkedPoweredBlockEntity.java:95)
    MC-BOOTSTRAP/it.unimi.dsi.fastutil@8.5.12/it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap$1.forEach(Object2ObjectOpenHashMap.java:1188)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.world.level.chunk.LevelChunk.clearAllBlockEntities(LevelChunk.java:617)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.level.ServerLevel.unload(ServerLevel.java:954)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.plot.ServerLevelPlot.onRemoveChunkHolder(ServerLevelPlot.java:161)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.plot.LevelPlot.onRemove(LevelPlot.java:370)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.SubLevel.onRemove(SubLevel.java:183)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.api.sublevel.SubLevelContainer.removeSubLevel(SubLevelContainer.java:488)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.api.sublevel.ServerSubLevelContainer.removeSubLevel(ServerSubLevelContainer.java:140)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.api.sublevel.SubLevelContainer.removeSubLevel(SubLevelContainer.java:520)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.storage.holding.SubLevelHoldingChunkMap.processUnload(SubLevelHoldingChunkMap.java:192)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.storage.holding.SubLevelHoldingChunkMap.processUnloads(SubLevelHoldingChunkMap.java:584)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.storage.holding.SubLevelHoldingChunkMap.processChanges(SubLevelHoldingChunkMap.java:533)
    TRANSFORMER/sable@2.0.3/dev.ryanhcode.sable.sublevel.storage.holding.SubLevelHoldingChunkMap.saveAll(SubLevelHoldingChunkMap.java:209)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.level.ServerLevel.handler$zlo000$sable$saveSubLevels(ServerLevel.java:6511)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.level.ServerLevel.save(ServerLevel.java:814)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.MinecraftServer.saveAllChunks(MinecraftServer.java:551)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.MinecraftServer.stopServer(MinecraftServer.java:622)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.client.server.IntegratedServer.stopServer(IntegratedServer.java:221)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:742)
    TRANSFORMER/minecraft@1.21.1/net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:267)
    java.base/java.lang.Thread.run(Unknown Source)
    

    From this and based on the content in the native lib

    let rb: &RigidBody =
    &sim_data.rigid_body_set[sable_data.rigid_bodies[&(id as LevelColliderID)]];

    Seems like what happened is that:

    • sub level got unloaded
    • AE2 network attempts to notify other components
    • Some AE2 block would use setBlock to update neighboring block's state, for example this logic
    • That would trigger a sub level update back in sable
    • But at this time that sub level is already being removed, so the ID don't really exist in rapier's rigid body list
    • no entry found for key -> panic

    Therefore based on my limited understanding, one possible fix would be to disable or defer any sub level property update (such as mass, pose, etc.) when it is about to be unloaded even if something happens to them. Or alternatively, the sub level can be fully settled first before it's removed from the rapier engine.

    Hopefully this would help speed up any potential fix. Also a big thank you to the dev team for creating such a great mod

    Edit: it seems an existing pull request, #1093 , can potentially fix this issue because they properly mark sublevels as removed and thus prevented these updates during removal.

  3. noobte commented on Oct 16, 2026

    @noobte

    I have found through many crashes that it seems to be caused by (but probably not limited to) the ME IO Port block

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

type: crashSomething crashes my game

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions