/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠAli ĠM og hn ie h Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . bl ure ng ine . blur . components . co old own Ċ Ċ import Ġcom . bl ure ng ine . blur . events . players . Player Leave Session Event Ċ import Ġcom . bl ure ng ine . blur . framework . Abstract Component Ċ import Ġcom . bl ure ng ine . blur . framework . Module Manager Ċ import Ġcom . bl ure ng ine . blur . framework . tick ing . Tick Ċ import Ġcom . bl ure ng ine . blur . session . Blur Player Ċ import Ġcom . google . common . collect . Hash Multimap Ċ import Ġcom . google . common . collect . Mult im aps Ċ import Ġcom . google . common . collect . Set Multimap Ċ import Ġorg . bukkit . event . EventHandler Ċ import Ġjava . util . Collections Ċ Ċ class ĠCool down s Manager ( module Manager : ĠModule Manager ) Ġ: ĠAbstract Component ( module Manager ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ co old own s Ġ= ĠHash Multimap . create < Blur Player , ĠCool down Entry >() ĊĠĠĠ Ġval Ġcool down s : ĠSet Multimap < Blur Player , ĠCool down Entry > Ġget () Ġ= ĠMult im aps . unmodifiable Set Multimap (_ co old own s ) ĊĊĠĠĠ Ġoperator Ġfun Ġget ( blur Player : ĠBl ur Player ): ĠSet < Cooldown Entry > Ġ= ĠCollections . unmodifiable Set (_ co old own s [ blur Player ]) ĊĊĠĠĠ Ġoperator Ġfun Ġget ( blur Player : ĠBl ur Player , Ġcool down : ĠCool down < Cooldown Entry >): ĠCool down Entry ? Ġ= Ġ_ co old own s [ blur Player ]. single Ġ{ Ġit . co old own Ġ== Ġcool down Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( blur Player : ĠBl ur Player , Ġcool down : ĠCool down < Cooldown Entry >) Ġ= Ġapply ( blur Player , Ġcool down ) ĊĊĠĠĠ Ġfun Ġremove ( blur Player : ĠBl ur Player , Ġcool down : ĠCool down < Cooldown Entry >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound Entry Ġ= Ġ_ co old own s [ blur Player ]. filter Ġ{ Ġit . co old own Ġ== Ġcool down Ġ}. first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġfound Entry ?. let Ġ{ Ġ_ co old own s . remove ( blur Player , Ġit ) Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All ( blur Player : ĠBl ur Player ): ĠMutable Set < Cooldown Entry > Ġ= Ġ_ co old own s . removeAll ( blur Player ) ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠCool down Entry > Ġapply ( blur Player : ĠBl ur Player , Ġcool down : ĠCool down < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġticks Ġ= Ġcool down . getC ool down For ( blur Player ) ĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġcool down . create Entry ( this , Ġblur Player , Ġticks ) ĊĠĠĠĠĠĠĠ Ġ_ co old own s . put ( blur Player , Ġentry ) ĊĠĠĠĠĠĠĠ Ġreturn Ġentry ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠCool down Entry > Ġis On Cooldown ( blur Player : ĠBl ur Player , Ġcool down : ĠCool down < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ co old own s . get ( blur Player ). any Ġ{ Ġit . co old own Ġ== Ġcool down Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Tick ĊĠĠĠ Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ co old own s . values (). forEach Ġ{ Ġit . ticks -- Ġ} ĊĠĠĠĠĠĠĠ Ġthis ._ co old own s . entries (). filter Ġ{ Ġit . value . ticks Ġ<= Ġ 0 Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . co old own . onComplete ( it . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ._ co old own s . remove ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon Player Leave Session ( event : ĠPlayer Leave Session Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Session ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ._ co old own s . removeAll ( event . blur Player ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ interface ĠCool down < out ĠT Ġ: ĠCool down Entry > Ġ{ ĊĠĠĠ Ġval Ġcool down Ticks : ĠInt ĊĊĠĠĠ Ġfun Ġcreate Entry ( manager : ĠCool down s Manager , Ġblur Player : ĠBl ur Player , Ġticks : ĠInt ): ĠT ĊĊĠĠĠ Ġfun Ġget Cooldown For ( blur Player : ĠBl ur Player ) Ġ= Ġcool down Ticks ĊĊĠĠĠ Ġfun Ġtick ( entry : Ġ@ Unsafe Variance ĠT ) Ġ{} ĊĠĠĠĠĊĠĠĠ Ġfun ĠonComplete ( entry : Ġ@ Unsafe Variance ĠT ) Ġ{} Ċ } Ċ Ċ interface ĠBasic Cooldown Ġ: ĠCool down < Cooldown Entry > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Entry ( manager : ĠCool down s Manager , Ġblur Player : ĠBl ur Player , Ġticks : ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠCool down Entry ( manager , Ġthis , Ġblur Player , Ġticks ) Ċ } Ċ Ċ open Ġclass ĠCool down Entry ( val Ġmanager : ĠCool down s Manager , Ġval Ġcool down : ĠCool down < Cooldown Entry >, Ġval Ġblur Player : ĠBl ur Player , Ġticks : ĠInt ) Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġ_ ticks Ġ= Ġticks ĊĠĠĠ Ġopen Ġvar Ġticks : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ ticks ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ticks Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcool down . tick ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ Ċ interface ĠExp Cooldown Ġ: ĠCool down < Exp Cooldown Entry > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Entry ( manager : ĠCool down s Manager , Ġblur Player : ĠBl ur Player , Ġticks : ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠExp Cooldown Entry ( manager , Ġthis , Ġblur Player , Ġticks ) ĊĊĠĠĠ Ġoverride Ġfun Ġtick ( entry : ĠExp Cooldown Entry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . tick ( entry ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! entry . active ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġexp : ĠFloat ĊĠĠĠĠĠĠĠ Ġif Ġ(! entry . increment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexp Ġ= ĠMath . min ( entry . ticks Ġ* Ġentry . increment ation , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexp Ġ= ĠMath . max (( entry . max Ticks Ġ- Ġentry . ticks ) Ġ* Ġentry . increment ation , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġentry . blur Player . player . exp Ġ= Ġexp ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠExp Cooldown Entry ( manager : ĠCool down s Manager , Ġcool down : ĠCool down < Exp Cooldown Entry >, Ġblur Player : ĠBl ur Player , Ġticks : ĠInt ) ĊĠĠĠ Ġ: ĠCool down Entry ( manager , Ġcool down , Ġblur Player , Ġticks ) Ġ{ ĊĊĠĠĠ Ġvar Ġincrement : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġincrement ation : ĠFloat Ġ= Ġ 1 . 0 f Ġ/ Ġticks ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġmax Ticks : ĠInt Ġ= Ġticks ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġincrement ation Ġ= Ġ 1 . 0 f Ġ/ Ġticks ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġticks : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsuper . ticks ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . ticks Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Ticks Ġ< Ġticks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ticks Ġ= Ġticks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ active : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġactive : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ active ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDe activate Ġall Ġother ĠExp Cooldown Entry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġmanager . co old own s . values (). filter Is Instance < Exp Cooldown Entry >(). filter Ġ{ Ġit Ġ!= Ġthis Ġ&& Ġit . blur Player Ġ== Ġblur Player }) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry ._ active Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ active Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ