Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / help / HelpMap.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
package org.bukkit.help;

import java.util.Collection;
import java.util.List;

/**
 * The HelpMap tracks all help topics registered in a Bukkit server. When the
 * server starts up or is reloaded, help is processed and topics are added in
 * the following order:
 * <p>
 * <ol>
 * <li>General topics are loaded from the help.yml
 * <li>Plugins load and optionally call {@code addTopic()}
 * <li>Registered plugin commands are processed by {@link HelpTopicFactory}
 * objects to create topics
 * <li>Topic contents are amended as directed in help.yml
 * </ol>
 */
public interface HelpMap
{
	/**
	 * Returns a help topic for a given topic name.
	 *
	 * @param topicName The help topic name to look up.
	 * @return A {@link HelpTopic} object matching the topic name or null if
	 * none can be found.
	 */
	public HelpTopic getHelpTopic(String topicName);

	/**
	 * Returns a collection of all the registered help topics.
	 *
	 * @return All the registered help topics.
	 */
	public Collection<HelpTopic> getHelpTopics();

	/**
	 * Adds a topic to the server's help index.
	 *
	 * @param topic The new help topic to add.
	 */
	public void addTopic(HelpTopic topic);

	/**
	 * Clears out the contents of the help index. Normally called during
	 * server reload.
	 */
	public void clear();

	/**
	 * Associates a {@link HelpTopicFactory} object with given command base
	 * class. Plugins typically call this method during {@code onLoad()}. Once
	 * registered, the custom HelpTopicFactory will be used to create a custom
	 * {@link HelpTopic} for all commands deriving from the {@code
	 * commandClass} base class, or all commands deriving from {@link
	 * org.bukkit.command.PluginCommand} who's executor derives from {@code
	 * commandClass} base class.
	 *
	 * @param commandClass The class for which the custom HelpTopicFactory
	 *                     applies. Must derive from either {@link org.bukkit.command.Command}
	 *                     or {@link org.bukkit.command.CommandExecutor}.
	 * @param factory      The {@link HelpTopicFactory} implementation to associate
	 *                     with the {@code commandClass}.
	 * @throws IllegalArgumentException Thrown if {@code commandClass} does
	 *                                  not derive from a legal base class.
	 */
	public void registerHelpTopicFactory(Class<?> commandClass, HelpTopicFactory<?> factory);

	/**
	 * Gets the list of plugins the server administrator has chosen to exclude
	 * from the help index. Plugin authors who choose to directly extend
	 * {@link org.bukkit.command.Command} instead of {@link
	 * org.bukkit.command.PluginCommand} will need to check this collection in
	 * their {@link HelpTopicFactory} implementations to ensure they meet the
	 * server administrator's expectations.
	 *
	 * @return A list of plugins that should be excluded from the help index.
	 */
	public List<String> getIgnoredPlugins();
}