/** * Register a provider of a service. * * @param <T> Provider * @param service service class * @param provider provider to register * @param plugin plugin with the provider * @param priority priority of the provider */ public <T> void register(Class<T> service, T provider, Plugin plugin, ServicePriority priority) { RegisteredServiceProvider<T> registeredProvider = null; synchronized (providers) { List<RegisteredServiceProvider<?>> registered = providers.get(service); if (registered == null) { registered = new ArrayList<RegisteredServiceProvider<?>>(); providers.put(service, registered); } registeredProvider = new RegisteredServiceProvider<T>(service, provider, priority, plugin); // Insert the provider into the collection, much more efficient big O than sort int position = Collections.binarySearch(registered, registeredProvider); if (position < 0) { registered.add(-(position + 1), registeredProvider); } else { registered.add(position, registeredProvider); } } Bukkit.getServer().getPluginManager().callEvent(new ServiceRegisterEvent(registeredProvider)); }
private ServiceCallback(Class<T> serviceClass) { this.serviceClass = serviceClass; refresh(); // listen for service updates this.listener = Events.merge(ServiceEvent.class, ServiceRegisterEvent.class, ServiceUnregisterEvent.class) .filter(e -> e.getProvider() != null && e.getProvider().getService().equals(serviceClass)) .handler(e -> refresh()); }
@EventHandler public void onServiceChange(ServiceRegisterEvent e) { if (e.getProvider().getService() == Chat.class) { refreshVault(); } }