001 package org.bukkit.plugin; 002 003 import java.io.File; 004 import java.util.Set; 005 006 import org.bukkit.event.Event; 007 import org.bukkit.event.EventPriority; 008 import org.bukkit.event.Listener; 009 import org.bukkit.permissions.Permissible; 010 import org.bukkit.permissions.Permission; 011 012 /** 013 * Handles all plugin management from the Server 014 */ 015 public interface PluginManager { 016 017 /** 018 * Registers the specified plugin loader 019 * 020 * @param loader Class name of the PluginLoader to register 021 * @throws IllegalArgumentException Thrown when the given Class is not a 022 * valid PluginLoader 023 */ 024 public void registerInterface(Class<? extends PluginLoader> loader) throws IllegalArgumentException; 025 026 /** 027 * Checks if the given plugin is loaded and returns it when applicable 028 * <p> 029 * Please note that the name of the plugin is case-sensitive 030 * 031 * @param name Name of the plugin to check 032 * @return Plugin if it exists, otherwise null 033 */ 034 public Plugin getPlugin(String name); 035 036 /** 037 * Gets a list of all currently loaded plugins 038 * 039 * @return Array of Plugins 040 */ 041 public Plugin[] getPlugins(); 042 043 /** 044 * Checks if the given plugin is enabled or not 045 * <p> 046 * Please note that the name of the plugin is case-sensitive. 047 * 048 * @param name Name of the plugin to check 049 * @return true if the plugin is enabled, otherwise false 050 */ 051 public boolean isPluginEnabled(String name); 052 053 /** 054 * Checks if the given plugin is enabled or not 055 * 056 * @param plugin Plugin to check 057 * @return true if the plugin is enabled, otherwise false 058 */ 059 public boolean isPluginEnabled(Plugin plugin); 060 061 /** 062 * Loads the plugin in the specified file 063 * <p> 064 * File must be valid according to the current enabled Plugin interfaces 065 * 066 * @param file File containing the plugin to load 067 * @return The Plugin loaded, or null if it was invalid 068 * @throws InvalidPluginException Thrown when the specified file is not a 069 * valid plugin 070 * @throws InvalidDescriptionException Thrown when the specified file 071 * contains an invalid description 072 * @throws UnknownDependencyException If a required dependency could not 073 * be resolved 074 */ 075 public Plugin loadPlugin(File file) throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException; 076 077 /** 078 * Loads the plugins contained within the specified directory 079 * 080 * @param directory Directory to check for plugins 081 * @return A list of all plugins loaded 082 */ 083 public Plugin[] loadPlugins(File directory); 084 085 /** 086 * Disables all the loaded plugins 087 */ 088 public void disablePlugins(); 089 090 /** 091 * Disables and removes all plugins 092 */ 093 public void clearPlugins(); 094 095 /** 096 * Calls an event with the given details 097 * 098 * @param event Event details 099 * @throws IllegalStateException Thrown when an asynchronous event is 100 * fired from synchronous code. 101 * <p> 102 * <i>Note: This is best-effort basis, and should not be used to test 103 * synchronized state. This is an indicator for flawed flow logic.</i> 104 */ 105 public void callEvent(Event event) throws IllegalStateException; 106 107 /** 108 * Registers all the events in the given listener class 109 * 110 * @param listener Listener to register 111 * @param plugin Plugin to register 112 */ 113 public void registerEvents(Listener listener, Plugin plugin); 114 115 /** 116 * Registers the specified executor to the given event class 117 * 118 * @param event Event type to register 119 * @param listener Listener to register 120 * @param priority Priority to register this event at 121 * @param executor EventExecutor to register 122 * @param plugin Plugin to register 123 */ 124 public void registerEvent(Class<? extends Event> event, Listener listener, EventPriority priority, EventExecutor executor, Plugin plugin); 125 126 /** 127 * Registers the specified executor to the given event class 128 * 129 * @param event Event type to register 130 * @param listener Listener to register 131 * @param priority Priority to register this event at 132 * @param executor EventExecutor to register 133 * @param plugin Plugin to register 134 * @param ignoreCancelled Whether to pass cancelled events or not 135 */ 136 public void registerEvent(Class<? extends Event> event, Listener listener, EventPriority priority, EventExecutor executor, Plugin plugin, boolean ignoreCancelled); 137 138 /** 139 * Enables the specified plugin 140 * <p> 141 * Attempting to enable a plugin that is already enabled will have no 142 * effect 143 * 144 * @param plugin Plugin to enable 145 */ 146 public void enablePlugin(Plugin plugin); 147 148 /** 149 * Disables the specified plugin 150 * <p> 151 * Attempting to disable a plugin that is not enabled will have no effect 152 * 153 * @param plugin Plugin to disable 154 */ 155 public void disablePlugin(Plugin plugin); 156 157 /** 158 * Gets a {@link Permission} from its fully qualified name 159 * 160 * @param name Name of the permission 161 * @return Permission, or null if none 162 */ 163 public Permission getPermission(String name); 164 165 /** 166 * Adds a {@link Permission} to this plugin manager. 167 * <p> 168 * If a permission is already defined with the given name of the new 169 * permission, an exception will be thrown. 170 * 171 * @param perm Permission to add 172 * @throws IllegalArgumentException Thrown when a permission with the same 173 * name already exists 174 */ 175 public void addPermission(Permission perm); 176 177 /** 178 * Removes a {@link Permission} registration from this plugin manager. 179 * <p> 180 * If the specified permission does not exist in this plugin manager, 181 * nothing will happen. 182 * <p> 183 * Removing a permission registration will <b>not</b> remove the 184 * permission from any {@link Permissible}s that have it. 185 * 186 * @param perm Permission to remove 187 */ 188 public void removePermission(Permission perm); 189 190 /** 191 * Removes a {@link Permission} registration from this plugin manager. 192 * <p> 193 * If the specified permission does not exist in this plugin manager, 194 * nothing will happen. 195 * <p> 196 * Removing a permission registration will <b>not</b> remove the 197 * permission from any {@link Permissible}s that have it. 198 * 199 * @param name Permission to remove 200 */ 201 public void removePermission(String name); 202 203 /** 204 * Gets the default permissions for the given op status 205 * 206 * @param op Which set of default permissions to get 207 * @return The default permissions 208 */ 209 public Set<Permission> getDefaultPermissions(boolean op); 210 211 /** 212 * Recalculates the defaults for the given {@link Permission}. 213 * <p> 214 * This will have no effect if the specified permission is not registered 215 * here. 216 * 217 * @param perm Permission to recalculate 218 */ 219 public void recalculatePermissionDefaults(Permission perm); 220 221 /** 222 * Subscribes the given Permissible for information about the requested 223 * Permission, by name. 224 * <p> 225 * If the specified Permission changes in any form, the Permissible will 226 * be asked to recalculate. 227 * 228 * @param permission Permission to subscribe to 229 * @param permissible Permissible subscribing 230 */ 231 public void subscribeToPermission(String permission, Permissible permissible); 232 233 /** 234 * Unsubscribes the given Permissible for information about the requested 235 * Permission, by name. 236 * 237 * @param permission Permission to unsubscribe from 238 * @param permissible Permissible subscribing 239 */ 240 public void unsubscribeFromPermission(String permission, Permissible permissible); 241 242 /** 243 * Gets a set containing all subscribed {@link Permissible}s to the given 244 * permission, by name 245 * 246 * @param permission Permission to query for 247 * @return Set containing all subscribed permissions 248 */ 249 public Set<Permissible> getPermissionSubscriptions(String permission); 250 251 /** 252 * Subscribes to the given Default permissions by operator status 253 * <p> 254 * If the specified defaults change in any form, the Permissible will be 255 * asked to recalculate. 256 * 257 * @param op Default list to subscribe to 258 * @param permissible Permissible subscribing 259 */ 260 public void subscribeToDefaultPerms(boolean op, Permissible permissible); 261 262 /** 263 * Unsubscribes from the given Default permissions by operator status 264 * 265 * @param op Default list to unsubscribe from 266 * @param permissible Permissible subscribing 267 */ 268 public void unsubscribeFromDefaultPerms(boolean op, Permissible permissible); 269 270 /** 271 * Gets a set containing all subscribed {@link Permissible}s to the given 272 * default list, by op status 273 * 274 * @param op Default list to query for 275 * @return Set containing all subscribed permissions 276 */ 277 public Set<Permissible> getDefaultPermSubscriptions(boolean op); 278 279 /** 280 * Gets a set of all registered permissions. 281 * <p> 282 * This set is a copy and will not be modified live. 283 * 284 * @return Set containing all current registered permissions 285 */ 286 public Set<Permission> getPermissions(); 287 288 /** 289 * Returns whether or not timing code should be used for event calls 290 * 291 * @return True if event timings are to be used 292 */ 293 public boolean useTimings(); 294 }