package Ġnet . cy dh ra . tech n ocracy . foundation . content . items . components Ċ Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . ecs . ComponentType Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . tile entities . TE Inventory Provider Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . upgrade s . Item Upgrade Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . upgrade s . Upgrade Class Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . content . capabilities . inventory . Dynamic Inventory Capability Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . content . capabilities . inventory . Dynamic Item Holder Capability Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . content . items . Upgrade Item Ċ import Ġnet . minecraft . init . Items Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . nbt . NBT Tag Compound Ċ import Ġnet . minecraft . util . text .* Ċ import Ġjava . util . concurrent . Copy On Write ArrayList ĊĊ Ċ class ĠItem Upgrade s Component ( val Ġupgrade Type : ĠList < Upgrade Class >) Ġ: ĠAbstract Item Component (), ĠTE Inventory Provider < Dynamic Item Holder Capability > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġset Ġof Ġdescriptive Ġlines Ġabout Ġinstalled Ġupgrades ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdescription Ġ= ĠCopy On Write ArrayList < Pair < IT ext Component , ĠI Text Component >>() ĊĊĠĠĠ Ġoverride Ġval Ġtype : ĠComponent Type Ġ= ĠComponent Type . OTHER ĊĊĠĠĠ Ġval Ġinv Ġ= Ġobject Ġ: ĠTE Inventory Provider < Dynamic Inventory Capability > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Item Valid ( inventory : ĠDynamic Inventory Capability , Ġslot : ĠInt , Ġstack : ĠItemStack ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( inventory Ġ== Ġthis @ Item Upgrade s Component . dummy Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġstack . item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġaccept Ġupgrade Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Ġ! is ĠUpgrade Item <* >) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġwhether Ġthe Ġupgrade Ġis Ġa Ġmachine - type Ġupgrade ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! upgrade Type . contains ( item . upgrade Class )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġask Ġthe Ġitem Ġwhether Ġit Ġcan Ġbe Ġinstalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! item . upgrade s . all Ġ{ Ġupgrade Ġ-> Ġ( upgrade Ġas ĠItem Upgrade ). can Install Upgrade ( wrapper , Ġthis @ Item Upgrade s Component ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slot Update ( inventory : ĠDynamic Inventory Capability , Ġslot : ĠInt , Ġstack : ĠItemStack , Ġoriginal Stack : ĠItemStack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinventory . force Stack In Slot ( slot , ĠItemStack . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack . item Ġ!= ĠItems . AIR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Holder . add Stack ( stack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġinventory Ġwhere Ġto Ġplace Ġupgrade Ġitems . ĠIs Ġpublic Ġbecause ĠGUI Ġmust Ġbe Ġable Ġto Ġaccess Ġit Ġfor Ġmodification ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdummy Slot : ĠDynamic Inventory Capability Ġ= ĠDynamic Inventory Capability ( 1 , Ġinv ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġinventory Ġwhere Ġto Ġplace Ġupgrade Ġitems . ĠIs Ġpublic Ġbecause ĠGUI Ġmust Ġbe Ġable Ġto Ġaccess Ġit Ġfor Ġmodification ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġitem Holder : ĠDynamic Item Holder Capability Ġ= ĠDynamic Item Holder Capability ( this ) ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dummy Slot . component Parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthis . item Holder . component Parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġneeds Client Sync ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize NBT (): ĠN BT Tag Compound Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitem Holder . serialize NBT () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize NBT ( nbt : ĠN BT Tag Compound ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Holder . deserialize NBT ( nbt ) ĊĠĠĠĠĠĠĠ Ġthis . update Description () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Item Valid ( inventory : ĠDynamic Item Holder Capability , Ġslot : ĠInt , Ġstack : ĠItemStack ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Slot Update ( inventory : ĠDynamic Item Holder Capability , Ġslot : ĠInt , Ġstack : ĠItemStack , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Stack : ĠItemStack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stack . item Ġ== Ġoriginal Stack . item ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stack . item Ġ== ĠItems . AIR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupgrade Item Ġ= Ġoriginal Stack . item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upgrade Item Ġ! is ĠUpgrade Item <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Non - upgrade Ġitem Ġwas Ġinstalled Ġin Ġupgrade Ġslot .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Item . upgrade s . forEach Ġ{ Ġupgrade Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( upgrade Ġas ĠItem Upgrade ). on Un install Upgrade ( wrapper , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupgrade Item Ġ= Ġstack . item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upgrade Item Ġ! is ĠUpgrade Item <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Non - upgrade Ġitem Ġinstalled Ġin Ġupgrade Ġslot .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Item . upgrade s . forEach Ġ{ Ġupgrade Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( upgrade Ġas ĠItem Upgrade ). on Install Upgrade ( wrapper , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . wrapper . update ItemStack () ĊĠĠĠĠĠĠĠ Ġthis . update Description () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Installed Upgrade s (): ĠList < Item Upgrade > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . item Holder . get Stack s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . isEmpty Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . item Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Upgrade Item <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . upgrade s . toList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Item Upgrade >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad Aggregate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Load Aggregate () ĊĠĠĠĠĠĠĠ Ġthis . get Installed Upgrade s (). forEach Ġ{ Ġit . on Upgrade Load ( wrapper , Ġthis ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġ[ description ] Ġlist Ġwith Ġthe Ġcurrent Ġupgrade Ġmodifiers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Description () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . description . clear () ĊĊĠĠĠĠĠĠĠ Ġthis . description . add ( Text Component Translation (" tooltip s . upgrade s . title . description ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Sibling ( Text Component String (" :" )) Ġto ĠText Component String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ this . item Holder . get Stack s (). filter Ġ{ Ġ! it . isEmpty Ġ}. count () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setStyle ( Style (). setColor ( Text Formatting . DARK _ GREEN ))) Ċ Ċ // ĠĠĠĠĠĠĠ Ġthis . multip liers . forEach Ġ{ Ġmultiplier Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . description . add ( Text Component Translation (" tooltip s . upgrade s . parameter .${ multiplier . upgrade Parameter }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Sibling ( Text Component String (" :" )) Ġto ĠText Component String ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ ( multiplier . getC apped Multiplier () Ġ* Ġ 1 0 0 ). round ToInt ()} % ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setStyle ( Style (). setColor ( Text Formatting . DARK _ GREEN ))) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . description . add ( Text Component String ("\ n ") Ġto ĠText Component String ("\ n ")) ĊĠĠĠ Ġ} Ċ }