/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/help/HelpTopicFactory.java
package org.bukkit.help;

import org.bukkit.command.Command;

/**
 * A HelpTopicFactory is used to create custom {@link HelpTopic} objects from
 * commands that inherit from a common base class or have executors that inherit
 * from a common base class. You can use a custom HelpTopic to change the way
 * all the commands in your plugin display in the help. If your plugin
 * implements a complex permissions system, a custom help topic may also be
 * appropriate.
 * <p>
 * To automatically bind your plugin's commands to your custom HelpTopic
 * implementation, first make sure all your commands or executors derive from a
 * custom base class (it doesn't have to do anything). Next implement a custom
 * HelpTopicFactory that accepts your custom command base class and instantiates
 * an instance of your custom HelpTopic from it. Finally, register your
 * HelpTopicFactory against your command base class using the
 * {@link HelpMap#registerHelpTopicFactory(Class, HelpTopicFactory)} method.
 * <p>
 * As the help system iterates over all registered commands to make help topics,
 * it first checks to see if there is a HelpTopicFactory registered for the
 * command's base class. If so, the factory is used to make a help topic rather
 * than a generic help topic. If no factory is found for the command's base
 * class and the command derives from {@link org.bukkit.command.PluginCommand},
 * then the type of the command's executor is inspected looking for a registered
 * HelpTopicFactory. Finally, if no factory is found, a generic help topic is
 * created for the command.
 *
 * @param <TCommand> The base class for your custom commands.
 */
public interface HelpTopicFactory<TCommand extends Command> {
	/**
	 * This method accepts a command deriving from a custom command base class and
	 * constructs a custom HelpTopic for it.
	 *
	 * @param command The custom command to build a help topic for.
	 * @return A new custom help topic or {@code null} to intentionally NOT create a
	 *         topic.
	 */
	public HelpTopic createTopic(TCommand command);
}
