package Ġink . pt ms . che md ah . module . party Ċ Ċ import Ġink . pt ms . che md ah . api . Che md ah API . che md ah Profile Ċ import Ġink . pt ms . che md ah . api . Che md ah API . is Che md ah Profile Loaded Ċ import Ġink . pt ms . che md ah . api . event . Party Hook Event Ċ import Ġink . pt ms . che md ah . api . event . collect . Objective Events Ċ import Ġink . pt ms . che md ah . api . event . collect . Quest Events Ċ import Ġink . pt ms . che md ah . core . quest . Agent Type Ċ import Ġink . pt ms . che md ah . core . quest . Quest Ċ import Ġink . pt ms . che md ah . core . quest . addon . Addon Party . Companion . party Ċ import Ġink . pt ms . che md ah . module . Module Ċ import Ġink . pt ms . che md ah . module . Module . Companion . register Ċ import Ġorg . bukkit . entity . Player Ċ import Ġtab ool ib . common . platform . Aw ake Ċ import Ġtab ool ib . common . platform . event . Subscribe Event Ċ import Ġtab ool ib . module . configuration . Config Ċ import Ġtab ool ib . module . configuration . Sec ured File Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ @ Aw ake Ċ object ĠParty System Ġ: ĠModule Ġ{ ĊĊĠĠĠ Ġ@ Config (" module / party . yml ") ĊĠĠĠ Ġlateinit Ġvar Ġconf : ĠSec ured File ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġhooks Ġ= ĠConcurrent HashMap < String , ĠParty >() ĊĊĠĠĠ Ġval Ġhook : ĠParty ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġconf . getString (" default . plugin ", Ġ"") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hooks . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhooks [ id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparty Ġ= ĠParty Hook Event ( conf . getString (" default . plugin ", Ġ"") !! ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( party Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhooks [ id ] Ġ= Ġparty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparty ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä»»åĬ¡ ä¸ŃçļĦ æīĢæľī æĪĲåĳĺ ĊĠĠĠĠ Ġ* Ġ@ param Ġself Ġæĺ¯åĲ¦ åĮħåĲ« èĩªå·± ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠQuest . get Members ( self : ĠBoolean Ġ= Ġfalse ): ĠSet < Player > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= ĠHashSet < Player >() ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġprofile . player ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ ĠParty Ġ ç»Ħä»¶ ĊĠĠĠĠĠĠĠ Ġval Ġparty Addon Ġ= Ġtemplate . party () ĊĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ åħ±äº« ä»»åĬ¡ ĊĠĠĠĠĠĠĠ Ġif Ġ( party Addon ?. share Ġ== Ġtrue Ġ&& Ġ(! party Addon . share Only Leader Ġ|| Ġplayer . get Party ()?. is Leader ( player ) Ġ== Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmembers . addAll ( player . get Party Members ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( self ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmembers . add ( player ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmembers . filter Ġ{ Ġit . is Che md ah Profile Loaded Ġ}. toSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠéĢļè¿ĩ æīĢæľī æĶ¯æĮģ çļĦ æıĴä»¶ èİ·åıĸ çİ© å®¶ å½ĵåīį æīĢåľ¨ çļĦ éĺŁ ä¼ į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠPlayer . get Party (): ĠParty . Party Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhook ?. get Party ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ éĺŁ ä¼ į ä¸ŃçļĦ æīĢæľī æĪĲåĳĺ ĊĠĠĠĠ Ġ* Ġ@ param Ġself Ġæĺ¯åĲ¦ åĮħåĲ« èĩªå·± ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠPlayer . get Party Members ( self : ĠBoolean Ġ= Ġfalse ): ĠSet < Player > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= ĠHashSet < Player >() ĊĠĠĠĠĠĠĠ Ġval Ġteam Ġ= Ġget Party () ĊĠĠĠĠĠĠĠ Ġif Ġ( team Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmembers . addAll ( team . get Members ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleader Ġ= Ġteam . get Leader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( leader Ġ!= Ġnull Ġ&& Ġleader Ġin Ġmembers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers . add ( leader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! self ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers . remove ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmembers ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshare Quest s ( quest s : ĠMutable List < Quest >, Ġsh arer : ĠPlayer , Ġleader : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sh arer . is Che md ah Profile Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh arer . che md ah Profile . get Quest s (). forEach Ġ{ Ġquest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparty Addon Ġ= Ġquest . template . party () Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ åĪĨäº« ä»»åĬ¡ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( party Addon . share Ġ&& Ġ(! party Addon . share Only Leader Ġ|| Ġleader )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ å·² æĭ¥ æľī è¯¥ ä»»åĬ¡ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( quest s . none Ġ{ Ġit . id Ġ== Ġquest . id Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquest s . add ( quest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠQuest Events . Collect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġteam Ġ= Ġe . player Profile . player . get Party () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġleader Ġ= Ġteam . get Leader () ĊĠĠĠĠĠĠĠ Ġif Ġ( leader Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Quest s ( e . quest s , Ġleader , Ġleader Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġteam . get Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member . unique Id Ġ!= Ġe . player Profile . unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshare Quest s ( e . quest s , Ġmember ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠQuest Events . Fail . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . quest . template . agent ( member . che md ah Profile , ĠAgent Type . QUEST _ FAILED , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠQuest Events . Restart . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . quest . template . agent ( member . che md ah Profile , ĠAgent Type . QUEST _ RE START , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠQuest Events . Accept . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . quest . template . agent ( member . che md ah Profile , ĠAgent Type . QUEST _ ACCEPT ED , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠQuest Events . Complete . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . quest . template . agent ( member . che md ah Profile , ĠAgent Type . QUEST _ COMPLETED , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠObjective Events . Restart . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . task . agent ( member . che md ah Profile , ĠAgent Type . TASK _ RE STARTED , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠObjective Events . Continue . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . task . agent ( member . che md ah Profile , ĠAgent Type . TASK _ CONT IN U ED , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠObjective Events . Complete . Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . quest . profile . player . get Party Members (). forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . task . agent ( member . che md ah Profile , ĠAgent Type . TASK _ COMPLETED , Ġ" party ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠObjective Events . Continue . Pre ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! e . quest . is Owner ( e . player Profile . player ) Ġ&& Ġ( e . quest . template . party ()?. can Continue Ġ== Ġfalse Ġ|| Ġe . task . party ()?. can Continue Ġ== Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequire Members Ġ= Ġe . task . party ()?. require Members Ġ?: Ġe . quest . template . party ()?. require Members Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( require Members Ġ> Ġ 0 Ġ&& Ġrequire Members Ġ< Ġe . player Profile . player . get Party Members (). size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠObjective Events . Complete . Pre ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequire Members Ġ= Ġe . task . party ()?. require Members Ġ?: Ġe . quest . template . party ()?. require Members Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( require Members Ġ> Ġ 0 Ġ&& Ġrequire Members Ġ< Ġe . player Profile . player . get Party Members (). size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }