public static World AddWorld( [CanBeNull] Player player, [NotNull] string name, [CanBeNull] Map map, bool neverUnload )
{
if ( name == null )
throw new ArgumentNullException( "name" );
if ( !World.IsValidName( name ) ) {
throw new WorldOpException( name, WorldOpExceptionCode.InvalidWorldName );
}
lock ( SyncRoot ) {
if ( WorldIndex.ContainsKey( name.ToLower() ) ) {
throw new WorldOpException( name, WorldOpExceptionCode.DuplicateWorldName );
}
if ( RaiseWorldCreatingEvent( player, name, map ) ) {
throw new WorldOpException( name, WorldOpExceptionCode.Cancelled );
}
World newWorld = new World( name ) {
Map = map
};
if ( neverUnload ) {
newWorld.NeverUnload = true;
}
if ( map != null ) {
newWorld.SaveMap();
}
WorldIndex.Add( name.ToLower(), newWorld );
UpdateWorldList();
RaiseWorldCreatedEvent( player, newWorld );
return newWorld;
}
}