Skip to content

Sub-level unrecoverable after crash during autosave — index pointer persists but payload keeps changing on every save #1438

Description

@Big-fat-Penguin-bbop

Description

Sable version: 2.0.3
Minecraft: 1.21.1
NeoForge: 21.1.234
Environment: Singleplayer (Testing world)
Mods present: Sable Companion 1.6.0, Sable Cleanup Tools 0.3.0, Create Aeronautics, Create 6.0.10

What happened
World crashed during autosave with:
java.lang.RuntimeException: Body has been removed
at RapierPhysicsPipeline.assertBodyValid
at RapierPhysicsPipeline.getLinearVelocity
at RigidBodyHandle.getLinearVelocity
at SubLevelSerializer.serialize
at SubLevelSerializer.toData
at SubLevelHoldingChunkMap.moveAndSaveSubLevel
(full crash report attached)

On restart, this error appeared:
[Server thread/ERROR]: Couldn't find sub-level at index 1 in storage file for chunk [12, -3]
[Server thread/ERROR]: Due to a failed storage sub-level data load, we can't add a holding sub-level for pointer local->[storageIndex=0, subLevelIndex=1]. This will cause issues later down the line.
[Render thread/ERROR]: Received a sub-level movement packet for a non-existent sub-level (x7)

What I've confirmed since

  • The sub-level (an airship) does not appear in /sablecleanup or /sable storage find_all_sub_levels — it's not among the 8 successfully-loaded sub-levels in this dimension.
  • In the region file for r_0_-1 (matches chunk [12,-3]), the index-table entry for slot 1 is present and stable across multiple saves (same pointer value each time).
  • However, the actual payload bytes at that slot's location DO change between saves — meaning something is re-attempting to write to that slot on every autosave, but it can never be read back successfully.
  • No backup mod was installed, and no CurseForge instance backup exists from before the crash, so the pre-crash version of this data is likely already overwritten.

Question
Is there a known cause for "Body has been removed" during SubLevelSerializer.serialize, and is there any way to recover or at least cleanly discard a permanently-corrupt slot like this so it stops attempting to rewrite it every save? Happy to provide the raw region file if useful for debugging.

crash-2026-08-04_22.18.19-server.txt

Game Log

https://mclo.gs/hIxfwaL

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions