/* Ċ Ġ* ĠInventory ĠPro files ĠNext Ċ Ġ* Ċ Ġ* ĠĠ ĠCopyright Ġ( c ) Ġ 2 0 1 9 - 2 0 2 0 Ġjs nim da Ġ< 7 6 1 5 2 5 5 + js nim da @ users . nore ply . github . com > Ċ Ġ* ĠĠ ĠCopyright Ġ( c ) Ġ 2 0 2 1 - 2 0 2 2 ĠPl amen ĠK . ĠK os se ff Ġ< p . kos se ff @ gmail . com > Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ċ Ġ* ĠĠĠĠ Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ Ċ package Ġorg . anti _ ad . mc . ip next . inventory . data Ċ Ċ import Ġorg . anti _ ad . mc . ip next . item . ItemStack Ċ import Ġorg . anti _ ad . mc . ip next . item . ItemType Ċ import Ġorg . anti _ ad . mc . ip next . item . isEmpty Ċ import Ġorg . anti _ ad . mc . ip next . util . Bucket Ċ import Ġorg . anti _ ad . mc . ip next . util . Mutable Bucket Ċ Ċ interface ĠItem Bucket Ġ: ĠBucket < ItemType > Ġ{ ĊĠĠĠ Ġfun Ġcontains ( item Stack : ĠItemStack ): ĠBoolean ĊĠĠĠ Ġfun Ġcontains All ( item Stack s : ĠList < ItemStack >): ĠBoolean ĊĊĠĠĠ Ġfun Ġcopy (): ĠItem Bucket ĊĠĠĠ Ġfun Ġcopy As Mutable (): ĠMutable Item Bucket ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( another : ĠItem Bucket ): ĠItem Bucket ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġinvoke (): ĠItem Bucket Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMutable Item Bucket () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMutable Item Bucket Ġ: ĠMutable Bucket < ItemType >, ĠItem Bucket Ġ{ ĊĠĠĠ Ġprivate Ġconstructor ( inner Map : ĠMap < ItemType , ĠInt >) Ġ: Ġsuper ( inner Map ) ĊĠĠĠ Ġconstructor () Ġ: Ġsuper () ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate Empty ( element : ĠItem Type ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( item Stack : ĠItemStack ) Ġ= Ġadd ( item Stack . item Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . count ) ĊĊĠĠĠ Ġfun Ġadd All ( item Stack s : ĠList < ItemStack >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Stack s . forEach Ġ{ Ġadd ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( item Stack : ĠItemStack ) Ġ= Ġcontains ( item Stack . item Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . count ) ĊĊĠĠĠ Ġoverride Ġfun Ġcontains All ( item Stack s : ĠList < ItemStack >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitem Stack s . all Ġ{ Ġcontains ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( item Stack : ĠItemStack ) Ġ= Ġremove ( item Stack . item Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . count ) ĊĊĠĠĠ Ġfun Ġremove All ( item Stack s : ĠList < ItemStack >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Stack s . forEach Ġ{ Ġremove ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġminus ( another : ĠItem Bucket ): ĠItem Bucket Ġ= ĊĠĠĠĠĠĠĠ Ġcopy As Mutable (). apply Ġ{ Ġremove All ( another ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy (): ĠItem Bucket Ġ= Ġcopy As Mutable () ĊĠĠĠ Ġoverride Ġfun Ġcopy As Mutable (): ĠMutable Item Bucket Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMutable Item Bucket ( as Map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġas Map . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItemStack ( it . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ}. toString () ĊĠĠĠ Ġ} Ċ } Ċ