/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 , ĠVal ap he e . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . val ap he e . t esseract . command . net Ċ Ċ import Ġcom . val ap he e . t esseract . net . Packet Ċ import Ġcom . val ap he e . t esseract . net . Packet Buffer Ċ import Ġcom . val ap he e . t esseract . net . Packet Handler Ċ import Ġcom . val ap he e . t esseract . net . Packet Reader Ċ import Ġcom . val ap he e . t esseract . net . Restrict Ċ import Ġcom . val ap he e . t esseract . net . Restriction Ċ import Ġcom . val ap he e . t esseract . util . safe List Ċ import Ġcom . val ap he e . t esseract . util . Registry Ċ Ċ /** Ċ Ġ* Ġ@ author ĠKevin ĠL ud w ig Ċ Ġ*/ Ċ @ Restrict ( Restriction . To Client ) Ċ class ĠCommands Packet ( ĊĠĠĠ Ġval Ġcommands : ĠList < Command >, ĊĠĠĠ Ġval Ġconstraints : ĠList < Enumeration Constraint > Ċ ) Ġ: ĠPacket () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġid Ġget () Ġ= Ġ 0 x 4 C ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( buffer : ĠPacket Buffer , Ġversion : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġenum er ations Map Ġ= Ġmutable Map Of < String , ĠEnumeration >() ĊĠĠĠĠĠĠĠ Ġval Ġsoft Enumer ations Map Ġ= Ġmutable Map Of < String , ĠEnumeration >() ĊĠĠĠĠĠĠĠ Ġval Ġpost fixes Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġcommands . forEach Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . aliases ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . addAll ( it . values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum er ations Map [ it . name ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . over loads . forEach Ġ{ Ġoverload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverload . forEach Ġ{ Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . enumeration ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . soft ) Ġsoft Enumer ations Map [ it . name ] Ġ= Ġit Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . addAll ( it . values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum er ations Map [ it . name ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . postfix ?. let Ġ{ Ġpost fixes . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( values . size ) ĊĠĠĠĠĠĠĠ Ġvalues . forEach Ġ{ Ġbuffer . writeString ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( post fixes . size ) ĊĠĠĠĠĠĠĠ Ġpost fixes . forEach Ġ{ Ġbuffer . writeString ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġindex Writer : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . size Ġ<= Ġ 0 xFF Ġ-> Ġbuffer :: write Byte ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . size Ġ<= Ġ 0 xFFFF Ġ-> Ġbuffer :: write Short LE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbuffer :: writeInt LE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( enum er ations Map . values . size ) ĊĠĠĠĠĠĠĠ Ġenum er ations Map . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeString ( it . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( it . values . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . values . forEach Ġ{ Ġindex Writer ( values . indexOf ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( commands . size ) ĊĠĠĠĠĠĠĠ Ġcommands . forEach Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeString ( command . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeString ( command . description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġ 4 4 8 ) Ġbuffer . write Short LE Flags ( command . flags ) Ġelse Ġbuffer . write Byte Flags ( command . flags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Byte ( command . permission . ordinal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeInt LE ( enum er ations Map . values . indexOf ( command . aliases )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( command . over loads . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . over loads . forEach Ġ{ Ġoverload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( overload . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverload . forEach Ġ{ Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeString ( parameter . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . writeInt LE ( parameter . postfix ?. let Ġ{ Ġpost fixes . indexOf ( it ) Ġor Ġparameter Flag Post fix Ġ} Ġ?: Ġparameter . enumeration ?. let Ġ{ Ġ( if Ġ( it . soft ) Ġsoft Enumer ations Map . values . indexOf ( parameter . enumeration ) Ġor Ġparameter Flag Soft Enumeration Ġelse Ġenum er ations Map . values . indexOf ( parameter . enumeration ) Ġor Ġparameter Flag Enumeration ) Ġor Ġparameter Flag Valid Ġ} Ġ?: Ġparameter . type ?. let Ġ{ Ġ/* ( if Ġ( version Ġ>= Ġ 4 1 9 ) Ġparameter Types Ġelse Ġparameter Types Pre 4 1 9 ). getKey ( */ it /* ) */ Ġor Ġparameter Flag Valid Ġ} Ġ?: Ġerror (" Unknown Ġtype Ġin Ġ${ parameter . name } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Boolean ( parameter . optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write Byte Flags ( parameter . options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( soft Enumer ations Map . values . size ) ĊĠĠĠĠĠĠĠ Ġsoft Enumer ations Map . values . forEach Ġ{ Ġbuffer . write Enumeration ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . write Var UInt ( constraints . size ) ĊĠĠĠĠĠĠĠ Ġconstraints . forEach Ġ{ Ġbuffer . write Enumeration Constraint ( it , Ġvalues , Ġenum er ations Map . values ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( handler : ĠPacket Handler ) Ġ= Ġhandler . commands ( this ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Commands Packet ( commands =$ commands , Ġconstraints =$ constraints )" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġparameter Types Pre 4 1 9 Ġ= ĠRegistry < Parameter . Type >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 1 ] Ġ= ĠParameter . Type . Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 2 ] Ġ= ĠParameter . Type . Float ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 3 ] Ġ= ĠParameter . Type . Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 4 ] Ġ= ĠParameter . Type . Wildcard Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 5 ] Ġ= ĠParameter . Type . Operator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 6 ] Ġ= ĠParameter . Type . Target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 7 ] Ġ= ĠParameter . Type . Wildcard Target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 E ] Ġ= ĠParameter . Type . FilePath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 1 D ] Ġ= ĠParameter . Type . String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 5 ] Ġ= ĠParameter . Type . Int 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 6 ] Ġ= ĠParameter . Type . Float 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 9 ] Ġ= ĠParameter . Type . Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 B ] Ġ= ĠParameter . Type . Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 F ] Ġ= ĠParameter . Type . Json ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 3 6 ] Ġ= ĠParameter . Type . Command ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġparameter Types Ġ= ĠRegistry < Parameter . Type >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 1 ] Ġ= ĠParameter . Type . Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 2 ] Ġ= ĠParameter . Type . Float ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* this [ 0 x 0 3 ] Ġ= ĠParameter . Type . Float */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 4 ] Ġ= ĠParameter . Type . Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 5 ] Ġ= ĠParameter . Type . Wildcard Integer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 6 ] Ġ= ĠParameter . Type . Operator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 7 ] Ġ= ĠParameter . Type . Target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 0 9 ] Ġ= Ġ/* Parameter . Type . Target */ Parameter . Type . Wildcard Target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 1 0 ] Ġ= ĠParameter . Type . FilePath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 0 ] Ġ= ĠParameter . Type . String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 8 ] Ġ= ĠParameter . Type . Int 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 9 ] Ġ= ĠParameter . Type . Float 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 C ] Ġ= ĠParameter . Type . Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 2 E ] Ġ= ĠParameter . Type . Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 3 2 ] Ġ= ĠParameter . Type . Json ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 3 C ] Ġ= ĠParameter . Type . BlockState ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 x 3 F ] Ġ= ĠParameter . Type . Command ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġparameter Flag Valid Ġ= Ġ 1 Ġshl Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġparameter Flag Enumeration Ġ= Ġ 1 Ġshl Ġ 2 1 ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġparameter Flag Post fix Ġ= Ġ 1 Ġshl Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġparameter Flag Soft Enumeration Ġ= Ġ 1 Ġshl Ġ 2 6 ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ author ĠKevin ĠL ud w ig Ċ Ġ*/ Ċ object ĠCommands Packet Reader Ġ: ĠPacket Reader Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġread ( buffer : ĠPacket Buffer , Ġversion : ĠInt ): ĠCommands Packet Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ Ġbuffer . readString () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpost fixes Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ Ġbuffer . readString () Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠindexReader : Ġ() Ġ-> ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . size Ġ<= Ġ 0 xFF Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġbuffer . read Unsigned Byte (). toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . size Ġ<= Ġ 0 xFFFF Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġbuffer . read Unsigned Short LE () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġbuffer . readInt LE () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġenum er ations Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ ĠEnumeration ( buffer . readString (), Ġsafe List ( buffer . read Var UInt ()) Ġ{ Ġvalues [ index Reader ()] Ġ}, Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcommand Structures Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġbuffer . readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġbuffer . readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġif Ġ( version Ġ>= Ġ 4 4 8 ) Ġbuffer . read Short LE Flags < Command . Flag >() Ġelse Ġbuffer . read Byte Flags () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Ġ= ĠPermission . values ()[ buffer . read Byte (). toInt ()] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaliases Index Ġ= Ġbuffer . readInt LE () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverload Structures Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsafe List ( buffer . read Var UInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Name Ġ= Ġbuffer . readString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġbuffer . readInt LE () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptional Ġ= Ġbuffer . read Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġbuffer . read Byte Flags < Parameter . Option >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter . Structure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptional , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġand ĠCommands Packet . parameter Flag Enumeration Ġ!= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġand ĠCommands Packet . parameter Flag Soft Enumeration Ġ!= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġand ĠCommands Packet . parameter Flag Post fix Ġ!= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġand Ġ 0 xFFFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommand . Structure ( name , Ġdescription , Ġflags , Ġpermission , Ġaliases Index , Ġoverload Structures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsoft Enumer ations Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ Ġbuffer . read Enumeration ( true ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= Ġsafe List ( buffer . read Var UInt ()) Ġ{ Ġbuffer . read Enumeration Constraint ( values , Ġenum er ations ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCommands Packet ( command Structures . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaliases Index Ġ= Ġit . aliases Index ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommand ( it . name , Ġit . description , Ġit . flags , Ġit . permission , Ġif Ġ( aliases Index Ġ== Ġ- 1 ) Ġnull Ġelse Ġenum er ations [ aliases Index ], Ġit . overload Structures . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpostfix : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġenumeration : ĠEnumeration ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtype : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . postfix Ġ-> Ġpostfix Ġ= Ġpost fixes [ it . index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . enumeration Ġ-> Ġenumeration Ġ= Ġenum er ations [ it . index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . soft Enumeration Ġ-> Ġenumeration Ġ= Ġsoft Enumer ations [ it . index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtype Ġ= Ġit . index /* if Ġ( version Ġ>= Ġ 4 1 9 ) ĠCommands Packet . parameter Types [ overload Structure . index ] Ġelse ĠCommands Packet . parameter Types Pre 4 1 9 [ overload Structure . index ] */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ( it . name , Ġit . optional , Ġit . options , Ġenumeration , Ġpostfix , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġconstraints ) ĊĠĠĠ Ġ} Ċ } Ċ