package Ġorg . el k oser ver . server . context . model Ċ Ċ import Ġorg . el k oser ver . json . Encode Control Ċ import Ġorg . el k oser ver . json . Json Literal Array Ċ Ċ /** Ċ Ġ* ĠCollection Ġclass Ġto Ġhold Ġall Ġthe Ġmods Ġattached Ġto Ġa Ġbasic Ġobject . Ċ Ġ* Ċ Ġ* ĠAn Ġobject Ġonly Ġacquire s Ġa ĠMod Set Ġif Ġit Ġactually Ġhas Ġmods Ġattached . Ċ Ġ*/ Ċ class ĠMod Set Ġprivate Ġconstructor () Ġ{ ĊĠĠĠ Ġ/** ĠThe Ġmods Ġthemselves , Ġindexed Ġby Ġclass . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmy Mods : ĠMutable Map < Class <* >, ĠMod > Ġ= ĠHashMap () ĊĊĠĠĠ Ġ/** ĠA ux iliary Ġmods Ġtable , Ġto Ġlookup Ġmods Ġby Ġsuperclass . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġmy Super Mods : ĠMutable Map < Class <* >, ĠMod > Ġ= ĠHashMap () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmods Ġ ĠArray Ġof Ġmods Ġto Ġgenerate Ġthe Ġmod Ġset Ġfrom . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( mods : ĠArray < Mod > ?) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mods Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( mod Ġin Ġmods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Mod ( mod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġmod Ġto Ġthe Ġset . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmod Ġ ĠThe Ġmod Ġto Ġadd . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Mod ( mod : ĠMod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmod Class : ĠClass < *> Ġ= Ġmod . java Class ĊĠĠĠĠĠĠĠ Ġmy Mods [ mod Class ] Ġ= Ġmod ĊĠĠĠĠĠĠĠ Ġmod Class Ġ= Ġmod Class . super class ĊĠĠĠĠĠĠĠ Ġwhile Ġ( mod Class Ġ!= ĠMod :: class . java Ġ&& ĠMod :: class . java . isAssignableFrom ( mod Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Super Mods [ mod Class ] Ġ= Ġmod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmod Class Ġ= Ġmod Class . super class ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Mod ( mod : ĠMod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Mods . remove ( mod . java Class ) ĊĠĠĠĠĠĠĠ Ġrede termine Super Mods () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrede termine Super Mods () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Super Mods Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġmy Mods . forEach Ġ{ Ġ( mod Class : ĠClass <* >, Ġmod : ĠMod ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmod Class X Ġ= Ġmod Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( mod Class X Ġ!= ĠMod :: class . java Ġ&& ĠMod :: class . java . isAssignableFrom ( mod Class X )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Super Mods [ mod Class X ] Ġ= Ġmod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod Class X Ġ= Ġmod Class X . super class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġall Ġthese Ġmods Ġbecome Ġmods Ġof Ġsomething . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġobject Ġ ĠThe Ġobject Ġto Ġwhich Ġthese Ġmods Ġare Ġto Ġbe Ġattached . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġattach To (` object `: ĠBasic Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( mod Ġin Ġmy Mods . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmod . attach To (` object `) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncode Ġthis Ġmods Ġlist Ġas Ġa ĠJSON Literal Array Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontrol Ġ ĠEncode Ġcontrol Ġdetermining Ġwhat Ġflavor Ġof Ġencoding ĊĠĠĠĠ Ġ* Ġshould Ġbe Ġdone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠJSON Literal Array Ġobject Ġrepresenting Ġthis Ġmods Ġlist . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencode ( control : ĠEncode Control ): ĠJson Literal Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠJson Literal Array ( control ) ĊĠĠĠĠĠĠĠ Ġmy Mods . values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġcontrol . to Client () Ġ|| Ġ! it . is Ep hemeral Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach ( result :: addElement ) ĊĠĠĠĠĠĠĠ Ġresult . finish () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġmod Ġfrom Ġthe Ġset , Ġif Ġthere Ġis Ġone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġ ĠThe Ġclass Ġof Ġmod Ġs ought . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġmod Ġof Ġthe Ġgiven Ġclass , Ġor Ġnull Ġif Ġthere Ġis Ġno Ġsuch Ġmod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Mod > Ġget Mod ( type : ĠClass < T Mod >): ĠT Mod ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġvar Ġresult Ġ= Ġmy Mods [ type ] Ġas ĠT Mod ? ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġmy Super Mods [ type ] Ġas ĠT Mod ? ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠArrange Ġto Ġinform Ġany Ġmods Ġthat Ġhave Ġexpressed Ġan Ġinterest Ġthat Ġthe ĊĠĠĠĠ Ġ* Ġobject Ġthey Ġare Ġmod Ġof Ġis Ġnow Ġcomplete . Ġ ĠIf Ġthe Ġmod Ġis Ġa ĊĠĠĠĠ Ġ* ĠContext Shutdown Watcher , Ġautomatically Ġregister Ġinterest Ġin Ġthe Ġshutdown ĊĠĠĠĠ Ġ* Ġevent Ġwith Ġthe Ġcontext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobject Is Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( mod Ġin Ġmy Mods . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mod Ġis ĠObject Completion Watcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod .` object ` (). context or (). add Pending Object Completion Watcher ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod Ġas ĠObject Completion Watcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mod Ġis ĠContext Shutdown Watcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod . context (). register Context Shutdown Watcher ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod Ġas ĠContext Shutdown Watcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġfrom Ġthe Ġmods Ġlist Ġany Ġmods Ġthat Ġare Ġmarked Ġas Ġbeing Ġep hemeral . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpurge Ep hemeral Mods () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Mods . values . remove If ( Mod :: is Ep hemeral ) ĊĠĠĠĠĠĠĠ Ġrede termine Super Mods () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd Ġa Ġmod Ġto Ġa Ġset , Ġcreating Ġthe Ġset Ġif Ġnecessary Ġto Ġdo Ġso . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmod Set Ġ ĠThe Ġset Ġto Ġwhich Ġthe Ġmod Ġis Ġto Ġbe Ġadded , Ġor Ġnull Ġif Ġno ĊĠĠĠĠĠĠĠĠ Ġ* Ġset Ġexists Ġyet . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmod Ġ ĠThe Ġmod Ġto Ġadd . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe Ġset Ġ( created Ġif Ġnecessary ), Ġwith Ġ' mod ' Ġin Ġit . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwith Mod ( mod Set : ĠMod Set ?, Ġmod : ĠMod ): ĠMod Set Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( mod Set Ġ?: ĠMod Set ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Mod ( mod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ