Relics

Relics

24M Downloads

[Relics 0.11 + Ice and Fire CE 2.0] Server tick loop/crash

z2six opened this issue · 0 comments

commented

Crash type: ServerHangWatchdog — “a single server tick took 60000004.00 seconds,” i.e., the main thread froze for >60s.

Trigger chain (top of the useful stack):

JellyfishNecklaceItem$CommonEvents.onLivingHeal (Relics) → calls Entity.isInLiquid() → Level.getBlockState() (needs chunk).

This runs while the game is adding world-gen entities for a chunk, specifically Ice and Fire CE SeaSerpentEntity.readAdditionalSaveData() → setConfigurableAttributes() → updateAttributes() → LivingEntity.heal() (fires the heal event above).

The chunk system shows getChunkBlocking()/waitForTasks() calls from within chunk post-load (ServerLevel.addWorldGenChunkEntities, PersistentEntitySectionManager.addWorldGenChunkEntities), which is exactly where you don’t want another chunk/block query re-entrant on the same thread.

Mods/JARs visible in the stack that matter here:

Relics 1.21.1-0.11 (it.hurts.sskirillss.relics…JellyfishNecklaceItem.onLivingHeal).

Ice and Fire CE 2.0-beta.1 (NeoForge 1.21.1) Sea Serpent entity init & heal.

Sinytra Connector is present, but not the actor in this freeze.

Why it hangs:

crash-2025-08-27_23.44.30-server.txt

While a new/loaded Sea Serpent is being spawned/read into an ocean chunk, it heals itself. That heal fires Relics’ Jellyfish Necklace “on heal” hook, which checks whether the entity is in water by asking the world about surrounding blocks. But you’re already in the middle of loading that chunk, so the world tries to service another chunk/block request from the same thread and… the main thread parks waiting for itself. Watchdog steps in and kills the server.