private static void Door( Player player, Command cmd )
{
string option = cmd.Next();
if ( string.IsNullOrEmpty(option) ) {
const int maxNumberOfDoorsPerPlayer = 4;
if ( DoorHandler.GetPlayerOwnedDoorsCount( player.World, player ) >= maxNumberOfDoorsPerPlayer ) {
player.Message( "You cannot place any more doors, a player can have a maximum of {0} doors per world",
maxNumberOfDoorsPerPlayer );
return;
}
Door door = new Door();
player.SelectionStart( 2, DoorAdd, door, CdDoor.Permissions );
player.Message( "Door: Place a block or type /Mark to use your location." );
return;
} else if ( option.ToLower().Equals( "remove" ) || option.ToLower().Equals( "rd" ) ) {
string doorName = cmd.Next();
if ( doorName == null ) {
player.Message( "No door name specified." );
} else {
if ( player.World.Map.Doors != null && player.World.Map.Doors.Count > 0 ) {
bool found = false;
Door doorFound = null;
lock ( player.World.Map.Doors.SyncRoot ) {
foreach ( Door door in player.World.Map.Doors ) {
if ( door.Name.Equals( doorName, StringComparison.OrdinalIgnoreCase ) ) {
doorFound = door;
found = true;
break;
}
}
if ( !found ) {
player.Message( "Could not find door by name {0}.", doorName );
} else {
doorFound.Remove( player );
player.Message( "door was removed." );
}
}
} else {
player.Message( "Could not find door as this world doesn't contain a door." );
}
}
} else if ( option.ToLower().Equals( "info" ) ) {
string doorName = cmd.Next();
if ( doorName == null ) {
player.Message( "No door name specified." );
} else {
if ( player.World.Map.Doors != null && player.World.Map.Doors.Count > 0 ) {
bool found = false;
lock ( player.World.Map.Doors.SyncRoot ) {
foreach ( Door door in player.World.Map.Doors ) {
if ( door.Name.Equals( doorName, StringComparison.OrdinalIgnoreCase ) ) {
player.Message( "Door '{0}&S' was created by {1}&S at {2}",
door.Name, door.Creator, door.Created );
found = true;
}
}
}
if ( !found ) {
player.Message( "Could not find door by name {0}.", doorName );
}
} else {
player.Message( "Could not find door as this world doesn't contain a door." );
}
}
} else if ( option.ToLower().Equals( "list" ) ) {
if ( player.World.Map.Doors == null || player.World.Map.Doors.Count == 0 ) {
player.Message( "There are no doors in {0}&S.", player.World.ClassyName );
} else {
String[] doorNames = new String[player.World.Map.Doors.Count];
System.Text.StringBuilder output = new System.Text.StringBuilder( "There are " + player.World.Map.Doors.Count + " doors in " + player.World.ClassyName + "&S: " );
for ( int i = 0; i < player.World.Map.Doors.Count; i++ ) {
doorNames[i] = ( ( Door )player.World.Map.Doors[i] ).Name;
}
output.Append( doorNames.JoinToString( ", " ) );
player.Message( output.ToString() );
}
} else if ( option.ToLower() == "test" ) {
player.SelectionStart( 1, DoorTestCallback, null, CdDoor.Permissions );
player.Message( "DoorTest: Click a block or type /mark to use your location." );
} else {
CdDoor.PrintUsage( player );
}
}