/* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠMy th ic D rops , Ġlicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠRichard ĠH arr ah Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . items . builders Ċ Ċ import Ġcom . google . common . base . Join er Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . My th ic D rops Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . attributes . My th ic Attribute Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . events . Tier ed Item Generation Event Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . items . Item Generation Reason Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . items . ItemGroup Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . items . ItemGroup Manager Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . items . builders . Drop Builder Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . names . Name Type Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . relations . Relation Manager Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . settings . Settings Manager Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . ti ers . Tier Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . api . ti ers . Tier Manager Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . chat Color ize Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . get Then SetItem Meta As Damage able Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . merge Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . names . Name Map Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . replace Args Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . replace With Collections Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . safe Random Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . set DisplayName Chat Color ized Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . set L ore Chat Color ized Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . set Repair Cost Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . strip Colors Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . utils . Item Building Util Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . utils . Le ather Armor Util Ċ import Ġcom . teal cube . minecraft . bukkit . my th ic dro ps . utils . Temp lating Util Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . addAttribute Modifier Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . displayName Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . get Dur ability In Percentage Range Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . get Highest Enchant ment Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . get Materials Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . get Then SetItem Meta As Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . is Un break able Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . item Flags Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . my th ic D rops Tier Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . set Persistent Data String Ċ import Ġio . pix e lout law . minecraft . sp ig ot . my th ic dro ps . to Title Case Ċ import Ġorg . bukkit . Bu kkit Ċ import Ġorg . bukkit . Material Ċ import Ġorg . bukkit . ench ant ments . Enchant ment Ċ import Ġorg . bukkit . inventory . ItemStack Ċ import Ġorg . bukkit . inventory . meta . Sk ull Meta Ċ import Ġjava . util . UUID Ċ Ċ // ĠMARK ĠAS ĠINTERNAL ĠIN Ġ 8 . 0 . 0 Ċ class ĠMy th ic Drop Builder Ġ@ Deprecated ( ĊĠĠĠ Ġ" Get Ġvia ĠMy th ic D rops Api Ġinstead ", ĊĠĠĠ ĠReplace With ( ĊĠĠĠĠĠĠĠ Ġ" My th ic D rops Api . my th ic D rops . production Line . tier ed Item Factory . getNew Drop Builder ()", ĊĠĠĠĠĠĠĠ Ġ" com . teal cube . minecraft . bukkit . my th ic dro ps . api . My th ic D rops Api " ĊĠĠĠ Ġ) Ċ ) Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġitem Group Manager : ĠItem Group Manager , ĊĠĠĠ Ġprivate Ġval Ġrelation Manager : ĠRelation Manager , ĊĠĠĠ Ġprivate Ġval Ġsettings Manager : ĠSettings Manager , ĊĠĠĠ Ġprivate Ġval Ġtier Manager : ĠT ier Manager Ċ ) Ġ: ĠDrop Builder Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnewline Regex Ġ= Ġ"/ n ". to Regex () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġspace Regex Ġ= Ġ" Ġ". to Regex () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated ( ĊĠĠĠĠĠĠĠ Ġ" Get Ġvia ĠMy th ic D rops Api Ġinstead ", ĊĠĠĠĠĠĠĠ ĠReplace With ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" My th ic D rops Api . my th ic D rops . production Line . tier ed Item Factory . getNew Drop Builder ()", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . teal cube . minecraft . bukkit . my th ic dro ps . api . My th ic D rops Api " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġconstructor ( my th ic D rops : ĠMy th ic D rops ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġmy th ic D rops . item Group Manager , ĊĠĠĠĠĠĠĠ Ġmy th ic D rops . relation Manager , ĊĠĠĠĠĠĠĠ Ġmy th ic D rops . settings Manager , ĊĠĠĠĠĠĠĠ Ġmy th ic D rops . tier Manager ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġtier : ĠT ier ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmaterial : ĠMaterial ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġitem Generation Reason : ĠItem Generation Reason Ġ= ĠItem Generation Reason . DEFAULT ĊĠĠĠ Ġprivate Ġvar Ġuse Dur ability : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġwith Tier ( tier : ĠT ier ?): ĠDrop Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tier Ġ= Ġtier ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwith Tier ( tier Name : ĠString ?): ĠDrop Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtier Name ?. let Ġ{ Ġtier Manager . getById ( tier Name ) Ġ?: Ġtier Manager . getById ( tier Name . replace (" Ġ", Ġ"_ ")) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwith Material ( material : ĠMaterial ?): ĠDrop Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . material Ġ= Ġmaterial ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwith Item Generation Reason ( reason : ĠItem Generation Reason ?): ĠDrop Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . item Generation Reason Ġ= Ġreason Ġ?: ĠItem Generation Reason . DEFAULT ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġuse Dur ability ( b : ĠBoolean ): ĠDrop Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . use Dur ability Ġ= Ġb ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠItemStack ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchosen Tier Ġ= Ġtier Ġ?: Ġtier Manager . random By Weight () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmaterials From Tier Ġ= Ġchosen Tier . get Materials () ĊĠĠĠĠĠĠĠ Ġval Ġmaterial From Tier Ġ= Ġif Ġ( materials From Tier . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterials From Tier . random () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchosen Mat Ġ= Ġmaterial Ġ?: Ġmaterial From Tier Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Stack Ġ= ĠItemStack ( chosen Mat , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( chosen Tier . repair Cost Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . set Repair Cost ( chosen Tier . repair Cost ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use Dur ability ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdur ability Ġ= Ġchosen Mat . get Dur ability In Percentage Range ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchosen Tier . minimum Dur ability Percentage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchosen Tier . maximum Dur ability Percentage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . get Then SetItem Meta As Damage able Ġ{ Ġthis . damage Ġ= Ġdur ability Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Stack . is Un break able Ġ= Ġchosen Tier . is Un break able ĊĊĠĠĠĠĠĠĠ Ġval Ġen chant ment Name Ġ= Ġget Enchant ment TypeName ( item Stack ) ĊĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġgenerate Name ( item Stack , Ġchosen Tier , Ġen chant ment Name ) ĊĠĠĠĠĠĠĠ Ġitem Stack . set DisplayName Chat Color ized ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġlo re Ġ= Ġgenerate L ore ( item Stack , Ġchosen Tier , Ġen chant ment Name ) ĊĠĠĠĠĠĠĠ Ġitem Stack . set L ore Chat Color ized ( lo re ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Enchant ments Ġ= ĠItem Building Util . getBase Enchant ments ( item Stack , Ġchosen Tier ) ĊĠĠĠĠĠĠĠ Ġval Ġbonus Enchant ments Ġ= ĠItem Building Util . get Bonus Enchant ments ( item Stack , Ġchosen Tier ) ĊĠĠĠĠĠĠĠ Ġval Ġrelation Enchant ments Ġ= ĠItem Building Util . get Relation Enchant ments ( item Stack , Ġchosen Tier , Ġrelation Manager ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Attributes Ġ= ĠItem Building Util . getBase Attribute Modifiers ( chosen Tier ) ĊĠĠĠĠĠĠĠ Ġval Ġbonus Attributes Ġ= ĠItem Building Util . get Bonus Attribute Modifiers ( chosen Tier ) ĊĠĠĠĠĠĠĠ Ġval Ġrelation Attributes Ġ= Ġget Relation Attributes ( name . chat Color ize ()) ĊĊĠĠĠĠĠĠĠ Ġitem Stack . add Unsafe Enchant ments ( base Enchant ments . merge ( bonus Enchant ments ). merge ( relation Enchant ments )) ĊĠĠĠĠĠĠĠ Ġbase Attributes . forEach Ġ{ Ġattribute , Ġattribute Modifier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . addAttribute Modifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Modifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbonus Attributes . forEach Ġ{ Ġattribute , Ġattribute Modifier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . addAttribute Modifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Modifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrelation Attributes . map Ġ{ Ġit . to Attribute Modifier () Ġ}. forEach Ġ{ Ġ( attribute , Ġattribute Modifier ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack . addAttribute Modifier ( attribute , Ġattribute Modifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( settings Manager . config Settings . options . is Random ize Le ather Colors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLe ather Armor Util . set Random ized Color ( item Stack ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitem Stack . get Then SetItem Meta As < Sk ull Meta > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġow ning Player Ġ= ĠBu kkit . get Offline Player ( UUID . fromString (" a 8 2 8 9 ae 1 - db fb - 4 8 0 7 - ac 2 1 - b 4 5 8 7 9 6 ea 7 3 c ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Stack . set Persistent Data String ( my th ic D rops Tier , Ġchosen Tier . name ) ĊĠĠĠĠĠĠĠ Ġitem Stack . item Flags Ġ= Ġchosen Tier . item Flags ĊĊĠĠĠĠĠĠĠ Ġval Ġrandom Item Generation Event Ġ= ĠT ier ed Item Generation Event ( chosen Tier , Ġitem Stack , Ġitem Generation Reason ) ĊĠĠĠĠĠĠĠ ĠBu kkit . get PluginManager (). call Event ( random Item Generation Event ) ĊĠĠĠĠĠĠĠ Ġif Ġ( random Item Generation Event . is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrandom Item Generation Event . item Stack ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetItem Group ( item Stack : ĠItemStack , Ġfilter : Ġ( item Group : ĠItem Group ) Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ}): ĠItem Group ? Ġ= ĊĠĠĠĠĠĠĠ Ġitem Group Manager . get Matching Item Groups ( item Stack . type ). filter Ġ{ Ġitem Group Ġ-> Ġitem Group . priority Ġ>= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( filter ). sh uffled (). min By OrNull Ġ{ Ġitem Group Ġ-> Ġitem Group . priority Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate L ore ( ĊĠĠĠĠĠĠĠ Ġitem Stack : ĠItemStack , ĊĠĠĠĠĠĠĠ Ġchosen Tier : ĠT ier , ĊĠĠĠĠĠĠĠ Ġen chant ment Name : ĠString ĊĠĠĠ Ġ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtooltip Format Ġ= Ġchosen Tier . tooltip Format Ġ?: Ġsettings Manager . config Settings . display . tooltip Format ĊĊĠĠĠĠĠĠĠ Ġval Ġm inecraft Name Ġ= Ġget Minecraft Material Name ( item Stack . type ) ĊĠĠĠĠĠĠĠ Ġval Ġmy th ic Name Ġ= Ġget My th ic Material Name ( item Stack . type ) ĊĠĠĠĠĠĠĠ Ġval Ġgeneral L ore String Ġ= ĠName Map . getRandom ( Name Type . GENERAL _ LO RE , Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġmaterial L ore String Ġ= ĠName Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getRandom ( Name Type . MAT ERIAL _ LO RE , Ġitem Stack . type . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġval Ġtier L ore String Ġ= ĠName Map . getRandom ( Name Type . TI ER _ LO RE , Ġchosen Tier . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġval Ġen chant ment L ore String Ġ= ĠName Map . getRandom ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Type . EN CHANT MENT _ LO RE , Ġen chant ment Name . toLowerCase () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Group For L ore Ġ= ĠgetItem Group ( item Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Map . get Matching Keys ( Name Type . ITEM TYPE _ LO RE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġkey Ġ-> Ġkey . remove Prefix ( Name Type . ITEM TYPE _ LO RE . format ) Ġ}. contains ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Type L ore String Ġ= ĠName Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getRandom ( Name Type . ITEM TYPE _ LO RE , Ġitem Group For L ore ?. name ?. toLowerCase () Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠ Ġval Ġgeneral L ore Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneral L ore String . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmaterial L ore Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial L ore String . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtier L ore Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtier L ore String . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġen chant ment L ore Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen chant ment L ore String . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Type L ore Ġ= Ġitem Type L ore String . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbase L ore Ġ= Ġchosen Tier . base L ore . flatMap Ġ{ Ġline Of L ore Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Of L ore . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠnumOf Bonus L ore Ġ= Ġ( chosen Tier . minimum Bonus L ore .. chosen Tier . maximum Bonus L ore ). safe Random () ĊĠĠĠĠĠĠĠ Ġval Ġbonus L ore Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġrepeat ( num Of Bonus L ore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailable Bonus L ore Ġ= Ġchosen Tier . bonus L ore . filter Ġ{ Ġ! bonus L ore . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( available Bonus L ore . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Bonus L ore Ġ= Ġavailable Bonus L ore . random () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbonus L ore . addAll ( selected Bonus L ore . split ( newline Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( socket Gem L ore , Ġsocket able L ore , Ġsocket L ore ) Ġ= Ġgenerate Socket L ore ( chosen Tier ) ĊĊĠĠĠĠĠĠĠ Ġval ĠdisplayName Ġ= Ġitem Stack . displayName ĊĠĠĠĠĠĠĠ Ġval Ġrelation L ore Ġ= ĠdisplayName ?. let Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . strip Colors (). split ( space Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġrelation Manager . getById ( it ) Ġ}. flatMap Ġ{ Ġit . lo re Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% base material %" Ġto Ġm inecraft Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% my th ic material %" Ġto Ġmy th ic Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% tier name %" Ġto Ġchosen Tier . displayName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ench ant ment %" Ġto Ġen chant ment Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% tier color %" Ġto Ġ"${ chosen Tier . display Color }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% item type %" Ġto Ġ( item Group For L ore ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtooltip Format . replace With Collections ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% base lo re %" Ġto Ġbase L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% bonus lo re %" Ġto Ġbonus L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% socket gem lo re %" Ġto Ġsocket Gem L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% socket able lo re %" Ġto Ġsocket able L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% socket lo re %" Ġto Ġsocket L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% general lo re %" Ġto Ġgeneral L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% tier lo re %" Ġto Ġtier L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% material lo re %" Ġto Ġmaterial L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ench ant ment lo re %" Ġto Ġen chant ment L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% relation lo re %" Ġto Ġrelation L ore , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% item type lo re %" Ġto Ġitem Type L ore ĊĠĠĠĠĠĠĠ Ġ). replace Args ( args ). map Ġ{ ĠTemp lating Util . template ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Socket L ore ( chosen Tier : ĠT ier ): ĠTrip le < List < String >, ĠList < String >, ĠList < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! settings Manager . config Settings . components . is Socket ing Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( emptyList (), Ġempty List (), Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsocket Gem L ore Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġsocket able L ore Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġif Ġ( Math . random () Ġ< Ġchosen Tier . chance To Have Sockets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Sockets Ġ= Ġ( chosen Tier . minimum Sockets .. chosen Tier . maximum Sockets ). safe Random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Sockets Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠnumberOf Sockets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġsettings Manager . socket ing Settings . items . socket ed Item . socket ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket Gem L ore . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket able L ore . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . socket ing Settings . items . socket ed Item . lo re ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Math . random () Ġ< Ġchosen Tier . chance To Have Socket Ext ender Slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Socket Ext ender Slots Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( chosen Tier . minimum Socket Ext ender Slots .. chosen Tier . maximum Socket Ext ender Slots ). safe Random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Socket Ext ender Slots Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠnumberOf Socket Ext ender Slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġsettings Manager . socket ing Settings . items . socket Ext ender . slot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket Gem L ore . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsocket L ore Ġ= Ġsocket Gem L ore . to Mutable List () ĊĠĠĠĠĠĠĠ Ġsocket L ore . addAll ( socket able L ore ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( socket Gem L ore , Ġsocket able L ore , Ġsocket L ore ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Name ( ĊĠĠĠĠĠĠĠ Ġitem Stack : ĠItemStack , ĊĠĠĠĠĠĠĠ Ġchosen Tier : ĠT ier , ĊĠĠĠĠĠĠĠ Ġen chant ment Name : ĠString ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġchosen Tier . item DisplayName Format Ġ?: Ġsettings Manager . config Settings . display . item DisplayName Format ĊĠĠĠĠĠĠĠ Ġif Ġ( format . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" My th ic ĠItem " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm inecraft Name Ġ= Ġget Minecraft Material Name ( item Stack . type ) ĊĠĠĠĠĠĠĠ Ġval Ġmy th ic Name Ġ= Ġget My th ic Material Name ( item Stack . type ) ĊĠĠĠĠĠĠĠ Ġval Ġgeneral Prefix Ġ= ĠName Map . getRandom ( Name Type . GENERAL _ PREFIX , Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġgeneral Suffix Ġ= ĠName Map . getRandom ( Name Type . GENERAL _ SUFFIX , Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġmaterial Prefix Ġ= ĠName Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getRandom ( Name Type . MAT ERIAL _ PREFIX , Ġitem Stack . type . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġval Ġmaterial Suffix Ġ= ĠName Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getRandom ( Name Type . MAT ERIAL _ SUFFIX , Ġitem Stack . type . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġval Ġtier Prefix Ġ= ĠName Map . getRandom ( Name Type . TI ER _ PREFIX , Ġchosen Tier . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġval Ġtier Suffix Ġ= ĠName Map . getRandom ( Name Type . TI ER _ SUFFIX , Ġchosen Tier . name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġval Ġhighest En ch Ġ= Ġitem Stack . get Highest Enchant ment () ĊĠĠĠĠĠĠĠ Ġval Ġen chant ment Prefix Ġ= Ġget Enchant ment Prefix ( highest En ch ) ĊĠĠĠĠĠĠĠ Ġval Ġen chant ment Suffix Ġ= Ġget Enchant ment Suffix ( highest En ch ) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Group For Prefix Ġ= ĠgetItem Group ( item Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Map . get Matching Keys ( Name Type . ITEM TYPE _ PREFIX ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġkey Ġ-> Ġkey . remove Prefix ( Name Type . ITEM TYPE _ PREFIX . format ) Ġ}. contains ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Group For Suffix Ġ= ĠgetItem Group ( item Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Map . get Matching Keys ( Name Type . ITEM TYPE _ SUFFIX ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġkey Ġ-> Ġkey . remove Prefix ( Name Type . ITEM TYPE _ SUFFIX . format ) Ġ}. contains ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Type Prefix Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Map . getRandom ( Name Type . ITEM TYPE _ PREFIX , Ġitem Group For Prefix ?. name ?. toLowerCase () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġitem Type Suffix Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Map . getRandom ( Name Type . ITEM TYPE _ SUFFIX , Ġitem Group For Suffix ?. name ?. toLowerCase () Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% base material %" Ġto Ġm inecraft Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% my th ic material %" Ġto Ġmy th ic Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% general prefix %" Ġto Ġgeneral Prefix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% gener als uffix %" Ġto Ġgeneral Suffix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% material prefix %" Ġto Ġmaterial Prefix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% material suffix %" Ġto Ġmaterial Suffix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% item type prefix %" Ġto Ġitem Type Prefix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% item types uffix %" Ġto Ġitem Type Suffix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% tier prefix %" Ġto Ġtier Prefix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ti ers uffix %" Ġto Ġtier Suffix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% tier name %" Ġto Ġchosen Tier . displayName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ench ant ment %" Ġto Ġen chant ment Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ench ant ment prefix %" Ġto Ġen chant ment Prefix , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ench ant ments uffix %" Ġto Ġen chant ment Suffix ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ chosen Tier . display Color }${ format . replace Args ( args ). trim ()} ${ chosen Tier . identifier Color }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġget Enchant ment Suffix ( highest En ch : ĠEn chant ment ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠName Map . getRandom ( Name Type . EN CHANT MENT _ SUFFIX , Ġhighest En ch ?. key ?. toString ()?. toLowerCase () Ġ?: Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġget Enchant ment Prefix ( highest En ch : ĠEn chant ment ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠName Map . getRandom ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName Type . EN CHANT MENT _ PREFIX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighest En ch ?. key ?. toString ()?. toLowerCase () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget My th ic Material Name ( type : ĠMaterial ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcom b Ġ= Ġtype . name ĊĠĠĠĠĠĠĠ Ġvar Ġmy th ic Mat Name : ĠString ? Ġ= Ġsettings Manager . language Settings . display Names [ comb ] ĊĠĠĠĠĠĠĠ Ġif Ġ( my th ic Mat Name Ġ== Ġnull Ġ|| Ġmy th ic Mat Name Ġ== Ġcom b ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy th ic Mat Name Ġ= Ġget Minecraft Material Name ( type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmy th ic Mat Name . to Title Case () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Minecraft Material Name ( type : ĠMaterial ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmat Name Ġ= Ġtype . name ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġmat Name . split ("_ ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġpretty Material Name Ġ= ĠJoin er . on (" Ġ"). skip Null s (). join ( split ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpretty Material Name . to Title Case () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Enchant ment TypeName ( item Stack : ĠItemStack ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġen chant ment Ġ= Ġitem Stack . get Highest Enchant ment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġsettings Manager . language Settings . display Names ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get OrDefault (" Ord inary ", Ġ" Ord inary ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. chat Color ize () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġval Ġen ch Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . language Settings . display Names [ ench ant ment . key . key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsettings Manager . language Settings . display Names [ ench ant ment . name ] ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . language Settings . display Names [ ench ant ment . name ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġen ch Ġ?: Ġ" Ord inary " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Relation Attributes ( name : ĠString ): ĠList < My th ic Attribute > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname . strip Colors (). split ( space Regex ). drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġrelation Manager . getById ( it ) Ġ}. flatMap Ġ{ Ġit . attributes Ġ} ĊĠĠĠ Ġ} Ċ } Ċ