package Ġink . pt ms . che md ah . core . quest . addon . data Ċ Ċ import Ġcom . google . common . base . Enums Ċ import Ġink . pt ms . che md ah . core . Player Profile Ċ import Ġink . pt ms . che md ah . core . quest . Template Ċ import Ġink . pt ms . che md ah . core . quest . meta . Meta Type . Companion . type Ċ import Ġink . pt ms . che md ah . util . namespace Quest Ċ import Ġtab ool ib . common . platform . function . adapt Player Ċ import Ġtab ool ib . common . util . asList Ċ import Ġtab ool ib . common 5 . Co erce Ċ import Ġtab ool ib . common 5 . Time Cycle Ċ import Ġtab ool ib . common 5 . mirror Future Ċ import Ġtab ool ib . module . ke ther . Ke ther Shell Ċ import Ġtab ool ib . module . ke ther . print Ke ther ErrorMessage Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ data Ġclass ĠControl Result ( val Ġpass : ĠBoolean , Ġval Ġreason : ĠString ? Ġ= Ġnull ) Ċ Ċ enum Ġclass ĠControl Trigger Ġ{ ĊĊĠĠĠ ĠAC CEPT , ĠFAIL , ĠCOMP LETE ; ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Name ( name : ĠString ) Ġ= ĠEnums . get If Present ( Control Trigger :: class . java , Ġname . uppercase ()). or ( COMPLETE ) !! ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠControl Ġ{ ĊĊĠĠĠ Ġabstract Ġval Ġtrigger : ĠControl Trigger ? ĊĊĠĠĠ Ġabstract Ġfun Ġcheck ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ): ĠCompletableFuture < Control Result > ĊĊĠĠĠ Ġabstract Ġfun Ġsignature ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ) ĊĊĠĠĠ Ġprotected Ġfun ĠBoolean . to Result ( reason : ĠString ): ĠControl Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠControl Result ( this , Ġreason ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠControl Agent ( val Ġagent : ĠList < String >) Ġ: ĠControl () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtrigger : ĠControl Trigger ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġcheck ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ): ĠCompletableFuture < Control Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKe ther Shell . eval ( agent . asList (), Ġsender Ġ= Ġadapt Player ( profile . player ), Ġnamespace Ġ= Ġnamespace Quest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Frame (). variables (). also Ġ{ Ġvars Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvars . set ("@ Quest Container ", Ġtemplate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. then Apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCo erce . to Boolean ( it ). to Result (" agent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . print Ke ther ErrorMessage () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompletableFuture . completed Future ( Control Result ( false , Ġ" agent ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsignature ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ) Ġ{ ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠControl Cooldown ( val Ġtype : ĠControl Trigger , Ġval Ġtime : ĠTime Cycle , Ġval Ġgroup : ĠString ?) Ġ: ĠControl () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtrigger : ĠControl Trigger ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtype ĊĊĠĠĠ Ġoverride Ġfun Ġcheck ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ): ĠCompletableFuture < Control Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" quest . co old own .${ if Ġ( group Ġ!= Ġnull ) Ġ"@ $ group " Ġelse Ġtemplate . id }.${ type . name . lowercase () }" ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġprofile . persistent Data Container [ id , Ġ 0 L ]. to Long () ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( time . start ( start ). is Timeout ( start ). to Result (" co old own ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsignature ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" quest . co old own .${ if Ġ( group Ġ!= Ġnull ) Ġ"@ $ group " Ġelse Ġtemplate . id }.${ type . name . lowercase () }" ĊĠĠĠĠĠĠĠ Ġprofile . persistent Data Container [ id ] Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠControl Co exist ( val Ġtype : ĠMap < String , ĠInt >) Ġ: ĠControl () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtrigger : ĠControl Trigger ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġcheck ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ): ĠCompletableFuture < Control Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type . any Ġ{ Ġlabel Ġ-> Ġprofile . get Quest s (). count Ġ{ Ġlabel . key Ġin Ġit . template . type () Ġ} Ġ>= Ġlabel . value Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompletableFuture . completed Future ( Control Result ( false , Ġ" co exist ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompletableFuture . completed Future ( Control Result ( true , Ġ" co exist ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsignature ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ) Ġ{ ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠControl Repeat ( val Ġtype : ĠControl Trigger , Ġval Ġamount : ĠInt , Ġval Ġperiod : ĠTime Cycle ?, Ġval Ġgroup : ĠString ?) Ġ: ĠControl () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtrigger : ĠControl Trigger ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtype ĊĊĠĠĠ Ġoverride Ġfun Ġcheck ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ): ĠCompletableFuture < Control Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" quest . repeat .${ if Ġ( group Ġ!= Ġnull ) Ġ"@ $ group " Ġelse Ġtemplate . id }.${ type . name . lowercase () }" ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġprofile . persistent Data Container [" $ id . time ", Ġ 0 L ]. to Long () ĊĠĠĠĠĠĠĠ Ġ// Ġ è¶ħ åĩº éĩįå¤į éĻĲ æĹ¶ ĊĠĠĠĠĠĠĠ Ġif Ġ( period Ġ!= Ġnull Ġ&& Ġperiod . start ( time ). is Timeout ( time )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( Control Result ( true , Ġ" repeat ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future (( profile . persistent Data Container [" $ id . amount ", Ġ 0 ]. toInt () Ġ< Ġamount ). to Result (" repeat ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsignature ( profile : ĠPlayer Profile , Ġtemplate : ĠTemplate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" quest . repeat .${ if Ġ( group Ġ!= Ġnull ) Ġ"@ $ group " Ġelse Ġtemplate . id }.${ type . name . lowercase () }" ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġprofile . persistent Data Container [" $ id . time ", Ġ 0 L ]. to Long () ĊĠĠĠĠĠĠĠ Ġ// Ġ è¶ħ åĩº éĩįå¤į éĻĲ æĹ¶ ĊĠĠĠĠĠĠĠ Ġif Ġ( period Ġ!= Ġnull Ġ&& Ġperiod . start ( time ). is Timeout ( time )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ åıĺéĩı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile . persistent Data Container [" $ id . amount "] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile . persistent Data Container [" $ id . time "] Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿½åĬł æ¬¡æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile . persistent Data Container [" $ id . amount "] Ġ= Ġprofile . persistent Data Container [" $ id . amount ", Ġ 0 ]. toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠControl Operator ( val Ġtemplate : ĠTemplate , Ġval Ġcontrol : ĠList < Control > ?) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä»»åĬ¡ æĺ¯åĲ¦ è¢« éĻĲåĪ¶ æİ¥åıĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck ( profile : ĠPlayer Profile ): ĠCompletableFuture < Control Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= ĠCompletableFuture < Control Result >() ĊĠĠĠĠĠĠĠ Ġif Ġ( control Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( Control Result ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfuture ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmirror Future < Int >(" Meta Control : check ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprocess ( cur : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Ġ< Ġcontrol . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol [ cur ]. check ( profile , Ġtemplate ). then Apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . pass ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess ( cur Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( Control Result ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfuture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsignature ( profile : ĠPlayer Profile , Ġtype : ĠControl Trigger Ġ= ĠControl Trigger . COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontrol ?. filter Ġ{ Ġit . trigger Ġ== Ġnull Ġ|| Ġit . trigger Ġ== Ġtype Ġ} ?. forEach Ġ{ Ġit . signature ( profile , Ġtemplate ) Ġ} ĊĠĠĠ Ġ} Ċ }