001 package org.bukkit.help;
002
003 import java.util.Collection;
004 import java.util.List;
005
006 /**
007 * The HelpMap tracks all help topics registered in a Bukkit server. When the
008 * server starts up or is reloaded, help is processed and topics are added in
009 * the following order:
010 * <p>
011 * <ol>
012 * <li>General topics are loaded from the help.yml
013 * <li>Plugins load and optionally call {@code addTopic()}
014 * <li>Registered plugin commands are processed by {@link HelpTopicFactory}
015 * objects to create topics
016 * <li>Topic contents are amended as directed in help.yml
017 * </ol>
018 */
019 public interface HelpMap {
020 /**
021 * Returns a help topic for a given topic name.
022 *
023 * @param topicName The help topic name to look up.
024 * @return A {@link HelpTopic} object matching the topic name or null if
025 * none can be found.
026 */
027 public HelpTopic getHelpTopic(String topicName);
028
029 /**
030 * Returns a collection of all the registered help topics.
031 *
032 * @return All the registered help topics.
033 */
034 public Collection<HelpTopic> getHelpTopics();
035
036 /**
037 * Adds a topic to the server's help index.
038 *
039 * @param topic The new help topic to add.
040 */
041 public void addTopic(HelpTopic topic);
042
043 /**
044 * Clears out the contents of the help index. Normally called during
045 * server reload.
046 */
047 public void clear();
048
049 /**
050 * Associates a {@link HelpTopicFactory} object with given command base
051 * class. Plugins typically call this method during {@code onLoad()}. Once
052 * registered, the custom HelpTopicFactory will be used to create a custom
053 * {@link HelpTopic} for all commands deriving from the {@code
054 * commandClass} base class, or all commands deriving from {@link
055 * org.bukkit.command.PluginCommand} who's executor derives from {@code
056 * commandClass} base class.
057 *
058 * @param commandClass The class for which the custom HelpTopicFactory
059 * applies. Must derive from either {@link org.bukkit.command.Command}
060 * or {@link org.bukkit.command.CommandExecutor}.
061 * @param factory The {@link HelpTopicFactory} implementation to associate
062 * with the {@code commandClass}.
063 * @throws IllegalArgumentException Thrown if {@code commandClass} does
064 * not derive from a legal base class.
065 */
066 public void registerHelpTopicFactory(Class<?> commandClass, HelpTopicFactory<?> factory);
067
068 /**
069 * Gets the list of plugins the server administrator has chosen to exclude
070 * from the help index. Plugin authors who choose to directly extend
071 * {@link org.bukkit.command.Command} instead of {@link
072 * org.bukkit.command.PluginCommand} will need to check this collection in
073 * their {@link HelpTopicFactory} implementations to ensure they meet the
074 * server administrator's expectations.
075 *
076 * @return A list of plugins that should be excluded from the help index.
077 */
078 public List<String> getIgnoredPlugins();
079 }