/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠRo ss ĠBind en Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . r pk it . auction s . bukkit . listener Ċ Ċ import Ġcom . r pk it . auction s . bukkit . RP KA uction s Bu kkit Ċ import Ġcom . r pk it . auction s . bukkit . auction . RP KA uction Provider Ċ import Ġcom . r pk it . auction s . bukkit . bid . RP KB id Ċ import Ġcom . r pk it . auction s . bukkit . bid . RP KB id Impl Ċ import Ġcom . r pk it . characters . bukkit . character . RP K Character Ċ import Ġcom . r pk it . characters . bukkit . character . RP K Character Provider Ċ import Ġcom . r pk it . econom y . bukkit . econom y . RP KE conom y Provider Ċ import Ġcom . r pk it . players . bukkit . profile . RP KM inecraft Profile Ċ import Ġcom . r pk it . players . bukkit . profile . RP KM inecraft Profile Provider Ċ import Ġorg . bukkit . Chat Color . GREEN Ċ import Ġorg . bukkit . Material . AIR Ċ import Ġorg . bukkit . block . Sign Ċ import Ġorg . bukkit . event . EventHandler Ċ import Ġorg . bukkit . event . Listener Ċ import Ġorg . bukkit . event . player . Player Interact Event Ċ Ċ /** Ċ Ġ* ĠPlayer Ġinteract Ġlistener Ġfor Ġauction Ġsigns . Ċ Ġ*/ Ċ class ĠPlayer Interact Listener ( private Ġval Ġplugin : ĠRP KA uction s Bu kkit ): ĠListener Ġ{ ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon Player Interact ( event : ĠPlayer Interact Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! event . has Block ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġsign Ġ= Ġevent . clicked Block ?. state Ġas ? ĠSign Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( sign . getLine ( 0 ) Ġ!= Ġ"$ GREEN [ auction ]") Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! event . player . has Permission (" r pk it . auction s . sign . auction . bid ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" no - permission - bid "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm inecraft Profile Provider Ġ= Ġplugin . core . service Manager . get ServiceProvider ( RP KM inecraft Profile Provider :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Provider Ġ= Ġplugin . core . service Manager . get ServiceProvider ( RP K Character Provider :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġeconom y Provider Ġ= Ġplugin . core . service Manager . get ServiceProvider ( RP KE conom y Provider :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġauction Provider Ġ= Ġplugin . core . service Manager . get ServiceProvider ( RP KA uction Provider :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġm inecraft Profile Ġ= Ġm inecraft Profile Provider . getM inecraft Profile ( event . player ) ĊĠĠĠĠĠĠĠ Ġif Ġ( minecraft Profile Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" no - minecraft - profile "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Ġ= Ġcharacter Provider . getActive Character ( minecraft Profile ) ĊĠĠĠĠĠĠĠ Ġval Ġauction Ġ= Ġauction Provider . get Auction ( sign . getLine ( 1 ). toInt ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( auction Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" bid - invalid - auction - not - existent "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ>= Ġauction . endTime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauction . close B idding () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! auction . is B idding Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" bid - invalid - auction - not - open "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbid Amount Ġ= Ġ( auction . bids . sorted By Descending ( RP KB id :: amount ). first OrNull ()?. amount ?: auction . start Price ) Ġ+ Ġauction . minimum Bid Increment ĊĠĠĠĠĠĠĠ Ġif Ġ( character Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" no - character "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bid Amount Ġ>= Ġeconom y Provider . get Balance ( character , Ġauction . currency )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" bid - invalid - not - en ough - money "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġplugin . config . getInt (" auction s . radius ") ĊĠĠĠĠĠĠĠ Ġval Ġauction Location Ġ= Ġauction . location ĊĠĠĠĠĠĠĠ Ġif Ġ( radius Ġ>= Ġ 0 Ġ&& Ġauction Location Ġ!= Ġnull Ġ&& Ġevent . player . location . distance Squared ( auction Location ) Ġ> Ġradius Ġ* Ġradius ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" bid - invalid - too - far - away "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbid Ġ= ĠRP KB id Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauction Ġ= Ġauction , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Ġ= Ġcharacter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġbid Amount ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! auction . add Bid ( bid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" bid - create - failed "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! auction Provider . update Auction ( auction )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" auction - update - failed "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent . player . sendMessage ( plugin . messages [" bid - valid ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" amount ", Ġbid . amount . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" currency ", Ġif Ġ( bid . amount Ġ== Ġ 1 ) Ġauction . currency . name Sing ular Ġelse Ġauction . currency . name Pl ural ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" item ", Ġauction . item . amount . toString () Ġ+ Ġ" Ġ" Ġ+ Ġauction . item . type . toString (). toLowerCase (). replace ("_ ", Ġ" Ġ") Ġ+ Ġif Ġ( auction . item . amount Ġ!= Ġ 1 ) Ġ" s " Ġelse Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ]) ĊĠĠĠĠĠĠĠ Ġauction . bids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( RP KB id :: character ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġcharacter Ġ-> Ġcharacter Ġ!= Ġbid . character Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( RP K Character :: minecraft Profile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( RP KM inecraft Profile :: is Online ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġm inecraft Profile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm inecraft Profile . sendMessage ( plugin . messages [" bid - created ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" auction _ id ", Ġbid . auction . id . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" character ", Ġbid . character . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" amount ", Ġbid . amount . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" currency ", Ġif Ġ( bid . amount Ġ== Ġ 1 ) Ġauction . currency . name Sing ular Ġelse Ġauction . currency . name Pl ural ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" item ", Ġauction . item . amount . toString () Ġ+ Ġ" Ġ" Ġ+ Ġauction . item . type . toString (). toLowerCase (). replace ("_ ", Ġ" Ġ") Ġ+ Ġif Ġ( auction . item . amount Ġ!= Ġ 1 ) Ġ" s " Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsign . set Line ( 3 , Ġ( bid . amount Ġ+ Ġauction . minimum Bid Increment ). toString ()) ĊĠĠĠĠĠĠĠ Ġsign . update () ĊĠĠĠĠĠĠĠ Ġif Ġ(! auction . is B idding Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . clicked Block ?. type Ġ= ĠA IR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ