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

import java.util.List;

public interface CommandMap {

	/**
	 * Registers all the commands belonging to a certain plugin.
	 * <p>
	 * Caller can use:-
	 * <ul>
	 * <li>command.getName() to determine the label registered for this command
	 * <li>command.getAliases() to determine the aliases which where registered
	 * </ul>
	 *
	 * @param fallbackPrefix a prefix which is prepended to each command with a ':'
	 *                       one or more times to make the command unique
	 * @param commands       a list of commands to register
	 */
	public void registerAll(String fallbackPrefix, List<Command> commands);

	/**
	 * Registers a command. Returns true on success; false if name is already taken
	 * and fallback had to be used.
	 * <p>
	 * Caller can use:-
	 * <ul>
	 * <li>command.getName() to determine the label registered for this command
	 * <li>command.getAliases() to determine the aliases which where registered
	 * </ul>
	 *
	 * @param label          the label of the command, without the '/'-prefix.
	 * @param fallbackPrefix a prefix which is prepended to the command with a ':'
	 *                       one or more times to make the command unique
	 * @param command        the command to register
	 * @return true if command was registered with the passed in label, false
	 *         otherwise, which indicates the fallbackPrefix was used one or more
	 *         times
	 */
	public boolean register(String label, String fallbackPrefix, Command command);

	/**
	 * Registers a command. Returns true on success; false if name is already taken
	 * and fallback had to be used.
	 * <p>
	 * Caller can use:-
	 * <ul>
	 * <li>command.getName() to determine the label registered for this command
	 * <li>command.getAliases() to determine the aliases which where registered
	 * </ul>
	 *
	 * @param fallbackPrefix a prefix which is prepended to the command with a ':'
	 *                       one or more times to make the command unique
	 * @param command        the command to register, from which label is determined
	 *                       from the command name
	 * @return true if command was registered with the passed in label, false
	 *         otherwise, which indicates the fallbackPrefix was used one or more
	 *         times
	 */
	public boolean register(String fallbackPrefix, Command command);

	/**
	 * Looks for the requested command and executes it if found.
	 *
	 * @param sender  The command's sender
	 * @param cmdLine command + arguments. Example: "/test abc 123"
	 * @return returns false if no target is found, true otherwise.
	 * @throws CommandException Thrown when the executor for the given command fails
	 *                          with an unhandled exception
	 */
	public boolean dispatch(CommandSender sender, String cmdLine) throws CommandException;

	/**
	 * Clears all registered commands.
	 */
	public void clearCommands();

	/**
	 * Gets the command registered to the specified name
	 *
	 * @param name Name of the command to retrieve
	 * @return Command with the specified name or null if a command with that label
	 *         doesn't exist
	 */
	public Command getCommand(String name);

	/**
	 * Looks for the requested command and executes an appropriate tab-completer if
	 * found. This method will also tab-complete partial commands.
	 *
	 * @param sender  The command's sender.
	 * @param cmdLine The entire command string to tab-complete, excluding initial
	 *                slash.
	 * @return a list of possible tab-completions. This list may be immutable. Will
	 *         be null if no matching command of which sender has permission.
	 * @throws CommandException         Thrown when the tab-completer for the given
	 *                                  command fails with an unhandled exception
	 * @throws IllegalArgumentException if either sender or cmdLine are null
	 */
	public List<String> tabComplete(CommandSender sender, String cmdLine) throws IllegalArgumentException;
}
