package com.tiedup.remake.client.animation; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; /** * Central registry for player animation state tracking. * *

Holds per-player state maps that were previously scattered across * AnimationTickHandler. Provides a single clearAll() entry point for * world unload cleanup. */ @OnlyIn(Dist.CLIENT) public final class AnimationStateRegistry { /** Track last tied state per player */ static final Map lastTiedState = new ConcurrentHashMap<>(); /** Track last animation ID per player to avoid redundant updates */ static final Map lastAnimId = new ConcurrentHashMap<>(); private AnimationStateRegistry() {} public static Map getLastTiedState() { return lastTiedState; } public static Map getLastAnimId() { return lastAnimId; } /** * Clear all animation-related state in one call. * Called on world unload to prevent memory leaks and stale data. */ public static void clearAll() { // Animation state tracking lastTiedState.clear(); lastAnimId.clear(); // Animation managers BondageAnimationManager.clearAll(); PendingAnimationManager.clearAll(); // V2 animation context system (clearAll chains to ContextAnimationFactory.clearCache) com.tiedup.remake.client.gltf.GltfAnimationApplier.clearAll(); // Render state com.tiedup.remake.client.animation.render.DogPoseRenderHandler.clearState(); // NPC animation state com.tiedup.remake.client.animation.tick.NpcAnimationTickHandler.clearAll(); // MCA animation cache com.tiedup.remake.client.animation.tick.MCAAnimationTickCache.clear(); } }