1 package org.bukkit.event;
3 import org.bukkit.plugin.Plugin;
4 import org.bukkit.plugin.RegisteredListener;
7 import java.util.Map.Entry;
23 private final EnumMap<EventPriority, ArrayList<RegisteredListener>> handlerslots;
28 private static ArrayList<HandlerList> allLists =
new ArrayList<HandlerList>();
36 synchronized (allLists) {
47 synchronized (allLists) {
50 for (List<RegisteredListener> list : h.handlerslots.values()) {
65 synchronized (allLists) {
78 synchronized (allLists) {
80 h.unregister(listener);
90 handlerslots =
new EnumMap<EventPriority, ArrayList<RegisteredListener>>(
EventPriority.class);
92 handlerslots.put(o,
new ArrayList<RegisteredListener>());
94 synchronized (allLists) {
105 if (handlerslots.get(listener.getPriority()).contains(listener))
106 throw new IllegalStateException(
"This listener is already registered to priority " + listener.getPriority().toString());
108 handlerslots.get(listener.getPriority()).add(listener);
116 public void registerAll(Collection<RegisteredListener> listeners) {
128 if (handlerslots.get(listener.
getPriority()).
remove(listener)) {
139 boolean changed =
false;
140 for (List<RegisteredListener> list : handlerslots.values()) {
141 for (ListIterator<RegisteredListener> i = list.listIterator(); i.hasNext();) {
142 if (i.next().getPlugin().equals(plugin)) {
148 if (changed) handlers = null;
157 boolean changed =
false;
158 for (List<RegisteredListener> list : handlerslots.values()) {
159 for (ListIterator<RegisteredListener> i = list.listIterator(); i.hasNext();) {
160 if (i.next().getListener().equals(listener)) {
166 if (changed) handlers = null;
172 public synchronized void bake() {
173 if (handlers != null)
return;
174 List<RegisteredListener> entries =
new ArrayList<RegisteredListener>();
175 for (Entry<
EventPriority, ArrayList<RegisteredListener>> entry : handlerslots.entrySet()) {
176 entries.addAll(entry.getValue());
188 while ((handlers = this.handlers) == null)
bake();
200 ArrayList<RegisteredListener> listeners =
new ArrayList<RegisteredListener>();
201 synchronized (allLists) {
204 for (List<RegisteredListener> list : h.handlerslots.values()) {
206 if (listener.getPlugin().equals(plugin)) {
207 listeners.add(listener);
222 @SuppressWarnings(
"unchecked")
224 synchronized (allLists) {
225 return (ArrayList<HandlerList>) allLists.clone();