Description
When Lootr attempts to replace a vanilla DecoratedPot with its own LootrDecoratedPotBlock during chunk post-processing, Sable intercepts the setBlockState call to compute physics collision data. During that computation, RapierVoxelColliderBakery calls getCollisionShape() on the new block, which triggers LootrDecoratedPotBlock.getCollisionState(), which calls LevelAccelerator.getBlockEntity(), which triggers another setBlockState event, which triggers Sable's physics handler again causing a java.lang.IllegalStateException: Recursive update inside ConcurrentHashMap.computeIfAbsent.
Result: Chunk [2, -27] fails to load, the server falls 100+ ticks behind, mob AI freezes, and a chunk IO error report is generated.
Game Log
https://mclo.gs/AofuWWb
Description
When Lootr attempts to replace a vanilla DecoratedPot with its own LootrDecoratedPotBlock during chunk post-processing, Sable intercepts the setBlockState call to compute physics collision data. During that computation, RapierVoxelColliderBakery calls getCollisionShape() on the new block, which triggers LootrDecoratedPotBlock.getCollisionState(), which calls LevelAccelerator.getBlockEntity(), which triggers another setBlockState event, which triggers Sable's physics handler again causing a java.lang.IllegalStateException: Recursive update inside ConcurrentHashMap.computeIfAbsent.
Result: Chunk [2, -27] fails to load, the server falls 100+ ticks behind, mob AI freezes, and a chunk IO error report is generated.
Game Log
https://mclo.gs/AofuWWb