R2.4 framework cleanup. Unhook from the Spawner's collection
on destruct. The canonical chokepoint
(Spawner.untrackSpawn) clears the back-pointer too — but
we read getSpawner() before the untrack call so the lookup
doesn't itself depend on the back-pointer being intact.
Single-op handler: no internal try/catch. The dispatcher's
outer per-handler try/catch in StuffApi.#destructCore
logs-and-continues if untrackSpawn throws. Same shape as
Containable.cleanupOnDestruct. Collection-walking handlers
(Container, Slottable, Slotted) wrap per-iteration
because one bad item must not strand the rest.
R2.4 framework cleanup. Unhook from the Spawner's collection on destruct. The canonical chokepoint (
Spawner.untrackSpawn) clears the back-pointer too — but we readgetSpawner()before the untrack call so the lookup doesn't itself depend on the back-pointer being intact.Single-op handler: no internal try/catch. The dispatcher's outer per-handler try/catch in
StuffApi.#destructCorelogs-and-continues ifuntrackSpawnthrows. Same shape asContainable.cleanupOnDestruct. Collection-walking handlers (Container,Slottable,Slotted) wrap per-iteration because one bad item must not strand the rest.