package club.mcscrims.speedhg.ability import org.bukkit.entity.Player import java.util.UUID import java.util.concurrent.ConcurrentHashMap class CooldownManager { private val cooldowns = ConcurrentHashMap>() fun startCooldown( player: Player, key: String, seconds: Int ) { val expiryTime = System.currentTimeMillis() + ( seconds * 1000L ) cooldowns.computeIfAbsent( player.uniqueId ) { ConcurrentHashMap() }[ key ] = expiryTime } fun isOnCooldown( player: Player, key: String ): Boolean { val playerCooldowns = cooldowns[player.uniqueId] ?: return false val expiryTime = playerCooldowns[key] ?: return false if ( System.currentTimeMillis() >= expiryTime ) { playerCooldowns.remove( key ) if ( playerCooldowns.isEmpty() ) cooldowns.remove( player.uniqueId ) return false } return true } fun getRemainingSeconds( player: Player, key: String ): Double { val playerCooldowns = cooldowns[player.uniqueId] ?: return 0.0 val expiryTime = playerCooldowns[key] ?: return 0.0 val remaining = ( expiryTime - System.currentTimeMillis() ) / 1000.0 return if ( remaining > 0 ) remaining else 0.0 } fun clearCooldown( player: Player, key: String ) { cooldowns[player.uniqueId]?.remove( key ) } fun clearAllCooldowns( player: Player ) { cooldowns.remove( player.uniqueId ) } fun clearAll() { cooldowns.clear() } }