Package org.bukkit.plugin

# Interface ServicesManager

All Known Implementing Classes:
  `SimpleServicesManager`

public interface ServicesManager
Manages services and service providers. Services are an interface specifying a list of methods that a provider must implement. Providers are implementations of these services. A provider can be queried from the services manager in order to use a service (if one is available). If multiple plugins register a service, then the service with the highest priority takes precedence.

## Method Summary

Modifier and Type
Method
Description
`@NotNull Collection<Class<?>>`
`getKnownServices()`
Get a list of known services.
`<T> @Nullable RegisteredServiceProvider<T>`
`getRegistration(@NotNull Class<T> service)`
Queries for a provider registration.
`<T> @NotNull Collection<RegisteredServiceProvider<T>>`
`getRegistrations(@NotNull Class<T> service)`
Get registrations of providers for a service.
`@NotNull List<RegisteredServiceProvider<?>>`
`getRegistrations(@NotNull Plugin plugin)`
Get registrations of providers for a plugin.
`<T> boolean`
`isProvidedFor(@NotNull Class<T> service)`
Returns whether a provider has been registered for a service.
`<T> T`
`load(@NotNull Class<T> service)`
Queries for a provider.
`<T> void`
`register(@NotNull Class<T> service, T provider, @NotNull Plugin plugin, @NotNull ServicePriority priority)`
Register a provider of a service.
`void`
`unregister(@NotNull Class<?> service, @NotNull Object provider)`
Unregister a particular provider for a particular service.
`void`
`unregister(@NotNull Object provider)`
Unregister a particular provider.
`void`
`unregisterAll(@NotNull Plugin plugin)`
Unregister all the providers registered by a particular plugin.

## Method Details

### register

<T> void register(@NotNull @NotNull Class<T> service, @NotNull T provider, @NotNull @NotNull Plugin plugin, @NotNull @NotNull ServicePriority priority)
Register a provider of a service.

Type Parameters:
  `T` - Provider
Parameters:
  `service` - service class
  `provider` - provider to register
  `plugin` - plugin with the provider
  `priority` - priority of the provider

### unregisterAll

void unregisterAll(@NotNull @NotNull Plugin plugin)
Unregister all the providers registered by a particular plugin.

Parameters:
  `plugin` - The plugin

### unregister

void unregister(@NotNull @NotNull Class<?> service, @NotNull @NotNull Object provider)
Unregister a particular provider for a particular service.

Parameters:
  `service` - The service interface
  `provider` - The service provider implementation

### unregister

void unregister(@NotNull @NotNull Object provider)
Unregister a particular provider.

Parameters:
  `provider` - The service provider implementation

### load

@Nullable <T> T load(@NotNull @NotNull Class<T> service)
Queries for a provider. This may return null if no provider has been registered for a service. The highest priority provider is returned.

Type Parameters:
  `T` - The service interface
Parameters:
  `service` - The service interface
Returns:
  provider or null

### getRegistration

@Nullable <T> @Nullable RegisteredServiceProvider<T> getRegistration(@NotNull @NotNull Class<T> service)
Queries for a provider registration. This may return null if no provider has been registered for a service.

Type Parameters:
  `T` - The service interface
Parameters:
  `service` - The service interface
Returns:
  provider registration or null

### getRegistrations

@NotNull @NotNull List<RegisteredServiceProvider<?>> getRegistrations(@NotNull @NotNull Plugin plugin)
Get registrations of providers for a plugin.

Parameters:
  `plugin` - The plugin
Returns:
  provider registrations

### getRegistrations

@NotNull <T> @NotNull Collection<RegisteredServiceProvider<T>> getRegistrations(@NotNull @NotNull Class<T> service)
Get registrations of providers for a service. The returned list is unmodifiable.

Type Parameters:
  `T` - The service interface
Parameters:
  `service` - The service interface
Returns:
  list of registrations

### getKnownServices

@NotNull @NotNull Collection<Class<?>> getKnownServices()
Get a list of known services. A service is known if it has registered providers for it.

Returns:
  list of known services

### isProvidedFor

<T> boolean isProvidedFor(@NotNull @NotNull Class<T> service)
Returns whether a provider has been registered for a service. Do not check this first only to call `load(service)` later, as that would be a non-thread safe situation.

Type Parameters:
  `T` - service
Parameters:
  `service` - service to check
Returns:
  whether there has been a registered provider