states/StateSystem.cs
using Sandbox;
using Sandbox.Diagnostics;

namespace Facepunch.BombRoyale;

public static class StateSystem
{
	public static BaseState Active { get; internal set; }

	public static T Set<T>() where T : BaseState, new()
	{
		Assert.True( Networking.IsHost );

		if ( Active.IsValid() )
		{
			Active.GameObject.Destroy();
		}

		var go = new GameObject();
		var state = go.Components.Create<T>();
		go.Name = "State";
		go.Network.SetOrphanedMode( NetworkOrphaned.Host );
		go.NetworkSpawn();

		return state;
	}
}