package Ġio . github . mr png . nbt . api Ċ Ċ import Ġio . github . mr png . nbt .* Ċ import Ġio . github . mr png . nbt . Tag Type .* Ċ import Ġio . github . mr png . nbt . implementation .* Ċ Ċ @ Dsl Marker Ċ annotation Ġclass ĠNbt Builder Ċ Ċ @ N bt Builder Ċ inline Ġfun Ġn bt ( Ċ ĉ name : ĠString ? Ġ= Ġnull , Ċ ĉ entries : ĠCompound Map Ġ= Ġempty Map (), Ċ ĉ len ient : ĠBoolean Ġ= Ġfalse , Ċ ĉ builder : ĠTag Compound Builder . () Ġ-> ĠUnit Ċ ) Ġ= ĠTag Compound Builder ( name , Ġentries ). apply ( builder ). build () Ċ Ċ @ N bt Builder Ċ open Ġclass ĠTag Compound Builder ( private Ġval Ġname : ĠString ?, Ġentries : ĠCompound Map ) Ġ{ ĊĉĊ ĉ @ Published Api Ġinternal Ġval Ġentries Ġ= Ġmutable Map Of < String , ĠTag Any >(). apply Ġ{ Ġput All ( entries ) Ġ} ĊĉĊ ĉ @ N bt Builder Ġval Ġbyte Ġ= ĠTag Compound Entry < Byte > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Byte ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġshort Ġ= ĠTag Compound Entry < Short > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Short ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġint Ġ= ĠTag Compound Entry < Int > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Int ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġlong Ġ= ĠTag Compound Entry < Long > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Long ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġfloat Ġ= ĠTag Compound Entry < Float > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Float ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġdouble Ġ= ĠTag Compound Entry < Double > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Double ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval ĠbyteArray Ġ= ĠTag Compound Entry < ByteArray > Ġ{ Ġvalue , Ġname Ġ-> ĠTag ByteArray ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġstring Ġ= ĠTag Compound Entry < String > Ġ{ Ġvalue , Ġname Ġ-> ĠTag String ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġlist Ġ= ĠTag Compound ListEntry () Ċ ĉ @ N bt Builder Ġval ĠintArray Ġ= ĠTag Compound Entry < IntArray > Ġ{ Ġvalue , Ġname Ġ-> ĠTag IntArray ( value , Ġname ) Ġ} Ċ ĉ @ N bt Builder Ġval Ġlong Array Ġ= ĠTag Compound Entry < Long Array > Ġ{ Ġvalue , Ġname Ġ-> ĠTag Long Array ( value , Ġname ) Ġ} ĊĉĊ ĉ @ N bt Builder Ċ ĉ inline Ġfun Ġcompound ( name : ĠString , Ġentries : ĠCompound Map Ġ= Ġempty Map (), Ġbuilder : ĠTag Compound Builder . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ this . entries [ name ] Ġ= ĠTag Compound Builder ( name , Ġentries ). apply ( builder ). build () Ċ ĉ } ĊĉĊ ĉ @ N bt Builder Ċ ĉ inline Ġfun Ġcompound ( entries : ĠCompound Map Ġ= Ġempty Map (), Ġbuilder : ĠTag Compound Builder . () Ġ-> ĠUnit ) Ġ= Ċĉ ĉ Tag Compound Builder ( null , Ġentries ). apply ( builder ). build () ĊĉĊ ĉ open Ġfun Ġbuild () Ġ= ĠTag Compound ( entries , Ġname ) ĊĉĊ ĉ inner Ġclass ĠTag Compound Entry < T : ĠAny >( private Ġval Ġinitializer : Ġ( T , ĠString ) Ġ-> ĠTag Any ) Ġ{ ĊĉĉĊĉ ĉ operator Ġfun Ġset ( name : ĠString , Ġvalue : ĠT ) Ġ{ Ċĉĉ ĉ entries [ name ] Ġ= Ġinitializer ( value , Ġname ) Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ inner Ġclass ĠTag Compound ListEntry Ġ{ ĊĉĉĊĉ ĉ fun Ġto ListOf Byte ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Byte ( it Ġas ĠByte ) Ġ} Ċĉ ĉ fun Ġto ListOf Short ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Short ( it Ġas ĠShort ) Ġ} Ċĉ ĉ fun Ġto ListOf Int ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Int ( it Ġas ĠInt ) Ġ} Ċĉ ĉ fun Ġto ListOf Long ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Long ( it Ġas ĠLong ) Ġ} Ċĉ ĉ fun Ġto ListOf Float ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Float ( it Ġas ĠFloat ) Ġ} Ċĉ ĉ fun Ġto ListOf Double ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Double ( it Ġas ĠDouble ) Ġ} Ċĉ ĉ fun Ġto ListOf ByteArray ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag ByteArray ( it Ġas ĠByteArray ) Ġ} Ċĉ ĉ fun Ġto ListOf String ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag String ( it Ġas ĠString ) Ġ} Ċĉ ĉ fun Ġto ListOf IntArray ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag IntArray ( it Ġas ĠInt Array ) Ġ} Ċĉ ĉ fun Ġto ListOf Long Array ( list : ĠList <* >) Ġ= Ġlist . map Ġ{ ĠTag Long Array ( it Ġas ĠLong Array ) Ġ} ĊĉĉĊĉ ĉ inline Ġoperator Ġfun Ġ< re ified ĠT > Ġset ( name : ĠString , Ġvalue : ĠList < T >) Ġ{ Ċĉĉ ĉ set ( name , Ġwhen Ġ( T :: class . java ) Ġ{ Ċĉĉĉ ĉ java . lang . Byte :: class . java Ġ-> ĠTag List ( TAG _ BYTE , Ġto ListOf Byte ( value ), Ġfalse ) Ċĉĉĉ ĉ java . lang . Short :: class . java Ġ-> ĠTag List ( TAG _ SHORT , Ġto ListOf Short ( value ), Ġfalse ) Ċĉĉĉ ĉ java . lang . Integer :: class . java Ġ-> ĠTag List ( TAG _ INT , Ġto ListOf Int ( value ), Ġfalse ) Ċĉĉĉ ĉ java . lang . Long :: class . java Ġ-> ĠTag List ( TAG _ LONG , Ġto ListOf Long ( value ), Ġfalse ) Ċĉĉĉ ĉ java . lang . Float :: class . java Ġ-> ĠTag List ( TAG _ FLOAT , Ġto ListOf Float ( value ), Ġfalse ) Ċĉĉĉ ĉ java . lang . Double :: class . java Ġ-> ĠTag List ( TAG _ DOUBLE , Ġto ListOf Double ( value ), Ġfalse ) Ċĉĉĉ ĉ ByteArray :: class . java Ġ-> ĠTag List ( TAG _ BYTE _ ARRAY , Ġto ListOf ByteArray ( value ), Ġfalse ) Ċĉĉĉ ĉ String :: class . java Ġ-> ĠTag List ( TAG _ STRING , Ġto ListOf String ( value ), Ġfalse ) Ċĉĉĉ ĉ IntArray :: class . java Ġ-> ĠTag List ( TAG _ INT _ ARRAY , Ġto ListOf IntArray ( value ), Ġfalse ) Ċĉĉĉ ĉ Long Array :: class . java Ġ-> ĠTag List ( TAG _ LONG _ ARRAY , Ġto ListOf Long Array ( value ), Ġfalse ) Ċĉĉĉ ĉ Tag Byte :: class . java Ġ-> ĠTag List ( TAG _ BYTE , Ġvalue Ġas ĠList < Tag Byte >, Ġfalse ) Ċĉĉĉ ĉ Tag Short :: class . java Ġ-> ĠTag List ( TAG _ SHORT , Ġvalue Ġas ĠList < Tag Short >, Ġfalse ) Ċĉĉĉ ĉ Tag Int :: class . java Ġ-> ĠTag List ( TAG _ INT , Ġvalue Ġas ĠList < Tag Int >, Ġfalse ) Ċĉĉĉ ĉ Tag Long :: class . java Ġ-> ĠTag List ( TAG _ LONG , Ġvalue Ġas ĠList < Tag Long >, Ġfalse ) Ċĉĉĉ ĉ Tag Float :: class . java Ġ-> ĠTag List ( TAG _ FLOAT , Ġvalue Ġas ĠList < Tag Float >, Ġfalse ) Ċĉĉĉ ĉ Tag Double :: class . java Ġ-> ĠTag List ( TAG _ DOUBLE , Ġvalue Ġas ĠList < Tag Double >, Ġfalse ) Ċĉĉĉ ĉ Tag ByteArray :: class . java Ġ-> ĠTag List ( TAG _ BYTE _ ARRAY , Ġvalue Ġas ĠList < Tag ByteArray >, Ġfalse ) Ċĉĉĉ ĉ Tag String :: class . java Ġ-> ĠTag List ( TAG _ STRING , Ġvalue Ġas ĠList < Tag String >, Ġfalse ) Ċĉĉĉ ĉ Tag List :: class . java Ġ-> ĠTag List ( TAG _ LIST , Ġvalue Ġas ĠList < Tag List >, Ġfalse ) Ċĉĉĉ ĉ Tag Compound :: class . java Ġ-> ĠTag List ( TAG _ COMP O UND , Ġvalue Ġas ĠList < Tag Compound >, Ġfalse ) Ċĉĉĉ ĉ Tag IntArray :: class . java Ġ-> ĠTag List ( TAG _ INT _ ARRAY , Ġvalue Ġas ĠList < Tag IntArray >, Ġfalse ) Ċĉĉĉ ĉ Tag Long Array :: class . java Ġ-> ĠTag List ( TAG _ LONG _ ARRAY , Ġvalue Ġas ĠList < Tag Long Array >, Ġfalse ) Ċĉĉĉ ĉ else Ġ-> Ġthrow ĠIllegalArgumentException (" Unsupported Ġtype Ġ${ T :: class . java . simple Name } Ġfor ĠTag List ") Ċĉĉ ĉ }) Ċĉ ĉ } ĊĉĉĊĉ ĉ fun Ġset ( name : ĠString , Ġvalue : ĠTag List ) Ġ{ Ċĉĉ ĉ entries [ name ] Ġ= Ġvalue Ċĉ ĉ } Ċ ĉ } Ċ } Ċ