package tc.oc.commons.bukkit.event.targeted;
import tc.oc.minecraft.api.event.Listener;
/**
* A targeted event is one that is delivered to some subset of listeners derived from the
* event itself. In other words, a "scoped" or "contextual" event. Any type of event can be
* targeted, without altering the code of the event itself.
*
* Several classes are involved in this system:
*
* - {@link TargetedEventHandler} identifies event handler methods on listeners
* - {@link TargetedEventRouter} associates event instances with their listeners
* - {@link TargetedEventBus} is used to register targeted listeners with the system
*
* Every listener must be registered with this class at least once in order to receive targeted events.
*/
public interface TargetedEventBus {
/**
* Register the given listener to receive targeted events through its {@link TargetedEventHandler}s.
* An error MAY be logged if an unregistered listener is resolved from a targeted event.
*
* Targeted listener registration is completely unrelated to Bukkit's global listener registration.
* A listener can be used with both systems simultaneously, but it must register with each explicitly.
*/
void registerListener(Listener listener);
void unregisterListener(Listener listener);
}