private void del(UUID playerUUID, AbstractEffect effect) {
    try {
      for (Class<? extends AbstractEventListener<?>> eventListenerClass :
          effect.getNeededEvents()) {
        AbstractEventListener<?> eventListener;

        eventListener = EventListenerManager.getInstance().getEventListener(eventListenerClass);
        EntityDamageEvent.getHandlerList();
        eventListener.deleteObserver(effect);
        if (eventListener.countObservers() == 0) {
          Class<?> eventClass = eventListener.getObservedEvent();
          Method method = eventClass.getMethod("getHandlerList");
          HandlerList hl = (HandlerList) method.invoke(null);
          hl.unregister(plugin);
        }
      }
    } catch (NoSuchMethodException
        | InstantiationException
        | IllegalAccessException
        | InvocationTargetException
        | SecurityException e) {
      e.printStackTrace();
      throw new IllegalArgumentException(
          "An error occured during the effect deletion: " + e.getClass().toString() + ".", e);
    }
    getEffectsForPlayer(playerUUID).remove(effect);
    ;
  }