/** * add an arena listener to this bukkit event * * @param rl RListener */ @Override protected synchronized void addMatchListener(RListener rl) { if (!isListening()) { startListening(); } Map<RListener, Integer> l = listeners.get(rl.getPriority()); if (l == null) { l = new TreeMap<RListener, Integer>( new Comparator<RListener>() { @Override public int compare(RListener o1, RListener o2) { return o1.getListener().equals(o2.getListener()) ? 0 : new Integer(o1.hashCode()).compareTo(o2.hashCode()); } }); listeners.put(rl.getPriority(), l); } Integer count = l.get(rl); if (count == null) { l.put(rl, 1); handlers = null; bake(); } else { l.put(rl, count + 1); } }
/** * remove an arena listener to this bukkit event * * @param listener RListener * @return whether listener was found and removed */ @Override protected boolean removeMatchListener(RListener listener) { final Map<RListener, Integer> map = listeners.get(listener.getPriority()); if (map == null) return false; Integer count = map.get(listener); boolean removed; if (count == null || count == 1) { map.remove(listener); handlers = null; removed = true; } else { map.put(listener, count - 1); removed = false; } if (removed && !hasListeners() && isListening()) { stopListening(); } return removed; }