package Ġcom . de an veloper . k bukkit . player Ċ Ċ import Ġcom . de an veloper . k bukkit . util . Players Ċ import Ġcom . de an veloper . k bukkit . util . register Events Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . EventHandler Ċ import Ġorg . bukkit . event . Listener Ċ import Ġorg . bukkit . event . player . Player Join Event Ċ import Ġorg . bukkit . event . player . Player Quit Event Ċ import Ġorg . bukkit . plugin . Plugin Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠAPI Ġfor Ġcustom Ġplayers Ġthrough Ġdeleg ation . Ċ Ġ* ĠIn Ġorder Ġto Ġimplement , Ġmake Ġsure Ġyour Ċ Ġ* Ġcompanion Ġobject Ġextends ĠCustom Player Companion Ġand Ċ Ġ* Ġprovides Ġthe Ġtype Ġof Ġyour Ġclass . Ċ Ġ* Ċ Ġ* Ġ@ author ĠDe an ĠB Ġ< de an @ de an veloper . com > Ċ Ġ*/ Ċ open Ġclass ĠCustom Player Ġprotected Ġconstructor ( var Ġbu kkit Player : ĠPlayer ) Ġ: ĠPlayer Ġby Ġbu kkit Player Ġ{ ĊĠĠĠ Ġ// Ġcompanion Ġobject Ġ: ĠCustom Player Companion < Custom Player >( :: Custom Player , Ġplugin ) Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġclass , Ġwhile Ġnot Ġrequired , Ġprovides Ġutility Ġin Ġyour Ċ Ġ* ĠCustom Player Ġimplementation 's Ġcompanion Ġobject . Ċ Ġ* Ċ Ġ* ĠUsage Ġ-> Ġcompanion Ġobject Ġ: ĠCustom Player Companion < Your Impl >( :: Your Impl ) Ċ Ġ*/ Ċ open Ġclass ĠCustom Player Companion < T Ġ: ĠCustom Player >( val Ġfactory : Ġ( Player ) Ġ-> ĠT , Ġplugin : ĠPlugin ) Ġ: ĠListener Ġ{ ĊĠĠĠ Ġprotected Ġval Ġid Map Ġ= Ġmutable Map Of < UUID , ĠT >() ĊĠĠĠ Ġprotected Ġval Ġname Map Ġ= Ġmutable Map Of < String , ĠT >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . register Events ( plugin ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF etches Ġthe ĠCustom Player Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠCustom Player Ġinstance Ġfor Ġthis Ġbu kkit Player ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( b Player : ĠPlayer ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( b Player . unique Id Ġin Ġid Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġid Map [ b Player . unique Id ] !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . bukkit Player Ġ!== Ġb Player ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġupdate ( b Player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġplayer ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġupdate ( b Player ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF etches Ġthe ĠCustom Player Ġinstance Ġfrom Ġa ĠUUID . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠCustom Player Ġassociated Ġwith Ġthe ĠUUID , Ġnull Ġif Ġthe Ġplayer Ġis Ġnot Ġonline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠUUID ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠP layers [ index ] ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif ( player Ġ=== Ġnull ) Ġnull Ġelse Ġthis [ player ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF etches Ġthe ĠCustom Player Ġinstance Ġfrom Ġa Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠCustom Player Ġassociated Ġwith Ġthe Ġname , Ġnull Ġif Ġthe Ġplayer Ġis Ġnot Ġonline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Names Ġare Ġnot Ġguaranteed Ġto Ġbe Ġunique .", ĠReplace With (" get ( id ) ")) ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠString ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠP layers [ index ] ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif ( player Ġ=== Ġnull ) Ġnull Ġelse Ġthis [ player ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġupdate ( b Player : ĠPlayer ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġid Map [ b Player . unique Id ] Ġ?: Ġfactory ( b Player ) ĊĠĠĠĠĠĠĠ Ġplayer . bukkit Player Ġ= Ġb Player ĊĊĠĠĠĠĠĠĠ Ġid Map [ b Player . unique Id ] Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġname Map [ b Player . name ] Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġreturn Ġplayer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon Join ( e : ĠPlayer Join Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate ( e . player ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon Leave ( e : ĠPlayer Quit Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġid Map . remove ( e . player . unique Id ) ĊĠĠĠĠĠĠĠ Ġname Map . remove ( e . player . name ) ĊĠĠĠ Ġ} Ċ }