package Ġru . mdash lw . k da . wait er Ċ Ċ import Ġnet . dv 8 tion . j da . api . events . Generic Event Ċ import Ġnet . dv 8 tion . j da . api . hooks . EventListener Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Scheduled ExecutorService Ċ import Ġkotlin . reflect . K Class Ċ Ċ object ĠEvent Wait er Ġ: ĠEvent Listener Ġ{ ĊĠĠĠ Ġval Ġexecutor : ĠScheduled ExecutorService Ġ= ĠExec utors . new Single Thread Scheduled Executor () ĊĠĠĠ Ġval Ġevents Ġ= Ġmutable Map Of < K Class < out ĠGeneric Event >, ĠMutable List < Waiting Event < Generic Event >> >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Event ( event : ĠGeneric Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwaiting Events Ġ= Ġevents [ event :: class ] Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġwaiting Events ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . predicate ( event ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . action ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . called Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . amount Ġ>= Ġit . called ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . unregister () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ