package Ġorg . k rypt on mc . k rypt on . registry . tags Ċ Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . net . URI Ċ import Ġjava . nio . file . FileSystem Ċ import Ġjava . nio . file . FileSystem s Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . stream . Collectors Ċ Ċ class ĠTag Manager Ġ{ ĊĊĠĠĠ Ġval Ġblock Tags : ĠList < Tag > ĊĠĠĠ Ġval Ġentity Type Tags : ĠList < Tag > ĊĠĠĠ Ġval Ġfluid Tags : ĠList < Tag > ĊĠĠĠ Ġval Ġitem Tags : ĠList < Tag > ĊĊĠĠĠ Ġprivate Ġval Ġall Tags : ĠList < Tag > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġblock Tags Ġ+ Ġentity Type Tags Ġ+ Ġfluid Tags Ġ+ Ġitem Tags ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjar File Ġ= ĠFile ( java Class . protection Domain . code Source . location . to URI ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġfile System : ĠFileSystem ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġroot Path Ġ= Ġif Ġ( jar File . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile System Ġ= ĠFileSystem s . new FileSystem ( URI (" jar :${ jar File . to URI ()} "), Ġmap Of < String , ĠAny >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile System . getPath ("/ regist ries ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get ( URI (" file ://${ java Class . class Loader . getResource (" regist ries ") !!. file } ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= ĠFiles . walk ( rootPath , ĠInt . MAX _ VALUE ). filter Ġ{ Ġ! Files . isDirectory ( it ) Ġ&& Ġit . toString (). endsWith (". json ") Ġ}. collect ( Collectors . toList ()) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Tags At Path ( path : ĠString ): ĠList < Tag > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentries . filter Ġ{ Ġit . parent . to Uri (). toString (). remove Suffix ("/ "). endsWith ( path ) Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtagName Ġ= Ġit . fileName . toString (). remove Suffix (". json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTag ( tagName , ĠJSON . decode FromString ( Tag Data . serializer (), ĠInputStreamReader ( Files . new InputStream ( it )). read Text ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġblock Tags Ġ= Ġget Tags At Path (" regist ries / tags / blocks ") ĊĠĠĠĠĠĠĠ Ġentity Type Tags Ġ= Ġget Tags At Path (" regist ries / tags / entity _ types ") ĊĠĠĠĠĠĠĠ Ġfluid Tags Ġ= Ġget Tags At Path (" regist ries / tags / fluid s ") ĊĠĠĠĠĠĠĠ Ġitem Tags Ġ= Ġget Tags At Path (" regist ries / tags / items ") ĊĊĠĠĠĠĠĠĠ Ġfile System ?. close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Deep Tags ( tag : ĠTag ): ĠList < Tag > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġmutable ListOf ( tag ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġtag . data . values . filter Ġ{ Ġit . startsWith ('# ') Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ+= Ġget Deep Tags ( all Tags . single Ġ{ Ġit . name Ġ== Ġvalue . substring ( NAMESPACE _ CHAR ACT ERS ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtags ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠJSON Ġ= ĠJson Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġamount Ġof Ġcharacters Ġto Ġstrip Ġthe Ġstring Ġ"# minecraft :" Ġfrom Ġthe Ġfront Ġof Ġa Ġstring ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNAMES PACE _ CHAR ACT ERS Ġ= Ġ 1 1 ĊĠĠĠ Ġ} Ċ }