001    package org.bukkit.plugin;
002    
003    import java.io.File;
004    import java.util.Map;
005    import java.util.Set;
006    import java.util.regex.Pattern;
007    
008    import org.bukkit.event.Event;
009    import org.bukkit.event.Listener;
010    
011    /**
012     * Represents a plugin loader, which handles direct access to specific types
013     * of plugins
014     */
015    public interface PluginLoader {
016    
017        /**
018         * Loads the plugin contained in the specified file
019         *
020         * @param file File to attempt to load
021         * @return Plugin that was contained in the specified file, or null if
022         *     unsuccessful
023         * @throws InvalidPluginException Thrown when the specified file is not a
024         *     plugin
025         * @throws UnknownDependencyException If a required dependency could not
026         *     be found
027         */
028        public Plugin loadPlugin(File file) throws InvalidPluginException, UnknownDependencyException;
029    
030        /**
031         * Loads a PluginDescriptionFile from the specified file
032         *
033         * @param file File to attempt to load from
034         * @return A new PluginDescriptionFile loaded from the plugin.yml in the
035         *     specified file
036         * @throws InvalidDescriptionException If the plugin description file
037         *     could not be created
038         */
039        public PluginDescriptionFile getPluginDescription(File file) throws InvalidDescriptionException;
040    
041        /**
042         * Returns a list of all filename filters expected by this PluginLoader
043         *
044         * @return The filters
045         */
046        public Pattern[] getPluginFileFilters();
047    
048        /**
049         * Creates and returns registered listeners for the event classes used in
050         * this listener
051         *
052         * @param listener The object that will handle the eventual call back
053         * @param plugin The plugin to use when creating registered listeners
054         * @return The registered listeners.
055         */
056        public Map<Class<? extends Event>, Set<RegisteredListener>> createRegisteredListeners(Listener listener, Plugin plugin);
057    
058        /**
059         * Enables the specified plugin
060         * <p>
061         * Attempting to enable a plugin that is already enabled will have no
062         * effect
063         *
064         * @param plugin Plugin to enable
065         */
066        public void enablePlugin(Plugin plugin);
067    
068        /**
069         * Disables the specified plugin
070         * <p>
071         * Attempting to disable a plugin that is not enabled will have no effect
072         *
073         * @param plugin Plugin to disable
074         */
075        public void disablePlugin(Plugin plugin);
076    }