package Ġteam . k un . j avel in . rx Ċ Ċ import Ġorg . bukkit . plugin . java . Java Plugin Ċ import Ġorg . bukkit . scheduler . Bu kkit Runnable Ċ Ċ class ĠObservable Ġprivate Ġconstructor ( private Ġval Ġtick : ĠLong ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġinterval ( tick : ĠLong ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠObservable ( tick ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlimit : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdo On Next Function : Ġ(( data : ĠLong ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdo On Complete Function : Ġ(( data : ĠLong ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdo On Complete Condition Function : Ġ(( data : ĠLong ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdo OnError Function : Ġ(( data : ĠLong ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdo OnError Condition Function : Ġ(( data : ĠLong ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġtake ( data : ĠLong ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo On Next ( function : Ġ( data : ĠLong ) Ġ-> ĠUnit ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠ Ġdo On Next Function Ġ= Ġfunction ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo On Complete Condition ( function : Ġ( data : ĠLong ) Ġ-> ĠBoolean ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠ Ġdo On Complete Condition Function Ġ= Ġfunction ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo On Complete ( function : Ġ( data : ĠLong ) Ġ-> ĠUnit ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠ Ġdo On Complete Function Ġ= Ġfunction ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo OnError Condition ( function : Ġ( data : ĠLong ) Ġ-> ĠBoolean ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠ Ġdo OnError Condition Function Ġ= Ġfunction ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo OnError ( function : Ġ( data : ĠLong ) Ġ-> ĠUnit ): ĠObservable Ġ{ ĊĠĠĠĠĠĠĠ Ġdo OnError Function Ġ= Ġfunction ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubscribe ( plugin : ĠJava Plugin ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠBu kkit Runnable () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata : ĠLong Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Complete Ġ= Ġdo On Complete Condition Function ?. invoke ( data ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Complete Ġ|| Ġis Limit ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Complete Function ?. invoke ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . server . scheduler . cancel Task ( taskId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Error Ġ= Ġdo OnError Condition Function ?. invoke ( data ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo OnError Function ?. invoke ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . server . scheduler . cancel Task ( taskId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Next Function ?. invoke ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. run Task Timer As ynchronously ( plugin , Ġ 0 , Ġtick ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Limit ( data : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Limit Ġ= Ġlimit Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġdata Ġ>= Ġcurrent Limit ĊĠĠĠ Ġ} Ċ } ĊĊ