Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġorg . apollo . game . Game Constants Ċ import Ġorg . apollo . game . action . Action Block Ċ import Ġorg . apollo . game . action . Async Dist anced Action Ċ import Ġorg . apollo . game . message . impl . Object Action Message Ċ import Ġorg . apollo . game . model . Position Ċ import Ġorg . apollo . game . model . World Ċ import Ġorg . apollo . game . model . entity . Player Ċ import Ġorg . apollo . game . model . entity . obj . GameObject Ċ import Ġorg . apollo . game . plugin . api .* Ċ import Ġorg . apollo . game . plugin . skills . wood cut ting . A xe Ċ import Ġorg . apollo . game . plugin . skills . wood cut ting . Tree Ċ Ċ // ĠTODO ĠAcc ur ate Ġch op ping Ġrates , Ġe . g . Ġhttps :// twitter . com / J age x K ieren / status / 7 1 3 4 0 3 1 2 4 4 6 4 1 0 7 5 2 0 Ċ Ċ on Ġ{ ĠObject Action Message :: class Ġ} ĊĠĠĠ Ġ. where Ġ{ Ġoption Ġ== Ġ 1 Ġ} ĊĠĠĠ Ġ. then Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠ ĠTree . lookup ( id )?. let Ġ{ ĠW ood cut ting Action . start ( this , Ġplayer , Ġit ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ class ĠW ood cut ting Target ( private Ġval Ġobject Id : ĠInt , Ġval Ġposition : ĠPosition , Ġval Ġtree : ĠTree ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġtree Ġobject Ġin Ġthe Ġworld ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetObject ( world : ĠWorld ): ĠGameObject ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġworld . find Object ( position , Ġobject Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġthe Ġtree Ġwas Ġcut Ġdown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Cut Down (): ĠBoolean Ġ= Ġrand ( 1 0 0 ) Ġ<= Ġtree . chance Ġ* Ġ 1 0 0 Ċ } Ċ Ċ class ĠW ood cut ting Action ( ĊĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠ Ġprivate Ġval Ġtool : ĠA xe , ĊĠĠĠ Ġprivate Ġval Ġtarget : ĠW ood cut ting Target Ċ ) Ġ: ĠAsync Dist anced Action < Player >( DELAY , Ġtrue , Ġplayer , Ġtarget . position , ĠT REE _ SIZE ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEL AY Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠT REE _ SIZE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN IMUM _ RESP A WN _ TIME Ġ= Ġ 3 0 L Ġ// ĠIn Ġseconds ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠStarts Ġa Ġ[ W ood cut ting Action ] Ġfor Ġthe Ġspecified Ġ[ Player ], Ġterminating Ġthe Ġ[ Object Action Message ] Ġthat Ġtriggered ĊĠĠĠĠĠĠĠĠ Ġ* Ġit . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart ( message : ĠObject Action Message , Ġplayer : ĠPlayer , Ġwood : ĠTree ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa xe Ġ= ĠA xe . best For ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( axe Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . inventory . free Slots () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . inventory . force Capacity Exceeded () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠW ood cut ting Action ( player , Ġa xe , ĠW ood cut ting Target ( message . id , Ġmessage . position , Ġwood )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . start Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . sendMessage (" You Ġdo Ġnot Ġhave Ġan Ġa xe Ġfor Ġwhich Ġyou Ġhave Ġthe Ġlevel Ġto Ġuse .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . terminate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaction (): ĠAction Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġmob . turn To ( position ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġmob . wood cut ting . current ĊĠĠĠĠĠĠĠ Ġif Ġ( level Ġ< Ġtarget . tree . level ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmob . sendMessage (" You Ġdo Ġnot Ġhave Ġthe Ġrequired Ġlevel Ġto Ġcut Ġdown Ġthis Ġtree .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmob . sendMessage (" You Ġsw ing Ġyour Ġa xe Ġat Ġthe Ġtree .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmob . play Animation ( tool . animation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwait ( tool . pul ses ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġobject Ġexists Ġin Ġthe Ġworld ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġtarget . getObject ( mob . world ) Ġ?: Ġstop () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mob . inventory . add ( target . tree . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Name Ġ= ĠDefinitions . item ( target . tree . id ). name . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob . sendMessage (" You Ġmanaged Ġto Ġcut Ġsome Ġ$ log Name .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob . wood cut ting . experience Ġ+= Ġtarget . tree . exp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . is Cut Down ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresp awn Ġtime : Ġhttp :// run escape . wik ia . com / wiki / Trees ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp awn Ġ= ĠTimeUnit . SECONDS . to Millis ( MIN IMUM _ RESP A WN _ TIME Ġ+ Ġrand ( 1 5 0 )) Ġ/ ĠGame Constants . P UL SE _ DELAY ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob . world . replace Object ( obj , Ġtarget . tree . st ump , Ġresp awn . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }