/* Ċ Ġ* Ġ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 . Mutable ItemStack Ċ Ċ interface ĠItem Tracker Ġ{ ĊĠĠĠ Ġval Ġcursor : ĠItemStack ĊĠĠĠ Ġval Ġslots : ĠList < ItemStack > ĊĠĠĠ Ġval Ġthrown Items : ĠItem Bucket ĊĊĠĠĠ Ġfun Ġcopy As Mutable (): ĠMutable Item Tracker ĊĠĠĠ Ġfun Ġsub Tracker (): ĠSub Tracker ĊĠĠĠ Ġfun Ġsub Tracker ( slot Indices : ĠList < Int >): ĠSub Tracker Ċ } Ċ Ċ // Ġmutable Ġitem Ġtracker Ċ class ĠMutable Item Tracker ( override Ġval Ġcursor : ĠMutable ItemStack , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġslots : ĠList < Mutable ItemStack >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġthrown Items : ĠMutable Item Bucket Ġ= ĠMutable Item Bucket ()) Ġ: ĠItem Tracker Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcopy As Mutable () Ġ= ĠMutable Item Tracker ( ĊĠĠĠĠĠĠĠ Ġcursor . copy As Mutable (), ĊĠĠĠĠĠĠĠ Ġslots . copy As Mutable (), ĊĠĠĠĠĠĠĠ Ġthrown Items . copy As Mutable () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" cursor : Ġ$ cursor , Ġslots : Ġ$ slots , Ġthrown Items : Ġ$ throw n Items " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠItem Tracker ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġother . cursor ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( slots Ġ!= Ġother . slots ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( throw n Items Ġ!= Ġother . throw n Items ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġcursor . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġslots . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġthrown Items . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub Tracker (): ĠMutable Sub Tracker Ġ= Ġsub Tracker ( slots . indices . toList ()) ĊĠĠĠ Ġoverride Ġfun Ġsub Tracker ( slot Indices : ĠList < Int >): ĠMutable Sub Tracker Ġ= ĊĠĠĠĠĠĠĠ ĠMutable Sub Tracker ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot Indices ) Ċ } Ċ