package Ġjp . kat ana . server . item Ċ Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Parser Ċ import Ġcom . google . gson . stream . Json Reader Ċ import Ġjp . kat ana . core . item . I Item Define Ċ import Ġjp . kat ana . core . item . I Item Definitions Ċ import Ġjp . kat ana . utils . Binary Stream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . nio . charset . StandardCharsets ĊĊ Ċ class ĠItem Definitions Ġ: ĠI Item Definitions Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdefines : ĠMutable List < I Item Define > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġprev Size : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġbinary Data : ĠByteArray Ġ= ĠByteArray ( 0 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠJson Parser () ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġthis :: class . java . class Loader . getResource AsStream (" runtime _ item _ ids . json ") Ġ?: Ġthrow ĠIOException () ĊĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġparser . parse ( Json Reader ( InputStream Reader ( stream , ĠStandard Charsets . UTF _ 8 ))) ĊĠĠĠĠĠĠĠ Ġvar Ġid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠJson Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . forEach Ġ{ Ġel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( el Ġis ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefines . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Define ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ++, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . getAs Json Primitive (" name "). asString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . getAs Json Primitive (" id "). as Short ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstream . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfrom Runtime ( runtime Id : ĠInt ): ĠI Item Define Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefines . first Ġ{ Ġdefine Ġ-> Ġdefine . runtime Id Ġ== Ġruntime Id Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfrom Id ( id : ĠInt ): ĠI Item Define Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefines . first Ġ{ Ġdefine Ġ-> Ġdefine . id Ġ== Ġid . to Short () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfrom Name ( name : ĠString ): ĠI Item Define Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefines . first Ġ{ Ġdefine Ġ-> Ġdefine . name Ġ== Ġname Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister ( item Define : ĠI Item Define ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprev Size Ġ= Ġdefines . size ĊĠĠĠĠĠĠĠ Ġdefines . add ( item Define ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefines . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbinary (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( prevSize Ġ!= Ġdefines . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠBinary Stream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefines . forEach Ġ{ Ġdefine Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . write Var String ( define . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . write Short LE ( define . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Size Ġ= Ġsize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinary Data Ġ= Ġstream . array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinary Data ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinary Data ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }