SkaterMap.cs
using Skateboard.Entities;

namespace Skateboard;

public sealed class SkaterMap : MapInstance
{
	public static SkaterMap Current { get; set; }

	protected override void OnAwake()
	{
		Current = this;
	}

	[ConCmd( "map", ConVarFlags.Admin )]
	private static void Command_ChangeMap( string mapName )
	{
		Current?.ChangeMap( mapName );
	}

	[Rpc.Broadcast]
	public void ChangeMap( string mapName )
	{
		if ( !Networking.IsHost )
			return;
		MapName = mapName;

		foreach ( var pawn in Scene.GetAllComponents<Skateboard.Player.SkatePawn>() )
		{
			pawn.Respawn();
		}
	}

	protected override void OnCreateObject( GameObject go, MapLoader.ObjectEntry kv )
	{
		if ( !Game.IsPlaying )
			return;

		if ( kv.TypeName == "grind_path" )
		{
			var json = kv.GetValue<string>( "pathNodesJSON" );
			var path = go.AddComponent<GrindPathEntity>();
			path.SetPathNodesJson( json );
		}

		if ( kv.TypeName == "grind_path_node" )
		{
			go.AddComponent<GrindPathNodeEntity>();
		}
	}
}