package Ġcom . github . sh yn ix n . block ball . bukkit . logic . business . service Ċ Ċ import Ġcom . github . sh yn ix n . block ball . api . business . enumeration . Chat Click Action Ċ import Ġcom . github . sh yn ix n . block ball . api . business . enumeration . Game Type Ċ import Ġcom . github . sh yn ix n . block ball . api . business . service .* Ċ import Ġcom . github . sh yn ix n . block ball . api . persistence . entity . Game Ċ import Ġcom . github . sh yn ix n . block ball . api . persistence . entity . Interaction Cache Ċ import Ġcom . github . sh yn ix n . block ball . bukkit . logic . business . extension .* Ċ import Ġcom . github . sh yn ix n . block ball . core . logic . persistence . entity . Chat Builder Entity Ċ import Ġcom . github . sh yn ix n . block ball . core . logic . persistence . entity . Interaction Cache Entity Ċ import Ġcom . github . sh yn ix n . block ball . core . logic . business . extension . translate Chat Colors Ċ import Ġcom . google . inject . Inject Ċ import Ġorg . bukkit . Game Mode Ċ import Ġorg . bukkit . Location Ċ import Ġorg . bukkit . entity . Player Ċ Ċ /** Ċ Ġ* Ġ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 ĠHub Game Force field ServiceImpl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġgame Service : ĠGame Service , ĊĠĠĠ Ġprivate Ġval Ġconfiguration Service : ĠConfiguration Service , ĊĠĠĠ Ġprivate Ġval Ġgame Action Service : ĠGame Action Service , ĊĠĠĠ Ġprivate Ġval Ġproxy Service : ĠProxy Service Ċ ) Ġ: ĠHub Game Force field Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcache Ġ= ĠHashMap < Player , ĠInteraction Cache >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġand Ġexecutes Ġthe Ġforce field Ġactions Ġif Ġthe Ġgiven Ġ[ player ] ĊĠĠĠĠ Ġ* Ġis Ġgoing Ġto Ġthe Ġgiven Ġ[ location ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< P , ĠL > Ġcheck For Force field Interactions ( player : ĠP , Ġlocation : ĠL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Player Ġhas Ġto Ġbe Ġa ĠBu kkit Player !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ! is ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Location Ġhas Ġto Ġbe Ġa ĠBu kkit Location !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġconfiguration Service . find Value < String >(" messages . prefix ") ĊĠĠĠĠĠĠĠ Ġval Ġinteraction Cache Ġ= Ġget Interaction Cache ( player ) ĊĠĠĠĠĠĠĠ Ġval Ġgame Internal Ġ= Ġgame Service . get Game From Player ( player ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game Internal . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game Internal . get (). arena . game Type Ġ== ĠGame Type . HUB GAME Ġ&& Ġ! game Internal . get (). arena . is Location In Selection ( player . location )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Action Service . leave Game ( game Internal . get (), Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġin Area Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġgame Service . getAll Games (). forEach Ġ{ Ġgame Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . arena . enabled Ġ&& Ġgame . arena . game Type Ġ== ĠGame Type . HUB GAME Ġ&& Ġgame . arena . is Location In Selection ( location )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Area Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . arena . meta . hub Lobby Meta . instant Force field Join ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Action Service . join Game ( game , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interaction Cache . last Position Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . arena . meta . protection Meta . re join Protection Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . velocity Ġ= Ġgame . arena . meta . protection Meta . re join Protection . to Vector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interaction Cache . movement Counter Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Cache . movement Counter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( interaction Cache . movement Counter Ġ< Ġ 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Cache . movement Counter Ġ= Ġinteraction Cache . movement Counter Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interaction Cache . movement Counter Ġ> Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . velocity Ġ= Ġgame . arena . meta . protection Meta . re join Protection . to Vector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkn ock back Ġ= Ġinteraction Cache . last Position !!. to Location (). to Vector (). subtract ( player . location . to Vector ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . location . direction Ġ= Ġkn ock back ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . velocity Ġ= Ġkn ock back ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . allow Flight Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! interaction Cache . toggle d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoin Command Ġ= Ġconfiguration Service . find Value < String >(" global - join . command ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠChat Builder Entity (). text ( prefix Ġ+ Ġgame . arena . meta . hub Lobby Meta . join Message [ 0 ]. translate Chat Colors ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. nextLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. component ( game . arena . meta . hub Lobby Meta . join Message [ 1 ]. replace Game Placeholder ( game , Ġgame . arena . meta . red Team Meta )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Click Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChat Click Action . RUN _ COMMAND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ"/" Ġ+ Ġjoin Command Ġ+ Ġ" Ġ" Ġ+ Ġgame . arena . name Ġ+ Ġ" |" Ġ+ Ġgame . arena . meta . red Team Meta . displayName . strip Chat Colors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hover Text (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder (). text (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. component ( game . arena . meta . hub Lobby Meta . join Message [ 2 ]. replace Game Placeholder ( game , Ġgame . arena . meta . blue Team Meta )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Click Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChat Click Action . RUN _ COMMAND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ"/" Ġ+ Ġjoin Command Ġ+ Ġ" Ġ" Ġ+ Ġgame . arena . name Ġ+ Ġ" |" Ġ+ Ġgame . arena . meta . blue Team Meta . displayName . strip Chat Colors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hover Text (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy Service . sendMessage ( player , Ġb ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Cache . toggle d Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! in Area ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interaction Cache . movement Counter Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Cache . movement Counter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interaction Cache . toggle d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . game Mode Ġ!= ĠGame Mode . CRE ATIVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . allow Flight Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Cache . toggle d Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinteraction Cache . last Position Ġ= Ġplayer . location . to Position () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġinteraction Ġcache Ġof Ġthe Ġgiven Ġ[ player ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< P > Ġget Interaction Cache ( player : ĠP ): ĠInteraction Cache Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Player Ġhas Ġto Ġbe Ġa ĠBu kkit Player !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! cache . containsKey ( player )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache [ player ] Ġ= ĠInteraction Cache Entity () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcache [ player ] !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġall Ġresources Ġthis Ġ[ player ] Ġhas Ġallocated Ġfrom Ġthis Ġservice . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< P > Ġclean Resources ( player : ĠP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Player Ġhas Ġto Ġbe Ġa ĠBu kkit Player !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cache . containsKey ( player )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache . remove ( player ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }