@ file : Opt In ( Experimental Cli :: class ) Ċ Ċ package Ġmod . luck y . tools Ċ Ċ import Ġkotlinx . cli .* Ċ import Ġmod . luck y . common . attribute .* Ċ import Ġmod . luck y . common . Vec 3 i Ċ import Ġmod . luck y . common . Game Type Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . util . zip . GZIP InputStream Ċ Ċ fun Ġn bt To Mc structure ( block Conversions : ĠBlock Conversions , Ġn bt Structure : ĠDict Attr ): ĠAttr Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġn bt Structure . getList (" size "). to Vec 3 < Int >() ĊĊĠĠĠ Ġval Ġblock Grid Positions Ġ= Ġ( 0 Ġuntil Ġsize . x ). flatMap Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġsize . y ). flatMap Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġsize . z ). map Ġ{ Ġz Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVec 3 i ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġn bt Blocks Ġ= Ġn bt Structure . getList (" blocks "). toList (). map Ġ{ Ġit Ġ-> Ġit Ġas ĠDict Attr Ġ} ĊĊĠĠĠ Ġval Ġstructure World Origin Ġ= ĠVec 3 i ( ĊĠĠĠĠĠĠĠ Ġn bt Blocks . min Of Ġ{ Ġit . get Vec 3 < Int >(" pos "). x Ġ}, ĊĠĠĠĠĠĠĠ Ġn bt Blocks . min Of Ġ{ Ġit . get Vec 3 < Int >(" pos "). y Ġ}, ĊĠĠĠĠĠĠĠ Ġn bt Blocks . min Of Ġ{ Ġit . get Vec 3 < Int >(" pos "). z Ġ}, ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġblock Indices Ġ= Ġblock Grid Positions . map Ġ{ Ġgrid Pos Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġn bt Block Ġ= Ġn bt Blocks . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabsolute Pos Ġ= Ġit . get Vec 3 < Int >(" pos ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Pos Ġ= Ġabsolute Pos Ġ- Ġstructure World Origin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Pos Ġ== Ġgrid Pos ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ- 1 Ġrepresents Ġa Ġ' void ' Ġblock , Ġwhich Ġwill Ġnot Ġreplace Ġany Ġblocks Ġin Ġthe Ġworld Ġwhen Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġstructure Ġis Ġplaced ĊĠĠĠĠĠĠĠ Ġn bt Block ?. getValue < Int >(" state ") Ġ?: Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpalette Ġ= Ġn bt Structure . getList (" palette "). toList (). map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn bt Block Ġ= Ġit Ġas ĠDict Attr ĊĠĠĠĠĠĠĠ Ġprintln ( nbt Block ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Block Id Ġ= Ġn bt Block . getValue < String >(" Name ") ĊĠĠĠĠĠĠĠ Ġval Ġjava Block States Ġ= Ġn bt Block . get WithDefault (" Properties ", ĠDict Attr ()). children . map Values Ġ{ Ġ(_, Ġv ) Ġ-> ĠBlock State . from Attr ( v ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( bed rock Block Id , Ġbed rock Block States ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock Conversions . convert ( Game Type . JAVA , ĠGame Type . B ED RO CK , Ġjava Block Id , Ġjava Block States ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBlock Conversion Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Using Ġ' minecraft : air ' Ġinstead Ġof Ġ'${ java Block Id } ': Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" minecraft : air ", Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdict Attr Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġstring Attr Of ( bed rock Block Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" states " Ġto ĠDict Attr ( bed rock Block States . map Values Ġ{ Ġ(_, Ġv ) Ġ-> Ġv . to Attr () Ġ}), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/* ĊĠĠĠ Ġval Ġsorted N bt Blocks Ġ= Ġn bt Blocks . sorted With ( triple Comparator Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġit . get Vec 3 < Int >(" pos " ĊĠĠĠĠĠĠĠ ĠTrip le ( pos . x , Ġpos . y , Ġpos . z ) ĊĠĠĠ Ġ}) ĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġval Ġresult Ġ= Ġdict Attr Of ( ĊĠĠĠĠĠĠĠ Ġ" format _ version " Ġto Ġint Attr Of ( 1 ), ĊĠĠĠĠĠĠĠ Ġ" size " Ġto Ġvec 3 Attr Of ( Attr Type . INT , Ġsize ), ĊĠĠĠĠĠĠĠ Ġ" structure " Ġto Ġdict Attr Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" block _ indices " Ġto ĠList Attr ( block Indices . map Ġ{ Ġint Attr Of ( it ) Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" palette " Ġto Ġdict Attr Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" default " Ġto Ġdict Attr Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" block _ palette " Ġto Ġlist Attr Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdict Attr Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġstring Attr Of (""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" states " Ġto ĠDict Attr (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" version " Ġto Ġint Attr Of ( 1 7 8 2 5 8 0 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" block _ position _ data " Ġto ĠDict Attr (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" entities " Ġto Ġlist Attr Of (), ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ" structure _ world _ origin " Ġto Ġlist Attr Of ( int Attr Of ( 0 ), Ġint Attr Of ( 0 ), Ġint Attr Of ( 0 )), ĊĠĠĠ Ġ) ĊĠĠĠ Ġprintln ( result ) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ class ĠNbt To Mc structure : ĠSub command (" nbt - to - mc structure ", Ġ" Convert Ġ. nbt Ġstructures Ġ( Java Ġedition ) Ġto Ġ. mc structure Ġ( Bed rock Ġedition )") Ġ{ ĊĠĠĠ Ġval Ġstructure Path Ġby Ġargument ( Arg Type . String , Ġdescription Ġ= Ġ" Path Ġto Ġ. nbt Ġfile , Ġor Ġa Ġfolder Ġcontaining Ġ. nbt Ġstructures ") ĊĠĠĠ Ġval Ġoutput Structures Folder Ġby Ġoption ( Arg Type . String , Ġdescription Ġ= Ġ" Output Ġfolder Ġfor Ġconverted Ġstructures "). default (" structures ") ĊĠĠĠ Ġval Ġblock Ids File Ġby Ġoption ( Arg Type . String , Ġdescription Ġ= Ġ" Path Ġto Ġ. yaml Ġfile Ġwith Ġblock ĠID Ġconversions "). default (" block _ ids . yaml ") ĊĠĠĠ Ġval Ġblock Conversion File Ġby Ġoption ( Arg Type . String , Ġdescription Ġ= Ġ" Path Ġto Ġ. yaml Ġfile Ġwith Ġblock Ġconversions "). default (" block _ conversion . yaml ") ĊĠĠĠ Ġval Ġoutput Generated Block Conversion File Ġby Ġoption ( Arg Type . String , Ġdescription Ġ= Ġ" Path Ġto Ġ. yaml Ġfile Ġwith Ġblock Ġconversions Ġafter Ġparsing Ġregex "). default (". debug / block _ conversion . generated . yaml ") ĊĊĠĠĠ Ġoverride Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblock Conversions Ġ= ĠBlock Conversions . read And Parse Regex From Yaml File ( File ( block Conversion File )) ĊĊĠĠĠĠĠĠĠ ĠFile ( output Generated Block Conversion File ). parent File . mkdir s () ĊĠĠĠĠĠĠĠ ĠFile ( output Generated Block Conversion File ). write Text ( block Conversions . to Yaml ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġstructure Files Ġ= Ġif Ġ(! File ( structure Path ). isDirectory ()) ĠlistOf ( File ( structure Path )) Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( structure Path ). walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" nbt " Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmc Structure Attrs Ġ= ĠlistOf ( structure Files [ 6 ]). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bt Structure Attr Ġ= Ġread N bt File ( it , Ġcompressed = true , Ġis LittleEndian = false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn bt To Mc structure ( block Conversions , Ġn bt Structure Attr Ġas ĠDict Attr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstructure Files . zip ( mc Structure Attrs ). forEach Ġ{ Ġ( structure File , Ġmc Structure Attr ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bt Buffer Ġ= Ġattr To N bt ( mc Structure Attr , ĠByte Order . LIT TLE _ ENDIAN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġstructure File . relative To ( File ( structure Path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= ĠFile ( output Structures Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve ( relative Path . parent File ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve ("${ relative Path . name Without Extension }. mc structure ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Buffer ToFile ( nbt Buffer , ĠoutputFile ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ