override fun <T> waitFor(event: Class<T>, predicate: Predicate<T>, timeout: Long, timeoutUnit: TimeUnit): CompletionStage<T> {
        val future = CompletableFuture<T>()
        val listener = object : WaitingEventListener() {
            @SubscribeEvent
            @Suppress("unused")