public interface Listener
{
	public boolean listen(String command, RealObject actor);

	/* Where in the list to add listeners */
	public static final int HEAD = 0;
	public static final int TAIL = 1;
}

public class GoListener implements Listener {
	public boolean listen(String command, RealObject actor)
	{
		try
		{
			actor.wanderVia (actor.roomOf().findPassageByDirection (command),
			  	"Dutifully heads " + command + " to @");
			return true;
		}
		catch (CantFindObjectException e)
		{
			return false;
		}
	}
}

public class DefaultListener implements Listener
{
	private String dunno;
	
	DefaultListener(String dunno)
	{
		this.dunno = dunno;
	}

	public boolean listen(String command, RealObject actor)
	{
		actor.announce(Utility.replace (dunno, "@", command));
		return true;
	}
}

public class FirstWordListener implements Listener
{
	private String firstWord;
	private Listener sub;
	FirstWordListener(String firstWord, Listener sub)
	{
		this.firstWord = firstWord + " ";
		this.sub = sub;
	}

	public boolean listen(String message, RealObject actor)
	{
		int length = firstWord.length();

		if (message.length () > length  &&
			message.substring(0, length).equalsIgnoreCase(firstWord))
			{
			return sub.listen(message.substring(length), actor);
			}
		return false;
		}
	}
}

Last updated: 24 Jan 01