code: public void fire(T event) {
  		ArrayList<Listener<T>> list1;
  		ArrayList<Runnable> list2;
  		synchronized (this) {
  			if (listeners == null) list1 = null;
  			else list1 = new ArrayList<>(listeners);
  			if (listenersRunnable == null) list2 = null;
  			else list2 = new ArrayList<>(listenersRunnable);
  		}
  		if (list1 != null)
  			for (int i = 0; i < list1.size(); ++i)
  				try { list1.get(i).fire(event); }
  				catch (Throwable t) {
  					LCCore.getApplication().getDefaultLogger().error("Event listener error: " + list1.get(i), t);
  				}
  		if (list2 != null)
  			for (int i = 0; i < list2.size(); ++i)
  				try { list2.get(i).run(); }
  				catch (Throwable t) {
  					LCCore.getApplication().getDefaultLogger().error("Event listener error: " + list2.get(i), t);
  				}
  	}
docs: Fire the event (call the listeners).