package Ġcom . hand truth . mc . nbt . util Ċ Ċ import Ġcom . hand truth . mc . nbt . tags .* Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . modules . Serial Module Ċ Ċ internal Ġclass ĠN BT Decoder ( ĊĠĠĠ Ġval Ġtag : ĠTag <* >, ĊĠĠĠ Ġoverride Ġval Ġcontext : ĠSerial Module , ĊĠĠĠ Ġoverride Ġval Ġupdate Mode : ĠUpdate Mode Ċ ) Ġ: ĠDecoder Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbegin Structure ( descriptor : ĠSerial Descriptor , Ġvar arg Ġtype Params : ĠK Serializer < *> ): ĠComposite Decoder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( descriptor . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . LIST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList Tag < *> Ġ-> ĠN BT List Decoder ( tag , Ġcontext , Ġupdate Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByteArray Tag Ġ-> ĠN BT ByteArray Decoder ( tag , Ġcontext , Ġupdate Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Array Tag Ġ-> ĠN BT IntArray Decoder ( tag , Ġcontext , Ġupdate Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Array Tag Ġ-> ĠN BT Long Array Decoder ( tag , Ġcontext , Ġupdate Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠN BT Exception (" tag Ġ${ tag . id } Ġcan 't Ġbe Ġtreated Ġas Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . MAP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠCompound Tag , ĠMap :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Map Decoder ( tag , Ġcontext , Ġupdate Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . CLASS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠCompound Tag ) Ġ{ Ġ" structures Ġmay Ġonly Ġbe Ġassociated Ġwith ĠComp ount Tag " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Struct Decoder ( tag , Ġcontext , Ġupdate Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Boolean (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠByte Tag , ĠBoolean :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . byte . toInt () Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Byte (): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠByte Tag , ĠByte :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . byte ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Char (): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠShort Tag , ĠChar :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . short . to Char () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Double (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠDouble Tag , ĠDouble :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Enum ( enum Descriptor : ĠSerial Descriptor ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠString Tag , ĠInt :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġenum Descriptor . getElement Index ( tag . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Float (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠFloat Tag , ĠFloat :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠInt Tag , ĠInt :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . integer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Long (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠLong Tag , ĠLong :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . integer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode NotNull Mark () Ġ= Ġtag Ġis ĠEnd Tag ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Null () Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Short (): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠShort Tag , ĠShort :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . short ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( tag Ġis ĠString Tag , ĠString :: class , Ġtag . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Unit () Ġ= ĠUnit Ċ }