/* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġproject ĠHel ios , Ġlicensed Ġunder Ġthe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - 2 0 1 8 ĠMark ĠV ain om aa Ġ< mik ros ke em @ mik ros ke em . eu > Ċ Ġ* ĠCopyright Ġ( c ) ĠContributors Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġeu . mik ros ke em . he li os . mod . delegate . inventory Ċ Ċ import Ġnet . minecraft . server . v 1 _ 1 2 _ R 1 . Block Ċ import Ġnet . minecraft . server . v 1 _ 1 2 _ R 1 . ItemStack Ċ import Ġnet . minecraft . server . v 1 _ 1 2 _ R 1 . NBT Base Ċ import Ġnet . minecraft . server . v 1 _ 1 2 _ R 1 . NBT Tag Compound Ċ import Ġnet . minecraft . server . v 1 _ 1 2 _ R 1 . NBT Tag List Ċ import Ġnet . minecraft . server . v 1 _ 1 2 _ R 1 . NBT Tag String Ċ import Ġorg . bukkit . Material Ċ import Ġorg . bukkit . craft bukkit . v 1 _ 1 2 _ R 1 . util . Craft Magic Numbers Ċ Ċ /** Ċ Ġ* ĠCraft ItemStack ĠM ixin Ġmethods Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark ĠV ain om aa Ċ Ġ*/ Ċ private Ġconst Ġval ĠCAN _ DESTROY Ġ= Ġ" Can Destroy " Ċ private Ġconst Ġval ĠCAN _ PLACE _ ON Ġ= Ġ" Can Place On " Ċ Ċ object ĠHel ios ItemStack Delegate Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠItemStack . set Can Destroy ( materials : ĠCollection < Material > ?) Ġ= Ġset Materials Tag ( CAN _ DESTROY , Ġmaterials ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠItemStack . set Can Place On ( materials : ĠCollection < Material > ?) Ġ= Ġset Materials Tag ( CAN _ PLACE _ ON , Ġmaterials ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠItemStack . get Can Destroy (): ĠCollection < Material > Ġ= Ġget Materials Tag ( CAN _ DESTROY ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠItemStack . get Can Place On (): ĠCollection < Material > Ġ= Ġget Materials Tag ( CAN _ PLACE _ ON ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset L ore ( handle : ĠItemStack , Ġvar arg Ġlo re : ĠString ): ĠItemStack Ġ= ĊĠĠĠĠĠĠĠ Ġhandle . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tag Ġ= ĠN BT Tag Compound (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset (" display ", ĠN BT Tag Compound (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset (" L ore ", ĠN BT Tag List (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo re . forEach Ġ{ Ġadd ( it . convertTo Tag ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠItemStack . append L ore ( var arg Ġlo re : ĠString ): ĠItemStack Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlo re List Ġ= Ġthis . tag ?. get Compound (" display ") ?. getList (" L ore ", Ġ 8 ) Ġ?: Ġreturn Ġset L ore ( this , Ġ* lo re ) ĊĠĠĠĠĠĠĠ Ġlo re . forEach Ġ{ Ġlo re List . add ( it . convertTo Tag ()) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠCommon Ġcode Ġto Ġset Ġmaterials Ġinto ĠN BT Ġtag ĊĠĠĠ Ġprivate Ġfun ĠItemStack . set Materials Tag ( tagName : ĠString , Ġmaterials : ĠCollection < Material > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġnew Ġtag Ġonly Ġif Ġmaterials Ġcollection Ġis Ġnot Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġn bt Tag Ġ= Ġtag Ġ?: Ġmaterials ?. run Ġ{ ĠN BT Tag Compound () Ġ} Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif ( materials Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn bt Tag . set ( tagName , ĠN BT Tag List (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaterials . map Ġ{ ĠN BT Tag String ( it . getItem Id ()) Ġ}. forEach (:: add ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn bt Tag . getList ( tagName , Ġ 8 )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn bt Tag . remove ( tagName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġtag Ġback ĊĠĠĠĠĠĠĠ Ġtag Ġ= Ġn bt Tag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCommon Ġcode Ġto Ġread Ġmaterials Ġfrom ĠN BT Ġtag ĊĠĠĠ Ġprivate Ġfun ĠItemStack . get Materials Tag ( tagName : ĠString ): ĠCollection < Material > Ġ{ ĊĠĠĠĠĠĠĠ Ġtag ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . getList ( tagName , Ġ 8 )?. take If Ġ{ Ġ! it . isEmpty Ġ} ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . convert Items To Set () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMaterial . DI AM OND _ ORE Ġ-> Ġm inecraft : di amond _ ore ĊĠĠĠ Ġprivate Ġfun ĠMaterial . getItem Id (): ĠString Ġ= ĠBlock . REGISTRY . b ( Craft Magic Numbers . getBlock ( this )). toString () ĊĊĠĠĠ Ġ// ĠN BT List [ minecraft : di amond _ ore , Ġ...] Ġ-> ĠSet [ Material . DI AM OND _ ORE , Ġ...] ĊĠĠĠ Ġprivate Ġfun ĠList < NBT Base >. convert Items To Set (): ĠSet < Material > Ġ= Ġmap Ġ{ Ġit Ġas ĠN BT Tag String Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( NBT Tag String :: c _) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Craft Magic Numbers . INSTANCE :: get Material From Internal Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠ Ġ// ĠString Ġ-> ĠN BT Tag String ĊĠĠĠ Ġprivate Ġfun ĠString . convertTo Tag (): ĠN BT Tag String Ġ= ĠN BT Tag String ( this ) Ċ }