Utilty/GameObjectExtensions.cs
using Opium;

public static partial class GameObjectExtensions
{
	public static void TakeDamage( this GameObject go, in Sandbox.DamageInfo damage )
	{
		if ( !go.IsValid() )
			return;

		var components = go.Components.GetAll<Component.IDamageable>( FindMode.EverythingInSelfAndAncestors ).ToList();

		for ( int i = components.Count - 1; i >= 0; i-- )
		{
			components[i].OnDamage( damage );
		}
	}
}