/* Ċ Ġ* ĠTer re Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) ĠL an tern Power ed Ġ< https :// www . lan tern powered . org > Ċ Ġ* ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* ĠThis Ġwork Ġis Ġlicensed Ġunder Ġthe Ġterms Ġof Ġthe ĠMIT ĠLicense Ġ( MIT ). ĠFor Ċ Ġ* Ġa Ġcopy , Ġsee Ġ' LICENSE . txt ' Ġor Ġ< https :// opensource . org / licenses / MIT >. Ċ Ġ*/ Ċ package Ġorg . lan tern powered . ter re . impl . network . packet Ċ Ċ import Ġio . netty . handler . codec . Decoder Exception Ċ import Ġorg . lan tern powered . ter re . Protocol Version Ċ import Ġorg . lan tern powered . ter re . impl . network . Packet Ċ import Ġorg . lan tern powered . ter re . impl . network . Protocol Versions Ċ import Ġorg . lan tern powered . ter re . impl . network . buffer . readString Ċ import Ġorg . lan tern powered . ter re . impl . network . buffer . writeString Ċ import Ġorg . lan tern powered . ter re . impl . network . Packet Decoder Ċ import Ġorg . lan tern powered . ter re . impl . network . Packet Encoder Ċ import Ġorg . lan tern powered . ter re . util . Version Ċ Ċ internal Ġdata Ġclass ĠConnection Request Packet ( val Ġversion : ĠProtocol Version ) Ġ: ĠPacket Ċ Ċ private Ġconst Ġval Ġvanilla Version Prefix Ġ= Ġ" T err aria " Ċ Ċ private Ġconst Ġval Ġt Mod Loader Version Prefix Ġ= Ġ" t Mod Loader " Ċ private Ġval Ġt Mod Loader Version Regex Ġ= ĊĠ Ġ"^ $ t Mod Loader Version Prefix Ġv ([ 0 - 9 . ]* )( ?: Ġ([ ^ \\ s ]* )) ?( ?: ĠBeta Ġ([ 0 - 9 ]* )) ?\ $ ". to Regex () Ċ Ċ internal Ġval ĠConnection Request Decoder Ġ= ĠPacket Decoder Ġ{ Ġbuf Ġ-> ĊĠ Ġval Ġvalue Ġ= Ġbuf . readString () ĊĊĠ Ġval Ġclient Version Ġ= Ġrun Ġ{ ĊĠĠĠ Ġif Ġ( value . startsWith ( van illa Version Prefix )) Ġ{ ĊĠĠĠĠĠ Ġval Ġprotocol Ġ= Ġvalue . substring ( van illa Version Prefix . length ). toInt () ĊĠĠĠĠĠ ĠProtocol Versions [ protocol ] Ġ?: ĠProtocol Version . Van illa ( Version ( 0 ), Ġprotocol ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( value . startsWith ( t Mod Loader Version Prefix )) Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġt Mod Loader Version Regex . match Ent ire ( value ) ĊĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠVersion ( result . group Values [ 1 ]) ĊĠĠĠĠĠĠĠ Ġval Ġbranch Ġ= Ġresult . groups [ 2 ]?. value ĊĠĠĠĠĠĠĠ Ġval Ġbeta Ġ= Ġresult . groups [ 3 ]?. value ?. toInt () ĊĠĠĠĠĠĠĠ ĠProtocol Version . T Mod Loader ( version , Ġbranch , Ġbeta ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠDecoder Exception (" Invalid Ġt Mod Loader Ġclient Ġversion : Ġ$ value ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġthrow ĠDecoder Exception (" Unsupported Ġclient : Ġ$ value ") ĊĠ Ġ} ĊĊĠ ĠConnection Request Packet ( client Version ) Ċ } Ċ Ċ internal Ġval ĠConnection Request Encoder Ġ= ĠPacket Encoder < Connection Request Packet > Ġ{ Ġbuf , Ġpacket Ġ-> ĊĠ Ġval Ġvalue Ġ= Ġwhen Ġ( val Ġversion Ġ= Ġpacket . version ) Ġ{ ĊĠĠĠ Ġis ĠProtocol Version . Van illa Ġ-> Ġ"$ van illa Version Prefix ${ version . protocol }" ĊĠĠĠ Ġis ĠProtocol Version . T Mod Loader Ġ-> Ġ{ ĊĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder ("$ t Mod Loader Version Prefix Ġv ${ version . version }") ĊĠĠĠĠĠ Ġif Ġ( version . branch Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ${ version . branch }") ĊĠĠĠĠĠ Ġif Ġ( version . beta Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (" ĠBeta Ġ${ version . beta }") ĊĠĠĠĠĠ Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġbuf . writeString ( value ) Ċ } Ċ