StaminaForTheDefaultPlayerController.cs
using Sandbox;

namespace Maxine;

/// <summary>
/// An implementation for Facepunch's default character controller.
/// </summary>
[Title( "Maxine's Simple Stamina - Simple Stamina for default player controller" )]
public sealed class StaminaForTheDefaultPlayerController : Component
{
	[Property] private Stamina Stamina;
	[Property] private PlayerController controller;
	[Property] private float minimumSpeedBeforeConsumingStamina =  300;
	[Property] private float staminaToConsume = 1f;

	protected override void OnAwake()
	{
		base.OnAwake();
		controller ??= GetComponent<PlayerController>();
		Stamina ??= GetComponent<Stamina>();
	}

	protected override void OnUpdate()
	{
		base.OnUpdate();
		if ( controller == null ) return;
		VelocityCheck( controller.Velocity );
	}

	private void VelocityCheck( Vector3 velocity )
	{
		if ( velocity.Length >= minimumSpeedBeforeConsumingStamina && controller.IsOnGround )
		{
			Stamina.ConsumeStamina( staminaToConsume );
			if ( Stamina.CurrentStamina <= 0 )
			{
				controller.WishVelocity = velocity / 6;
				controller.GroundVelocity = -velocity / 1.25f;
			}
		}
	}
}