/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
*/
package key.commands;
import key.*;
import java.io.*;
import java.util.StringTokenizer;
import java.util.Hashtable;
public class Trans extends Command
{
public static final AtomicElement[] ELEMENTS =
{
AtomicElement.construct( Trans.class, String.class, "leave",
AtomicElement.PUBLIC_FIELD,
"the message sent to the room when a player leaves" ),
AtomicElement.construct( Trans.class, String.class, "enter",
AtomicElement.PUBLIC_FIELD,
"the message sent to the room when a player enters" )
};
public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS );
public String enter = "%o appears with a loud *POP*";
public String leave = "%o disappears with a loud *POP*";
public static final char playerCode = 'o';
public Trans()
{
setKey( "trans" );
usage = "<location>";
}
public AtomicStructure getDeclaredStructure()
{
return( STRUCTURE );
}
public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
{
if( !args.hasMoreTokens() )
usage( ic );
else
{
String id = args.nextToken();
Atom a = p.getContext();
if( a instanceof Container )
{
Object l = ((Container)a).getElement( id );
if( l == null )
ic.sendError( "Could not locate '" + id + "'" );
else if( l instanceof Room )
{
Room wanted = (Room) l;
Room current = p.getLocation();
// set the codes
p.putCode( playerCode, p.getName() );
// substitute name for %o
String e;
String lm;
p.putCode( playerCode, p.getName() );
e = Grammar.substitute( enter, p.getCodes() );
lm = Grammar.substitute( leave, p.getCodes() );
Effect ee = new key.effect.Enter( p, wanted, e );
Effect le = null;
if( current != null )
le = new key.effect.Leave( p, current, lm );
p.moveTo( wanted, le, ee );
// show them where they are
p.roomLook();
// tell them
ic.sendFeedback( "You have transported yourself to " + ( (Room) l).getId() + "." );
}
else if( l instanceof Atom )
ic.sendError( "'" + ((Atom)l).getId() + "' is not a room." );
else
ic.sendError( "Object of type " + Type.typeOf( l ).getName() + " is not a room" );
}
else
ic.sendError( "You have to be referencing a container for this command to work" );
}
}
}