/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
*/
package key;
import java.util.StringTokenizer;
import java.io.File;
/*
** The base class for all 'objects' that can be placed
** in rooms or manipulated by players.
*/
public interface Thing
{
/**
* eg, "pink teddy bear", as in "You pick up a pink teddy bear".
*/
public String getFullPortrait( Player p );
/**
* eg, "use sword kill snapper". [ Hi J ;) ]
*/
public void use( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void wear( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void remove( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void wield( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void read( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void look( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void inspect( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void get( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void give( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void drop( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void sit( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
/**
* Unlike the others, stand does not require the object 'argument' to be
* specified - it is automatically determined. It doesn't effect the
* parameters of this call, though.
*/
public void stand( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void drink( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void eat( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void open( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void close( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void fill( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void lock( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
public void unlock( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom actual );
/**
* This routine builds a new type of this Thing.
*
* To explain, most things don't require a seperate instantiation
* of the actual Atom being built, so it is acceptable to just
* return a reference to itself (which will generally be something
* in /realm.objects).
*
* However, some objects, such as a purse or backpack (which contain
* things) require a seperate instantiation for each player that
* owns it. In this situation, it is necessary to create a new atom
* in ~player.objects and return a reference to that.
*
* There may be other situations in the future, as well.
*/
public Reference build( Player p );
public boolean isMethodSpecial( java.lang.reflect.Method m );
}