001 package org.bukkit.conversations;
002
003 /**
004 * A Prompt is the main constituent of a {@link Conversation}. Each prompt
005 * displays text to the user and optionally waits for a user's response.
006 * Prompts are chained together into a directed graph that represents the
007 * conversation flow. To halt a conversation, END_OF_CONVERSATION is returned
008 * in liu of another Prompt object.
009 */
010 public interface Prompt extends Cloneable {
011
012 /**
013 * A convenience constant for indicating the end of a conversation.
014 */
015 static final Prompt END_OF_CONVERSATION = null;
016
017 /**
018 * Gets the text to display to the user when this prompt is first
019 * presented.
020 *
021 * @param context Context information about the conversation.
022 * @return The text to display.
023 */
024 String getPromptText(ConversationContext context);
025
026 /**
027 * Checks to see if this prompt implementation should wait for user input
028 * or immediately display the next prompt.
029 *
030 * @param context Context information about the conversation.
031 * @return If true, the {@link Conversation} will wait for input before
032 * continuing.
033 */
034 boolean blocksForInput(ConversationContext context);
035
036 /**
037 * Accepts and processes input from the user. Using the input, the next
038 * Prompt in the prompt graph is returned.
039 *
040 * @param context Context information about the conversation.
041 * @param input The input text from the user.
042 * @return The next Prompt in the prompt graph.
043 */
044 Prompt acceptInput(ConversationContext context, String input);
045 }