package Ġwire seg al . cmd ctrl . common . core Ċ Ċ import Ġnet . minecraft . nbt .* Ċ import Ġnet . minecraftforge . common . util . Constants Ċ Ċ /** Ċ Ġ* Ġ@ author ĠWire Se gal Ċ Ġ* ĠCreated Ġat Ġ 9 : 2 1 ĠAM Ġon Ġ 1 2 / 1 4 / 1 6 . Ċ Ġ*/ Ċ Ċ private Ġval ĠMATCH ER Ġ= Ġ"( ?: (?: (?: \\ [ \\ d + \\ ]) |( ?: [^ .\\ [ \\ ]] + ))( \\ .| $ |( ?= \\ [ ))) +". to Regex () Ċ Ċ private Ġval ĠTOKEN IZER Ġ= Ġ" (( ?: \\ [ \\ d + \\ ]) |( ?: [^ .\\ [ \\ ]] + )) (? =[ .\\ [] |$ ) ". to Regex () Ċ Ċ fun ĠN BT Tag Compound . getObject ( key : ĠString ): ĠN BT Base ? Ġ{ ĊĠĠĠ Ġif Ġ(! MATCH ER . matches ( key )) Ġreturn Ġnull ĊĊĠĠĠ Ġvar Ġcurrent Element : ĠN BT Base Ġ= Ġthis ĊĊĠĠĠ Ġval Ġmatched Ġ= ĠTOKEN IZER . findAll ( key ) ĊĠĠĠ Ġfor Ġ( match Ġin Ġmatched ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġmatch . group Values [ 1 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( m . startsWith (" [" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġind Ġ= Ġm . remove Prefix (" [" ). remove Suffix (" ]"). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element Ġis ĠN BT Tag List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element . tag Count () Ġ< Ġind Ġ+ Ġ 1 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element Ġ= Ġcurrent Element [ ind ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Element Ġis ĠN BT Tag ByteArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element . byteArray . size Ġ< Ġind Ġ+ Ġ 1 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element Ġ= ĠN BT Tag Byte ( current Element . byteArray [ ind ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Element Ġis ĠN BT Tag IntArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element . int Array . size Ġ< Ġind Ġ+ Ġ 1 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element Ġ= ĠN BT Tag Int ( current Element . int Array [ ind ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Element Ġis ĠN BT Tag Compound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! current Element . has Key ( m )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element Ġ= Ġcurrent Element . getTag ( m ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcurrent Element Ċ } Ċ Ċ private Ġval ĠCL AS SES Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠN BT Tag End :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Byte :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Short :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Int :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Long :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Float :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Double :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag ByteArray :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag String :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag List :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag Compound :: class . java , ĊĠĠĠĠĠĠĠ ĠN BT Tag IntArray :: class . java Ċ ) Ċ Ċ fun ĠN BT Tag Compound . set Object ( key : ĠString , Ġtag : ĠN BT Base ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(! MATCH ER . matches ( key )) Ġreturn Ġfalse ĊĊĠĠĠ Ġvar Ġcurrent Element : ĠN BT Base Ġ= Ġthis ĊĊĠĠĠ Ġval Ġmatched Ġ= ĠTOKEN IZER . findAll ( key ). toList () ĊĠĠĠ Ġval Ġmax Ġ= Ġmatched . size Ġ- Ġ 1 ĊĠĠĠ Ġfor Ġ(( index , Ġmatch ) Ġin Ġmatched . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġmatch . group Values [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġdone Ġ= Ġindex Ġ== Ġmax ĊĠĠĠĠĠĠĠ Ġif Ġ( m . startsWith (" [" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġind Ġ= Ġm . remove Prefix (" [" ). remove Suffix (" ]"). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element Ġis ĠN BT Tag List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element . tag Count () Ġ< Ġind Ġ+ Ġ 1 Ġ&& Ġ! done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġif Ġ(( current Element . tag Type Ġ== Ġ 0 Ġ|| Ġcurrent Element . tag Type Ġ== ĠConstants . NBT . TAG _ LIST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmatched [ index Ġ+ Ġ 1 ]. group Values [ 1 ]. startsWith (" [" )) ĠN BT Tag List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ(( current Element . tag Type Ġ== Ġ 0 Ġ|| Ġcurrent Element . tag Type Ġ== ĠConstants . NBT . TAG _ COMP O UND )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag Compound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element . append Tag ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! done ) Ġcurrent Element Ġ= Ġcurrent Element [ ind ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtype Ġ= Ġcurrent Element . tag Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ 0 ) Ġtype Ġ= ĠConstants . NBT . TAG _ DOUBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransformed Tag Ġ= Ġtag . safe Cast ( CLASSES [ type ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ind Ġ>= Ġcurrent Element . tag Count ()) Ġcurrent Element . append Tag ( transformed Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcurrent Element . set ( ind , Ġtransformed Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Element Ġis ĠN BT Tag ByteArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element . byteArray . size Ġ< Ġind Ġ+ Ġ 1 Ġ|| Ġ! done Ġ|| Ġtag Ġ! is ĠNB TP ri mitive ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element . byteArray [ ind ] Ġ= Ġtag . byte ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Element Ġis ĠN BT Tag IntArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Element . int Array . size Ġ< Ġind Ġ+ Ġ 1 Ġ|| Ġ! done Ġ|| Ġtag Ġ! is ĠNB TP ri mitive ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element . int Array [ ind ] Ġ= Ġtag . int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Element Ġis ĠN BT Tag Compound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! current Element . has Key ( m ) Ġ&& Ġ! done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġif Ġ( matched [ index Ġ+ Ġ 1 ]. group Values [ 1 ]. startsWith (" [" )) ĠN BT Tag List () Ġelse ĠN BT Tag Compound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element . setTag ( m , Ġnew ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Element Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! done ) Ġcurrent Element Ġ= Ġcurrent Element . getTag ( m ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcurrent Element . setTag ( m , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġ< T Ġ: ĠN BT Base > ĠN BT Base . safe Cast ( clazz : ĠClass < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clazz . isAssignableFrom ( this . java Class )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( clazz Ġ== ĠNB TP ri mitive :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag Byte ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( clazz Ġ== ĠN BT Tag ByteArray :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag ByteArray ( ByteArray ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( clazz Ġ== ĠN BT Tag String :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag String ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( clazz Ġ== ĠN BT Tag List :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( clazz Ġ== ĠN BT Tag Compound :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag Compound () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( clazz Ġ== ĠN BT Tag IntArray :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Tag IntArray ( IntArray ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown ĠN BT Ġtype Ġto Ġcast Ġto : Ġ$ clazz ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠT Ċ } Ċ