package Ġcom . github . sh yn ix n . pet blocks . bukkit . logic . business . service Ċ Ċ import Ġcom . github . sh yn ix n . pet blocks . api . business . enumeration . Chat Color Ċ import Ġcom . github . sh yn ix n . pet blocks . api . business . enumeration . Version Ċ import Ġcom . github . sh yn ix n . pet blocks . api . business . localization . Messages Ċ import Ġcom . github . sh yn ix n . pet blocks . api . business . service . Message Service Ċ import Ġcom . github . sh yn ix n . pet blocks . api . persistence . entity . ChatMessage Ċ import Ġcom . github . sh yn ix n . pet blocks . bukkit . logic . business . extension . find Clazz Ċ import Ġcom . github . sh yn ix n . pet blocks . bukkit . logic . business . extension . send Packet Ċ import Ġcom . google . inject . Inject Ċ import Ġorg . bukkit . Bu kkit Ċ import Ġorg . bukkit . command . Command Sender Ċ import Ġorg . bukkit . entity . Player Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ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 ĠMessage ServiceImpl Ġ@ Inject Ġconstructor ( private Ġval Ġversion : ĠVersion ) Ġ: ĠMessage Service Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġmessage Ġto Ġthe Ġgiven Ġsource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< S > Ġsend Source Message ( source : ĠS , Ġmessage : ĠString , Ġprefix : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( source Ġ! is ĠCommand Sender ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Source Ġhas Ġto Ġbe Ġa Ġsender !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( prefix ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . sendMessage ( Messages . prefix Ġ+ Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . sendMessage ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġcolored Ġconsole Ġmessage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsend Console Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBu kkit . getServer (). console Sender . sendMessage ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġthe Ġgiven Ġ[ chat Message ] Ġto Ġthe Ġgiven Ġ[ player ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< P > Ġsend Player Message ( player : ĠP , Ġchat Message : ĠChat Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Player Ġhas Ġto Ġbe Ġa ĠBu kkit Player !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= Ġchat Message . components ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Extra Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( components . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Components Ġamount Ġof Ġmessage Ġis Ġ 0 . ĠAre Ġyou Ġnot Ġusing Ġthe Ġparent Ġcomponent ?") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfinal Message Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfinal Message . append ("{ \" text \": Ġ\" \" ") ĊĠĠĠĠĠĠĠ Ġfinal Message . append (", Ġ\" extra \" Ġ: Ġ[ ") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( component Ġin Ġcomponents ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( component Ġ! is ĠChat Color Ġ&& Ġfirst Extra ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Message . append (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( component ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Color Ġ-> Ġcache . append ( component ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Message . append ("{ \" text \": Ġ\" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Message . append ( Chat Color . translate Chat Color Codes ('& ', Ġcache . toString () Ġ+ Ġcomponent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Message . append ("\" }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . set Length ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Extra Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Message . append ( component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Extra Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinal Message . append (" ]} ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġif ( version Ġ== ĠVersion . VERSION _ 1 _ 1 7 _ R 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass . forName (" net . minecraft . network . chat . I Chat Base Component \$ Chat Serializer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Clazz Ġ= Ġfind Clazz (" net . minecraft . network . protocol . game . Packet Play Out Chat ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Base Component Clazz Ġ= Ġfind Clazz (" net . minecraft . network . chat . I Chat Base Component ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Component Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . getDeclared Method (" a ", ĠString :: class . java ). invoke ( null , Ġfinal Message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Utils Clazz Ġ= Ġfind Clazz (" net . minecraft . System Utils ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault UUID Ġ= Ġsystem Utils Clazz . getDeclared Field (" b "). get ( null ) Ġas ĠUUID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Enum Message Ġ= Ġfind Clazz (" net . minecraft . network . chat . Chat MessageType ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Clazz . getDeclared Constructor ( chat Base Component Clazz , Ġchat Enum Message , ĠUUID :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( chat Component , Ġchat Enum Message . enum Constants [ 0 ], Ġdefault UUID ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= Ġif Ġ( version Ġ== ĠVersion . VERSION _ 1 _ 8 _ R 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Clazz (" net . minecraft . server . VERSION . Chat Serializer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Clazz (" net . minecraft . server . VERSION . I Chat Base Component \$ Chat Serializer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Clazz Ġ= Ġfind Clazz (" net . minecraft . server . VERSION . Packet Play Out Chat ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Base Component Clazz Ġ= Ġfind Clazz (" net . minecraft . server . VERSION . I Chat Base Component ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġclazz . getDeclared Method (" a ", ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Component Ġ= Ġmethod . invoke ( null , Ġfinal Message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion . is Version Same Or GreaterThan ( Version . VERSION _ 1 _ 1 6 _ R 1 ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Utils Clazz Ġ= Ġfind Clazz (" net . minecraft . server . VERSION . System Utils ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault UUID Ġ= Ġsystem Utils Clazz . getDeclared Field (" b "). get ( null ) Ġas ĠUUID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Enum Message Ġ= Ġfind Clazz (" net . minecraft . server . VERSION . Chat MessageType ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Clazz . getDeclared Constructor ( chat Base Component Clazz , Ġchat Enum Message , ĠUUID :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( chat Component , Ġchat Enum Message . enum Constants [ 0 ], Ġdefault UUID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion . is Version Same Or GreaterThan ( Version . VERSION _ 1 _ 1 2 _ R 1 ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Enum Message Ġ= Ġfind Clazz (" net . minecraft . server . VERSION . Chat MessageType ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Clazz . getDeclared Constructor ( chat Base Component Clazz , Ġchat Enum Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( chat Component , Ġchat Enum Message . enum Constants [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Clazz . getDeclared Constructor ( chat Base Component Clazz , ĠByte :: class . java Primitive Type !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( chat Component , Ġ 0 . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer . send Packet ( packet ) ĊĠĠĠ Ġ} Ċ } Ċ