package Ġcom . github . sh yn ix n . block ball . bukkit . logic . business . service Ċ Ċ import Ġcom . github . sh yn ix n . block ball . api . Block Ball Api Ċ import Ġcom . github . sh yn ix n . block ball . api . business . enumeration . EntityType Ċ import Ġcom . github . sh yn ix n . block ball . api . business . proxy . Ball Proxy Ċ import Ġcom . github . sh yn ix n . block ball . api . business . proxy . N MS Ball Proxy Ċ import Ġcom . github . sh yn ix n . block ball . api . business . proxy . Plugin Proxy Ċ import Ġcom . github . sh yn ix n . block ball . api . business . service . Ball Entity Service Ċ import Ġcom . github . sh yn ix n . block ball . api . business . service . Entity Registration Service Ċ import Ġcom . github . sh yn ix n . block ball . api . business . service . Game Service Ċ import Ġcom . github . sh yn ix n . block ball . api . persistence . entity . Ball Meta Ċ import Ġcom . github . sh yn ix n . block ball . bukkit . logic . business . extension . find Clazz Ċ import Ġcom . github . sh yn ix n . block ball . bukkit . logic . business . proxy . Ho log ram Proxy Impl Ċ import Ġcom . google . inject . Inject Ċ import Ġorg . bukkit . Chat Color Ċ import Ġorg . bukkit . Location Ċ import Ġorg . bukkit . entity . Armor Stand Ċ import Ġorg . bukkit . entity . Living Entity Ċ import Ġorg . bukkit . plugin . Plugin Ċ import Ġjava . util .* Ċ import Ġjava . util . logging . Level Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠSh yn ix n Ġ 2 0 1 8 . Ċ Ġ* Ġ< p > Ċ Ġ* ĠVersion Ġ 1 . 2 Ċ Ġ* Ġ< p > Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ġ< p > Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġby ĠSh yn ix n Ċ Ġ* Ġ< p > Ċ Ġ* Ġ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 : Ċ Ġ* Ġ< p > Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ġ< p > Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ class ĠBall Entity ServiceImpl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġplugin Proxy : ĠPlugin Proxy , ĊĠĠĠ Ġprivate Ġval Ġplugin : ĠPlugin , ĊĠĠĠ Ġprivate Ġval Ġentity Registry : ĠEntity Registration Service Ċ ) Ġ: ĠBall Entity Service , ĠRunnable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġregistered Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġb alls Ġ= ĠArrayList < Ball Proxy >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġplugin . server . scheduler . run Task Timer ( plugin , Ġthis , Ġ 0 L , Ġ 2 0 L Ġ* Ġ 6 0 Ġ* Ġ 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSp awns Ġa Ġtemporary Ġball . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< L > Ġspawn Temporary Ball ( location : ĠL , Ġmeta : ĠBall Meta ): ĠBall Proxy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdesign Clazz Ġ= Ġfind Clazz (" com . github . sh yn ix n . block ball . bukkit . logic . business . nms . VERSION . Ball Design ", Ġplugin Proxy ) ĊĠĠĠĠĠĠĠ Ġval Ġn ms Proxy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesign Clazz . getDeclared Constructor ( Location :: class . java , ĠBall Meta :: class . java , ĠBoolean :: class . java , ĠUUID :: class . java , ĠL iving Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( location , Ġmeta , Ġfalse , ĠUUID . randomUUID (), Ġnull ) Ġas ĠN MS Ball Proxy ĊĊĠĠĠĠĠĠĠ Ġval Ġball Proxy Ġ= Ġn ms Proxy . proxy ĊĠĠĠĠĠĠĠ Ġb alls . add ( ball Proxy ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġball Proxy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġentities Ġon Ġthe Ġserver Ġwhen Ġnot Ġalready Ġregistered . ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġregistered . ĠReturns Ġfalse Ġwhen Ġnot Ġregistered . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġregister Entities On Server (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( registered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġs lime Clazz Ġ= Ġfind Clazz (" com . github . sh yn ix n . block ball . bukkit . logic . business . nms . VERSION . Ball Hit Box ", Ġplugin Proxy ) ĊĊĠĠĠĠĠĠĠ Ġentity Registry . register ( s lime Clazz , ĠEntityType . S LI ME ) ĊĠĠĠĠĠĠĠ Ġregistered Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġthe Ġentity Ġcollection Ġfor Ġinvalid Ġball Ġentities Ġand Ġremoves Ġthem . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< E > Ġclean Up Invalid Entities ( entities : ĠCollection < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( entity Ġin Ġentities ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity Ġ! is ĠL iving Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity . custom Name Ġ== Ġ" Resource B alls Plugin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopt Proxy Ġ= Ġfind Ball From Entity ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! opt Proxy . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . remove () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( entity Ġas ĠAny ). java Class . getDeclared Method (" delete From World "). invoke ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch ( e Ġ: ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . logger . log ( Level . INFO , Ġ" Removed Ġinvalid ĠBlock Ball Ġin Ġchunk .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHo log r ams Ġhide Ġa Ġboot s Ġmarker Ġof Ġevery Ġspawn ed Ġarm or stand . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity Ġis ĠArm or Stand Ġ&& Ġentity . equipment Ġ!= Ġnull Ġ&& Ġentity . equipment !!. boot s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġboot s Ġ= Ġentity . equipment !!. boot s ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( boot s !!. item Meta Ġ!= Ġnull Ġ&& Ġboot s . item Meta !!. lo re Ġ!= Ġnull Ġ&& Ġboot s . item Meta !!. lo re !!. size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlo re Ġ= Ġboot s . item Meta !!. lo re ! ![ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Chat Color . strip Color ( lo re ) Ġ== Ġ" Block Ball Ho log ram ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexists Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( game Ġin ĠBlock Ball Api . resolve ( Game Service :: class . java ). getAll Games ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ho log ram Ġin Ġgame . ho log r ams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( ho log ram Ġas ĠHo log ram Proxy Impl ). armor stand s . contains ( entity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexists Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . logger . log ( Level . INFO , Ġ" Removed Ġinvalid ĠHo log ram Ġin Ġchunk .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds ĠBall Ġfrom Ġthe Ġgiven Ġentity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< E > Ġfind Ball From Entity ( entity : ĠE ): ĠOptional < Ball Proxy > Ġ{ ĊĠĠĠĠĠĠĠ Ġb alls . forEach Ġ{ Ġball Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ball . is Dead ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ball . get Design Armor stand < E >() Ġ== Ġentity Ġ|| Ġball . get Hit box < E >() Ġ== Ġentity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOptional . of ( ball ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOptional . empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġall Ġb alls Ġmanaged Ġby Ġthe Ġplugin . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetAll B alls (): ĠList < Ball Proxy > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb alls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġan Ġobject Ġimplementing Ġinterface Ġ` Runnable ` Ġis Ġused ĊĠĠĠĠ Ġ* Ġto Ġcreate Ġa Ġthread , Ġstarting Ġthe Ġthread Ġcauses Ġthe Ġobject 's ĊĠĠĠĠ Ġ* Ġ` run ` Ġmethod Ġto Ġbe Ġcalled Ġin Ġthat Ġseparately Ġexecuting ĊĠĠĠĠ Ġ* Ġthread . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġgeneral Ġcontract Ġof Ġthe Ġmethod Ġ` run ` Ġis Ġthat Ġit Ġmay ĊĠĠĠĠ Ġ* Ġtake Ġany Ġaction Ġwhat so ever . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġjava . lang . Thread . run ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġb alls . to Typed Array (). forEach Ġ{ Ġball Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ball . is Dead ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . b alls . remove ( ball ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ