001    package org.bukkit.conversations;
002    
003    import org.bukkit.command.CommandSender;
004    
005    /**
006     * The Conversable interface is used to indicate objects that can have
007     * conversations.
008     */
009    public interface Conversable {
010    
011        /**
012         * Tests to see of a Conversable object is actively engaged in a
013         * conversation.
014         *
015         * @return True if a conversation is in progress
016         */
017        public boolean isConversing();
018    
019        /**
020         * Accepts input into the active conversation. If no conversation is in
021         * progress, this method does nothing.
022         *
023         * @param input The input message into the conversation
024         */
025        public void acceptConversationInput(String input);
026    
027        /**
028         * Enters into a dialog with a Conversation object.
029         *
030         * @param conversation The conversation to begin
031         * @return True if the conversation should proceed, false if it has been
032         *     enqueued
033         */
034        public boolean beginConversation(Conversation conversation);
035    
036        /**
037         * Abandons an active conversation.
038         *
039         * @param conversation The conversation to abandon
040         */
041        public void abandonConversation(Conversation conversation);
042    
043        /**
044         * Abandons an active conversation.
045         *
046         * @param conversation The conversation to abandon
047         * @param details Details about why the conversation was abandoned
048         */
049        public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details);
050    
051        /**
052         * Sends this sender a message raw
053         *
054         * @param message Message to be displayed
055         */
056        public void sendRawMessage(String message);
057    }