package Ġcom . gal ar z aa . t ib i akt . core . parsers Ċ Ċ import Ġcom . gal ar z aa . t ib i akt . core . builders . World Builder Ċ import Ġcom . gal ar z aa . t ib i akt . core . builders . world Builder Ċ import Ġcom . gal ar z aa . t ib i akt . core . enums . B att l Eye Type Ċ import Ġcom . gal ar z aa . t ib i akt . core . enums . String Enum Ċ import Ġcom . gal ar z aa . t ib i akt . core . enums . Transfer Type Ċ import Ġcom . gal ar z aa . t ib i akt . core . exceptions . Parsing Exception Ċ import Ġcom . gal ar z aa . t ib i akt . core . models . world . World Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . clean Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . get Containing Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . offset Start Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . parse Integer Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . parse Tables Map Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . parse T ib ia DateTime Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . parse T ib ia Full Date Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . remove Ċ import Ġcom . gal ar z aa . t ib i akt . core . utils . rows Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Document Ċ import Ġorg . js oup . nodes . Element Ċ import Ġjava . time . Year Month Ċ Ċ object ĠWorld Parser Ġ: ĠParser < World ?> Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrecord Regex Ġ= ĠRegex (""" (? < count >[ \ d ., ]+) Ġplayers Ġ\( on Ġ(? < date >[ ^ )] +)\ ) """) ĊĠĠĠ Ġprivate Ġval Ġb att l Eye Regex Ġ= ĠRegex (""" since Ġ([ ^ . ]+ ). """) ĊĊĠĠĠ Ġoverride Ġfun Ġfrom Content ( content : ĠString ): ĠWorld ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument : ĠDocument Ġ= ĠJ soup . parse ( content , Ġ"", Ġorg . js oup . parser . Parser . xml Parser ()) ĊĠĠĠĠĠĠĠ Ġval Ġbox Content Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . select First (" div . Box Content ") Ġ?: Ġthrow ĠParsing Exception (" Box Content Ġcontainer Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġval Ġtables Ġ= Ġbox Content . parse Tables Map (" table . Table 1 , Ġtable . Table 2 ") ĊĠĠĠĠĠĠĠ Ġtables [" Error "] ?. apply Ġ{ Ġreturn Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtables [" World ĠSelection "] ?. select First (" option [ selected ]") ?. text ()?. clean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠParsing Exception (" World ĠSelection Ġtable Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġworld Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtables [" World ĠInformation "] ?. apply Ġ{ Ġbuilder . parse World Information ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġtables . get Containing (" Players ĠOnline ") ?. apply Ġ{ Ġbuilder . parse Online Players Table ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWorld Builder . parse Online Players Table ( table : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġtable . rows (). offset Start ( 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġrow . select (" td ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( name , Ġlevel , Ġv ocation ) Ġ= Ġcolumns . map Ġ{ Ġit . text (). clean () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Online Player ( name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Enum . from Value ( v ocation ) Ġ?: Ġthrow ĠParsing Exception (" unknown Ġv ocation : Ġ$ v ocation ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWorld Builder . parse World Information ( table : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġtable . rows (). offset Start ( 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġrow . select (" td ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ( field , Ġvalue ) Ġ= Ġcolumns . map Ġ{ Ġit . text (). clean () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġfield . remove (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Status " Ġ-> Ġis Online Ġ= Ġvalue . contains (" online ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Players ĠOnline " Ġ-> Ġonline Count Ġ= Ġvalue . parse Integer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Online ĠRecord " Ġ-> Ġparse Online Record ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Creation ĠDate " Ġ-> Ġparse Creation Date ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Location " Ġ-> Ġlocation Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pv P ĠType " Ġ-> Ġp vp Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Enum . from Value ( value ) Ġ?: Ġthrow ĠParsing Exception (" unknown Ġp vp Ġtype Ġfound : Ġ$ value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Prem ium ĠType " Ġ-> Ġis Prem ium Restricted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Transfer ĠType " Ġ-> Ġparse Transfer Type ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" World ĠQuest ĠTitle s " Ġ-> Ġif Ġ(! value . contains (" has Ġno Ġtitle ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . split ("," ). map Ġ{ Ġworld Quest ( it . clean ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B att l Eye ĠStatus " Ġ-> Ġparse B att l Eye Status ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Game ĠWorld ĠType " Ġ-> Ġis Experimental Ġ= Ġ( value . contains (" experimental ", Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWorld Builder . parse Transfer Type ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransfer Type Ġ= Ġif Ġ( value . contains (" locked ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransfer Type . LOCK ED ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value . contains (" blocked ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransfer Type . BLOCK ED ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransfer Type . REG ULAR ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWorld Builder . parse B att l Eye Status ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb att l Eye Regex . find ( value )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġsince ) Ġ= Ġthis . group Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( since . contains (" release ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb att l Eye Type Ġ= ĠB att l Eye Type . GREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb att l Eye StartDate Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb att l Eye Type Ġ= ĠB att l Eye Type . YELLOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb att l Eye StartDate Ġ= Ġparse T ib ia Full Date ( since ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb att l Eye Type Ġ= ĠB att l Eye Type . UN PROTECT ED ĊĠĠĠĠĠĠĠ Ġb att l Eye StartDate Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWorld Builder . parse Online Record ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Regex . find ( value )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġcount , Ġdate ) Ġ= Ġthis . group Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġonline Record Count Ġ= Ġcount . parse Integer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġonline Record DateTime Ġ= Ġparse T ib ia DateTime ( date ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWorld Builder . parse Creation Date ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( month , Ġyear ) Ġ= Ġvalue . split ("/ "). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġcreation Date Ġ= ĠYear Month . of ( if Ġ( year Ġ> Ġ 9 0 ) Ġyear Ġ+ Ġ 1 9 0 0 Ġelse Ġyear Ġ+ Ġ 2 0 0 0 , Ġmonth ) ĊĊĠĠĠ Ġ} Ċ }