package Ġjp . ass as ans . prot ank i . server . commands . handlers Ċ Ċ import Ġkotlin . time . Duration . Companion . milliseconds Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġjp . ass as ans . prot ank i . server . b att les . Battle Property Ċ import Ġjp . ass as ans . prot ank i . server . b att les . effect . Double Armor Effect Ċ import Ġjp . ass as ans . prot ank i . server . b att les . effect . Double Damage Effect Ċ import Ġjp . ass as ans . prot ank i . server . b att les . effect . Mine Effect Ċ import Ġjp . ass as ans . prot ank i . server . b att les . effect . N itro Effect Ċ import Ġjp . ass as ans . prot ank i . server . client . User Socket Ċ import Ġjp . ass as ans . prot ank i . server . client . send Ċ import Ġjp . ass as ans . prot ank i . server . commands . Command Ċ import Ġjp . ass as ans . prot ank i . server . commands . CommandHandler Ċ import Ġjp . ass as ans . prot ank i . server . commands . CommandName Ċ import Ġjp . ass as ans . prot ank i . server . commands . IC ommand Handler Ċ Ċ class ĠBattle Supply Handler Ġ: ĠICommand Handler , ĠK oin Component Ġ{ ĊĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{ Ġ} ĊĊĠ Ġ@ CommandHandler ( CommandName . Activate Item ) ĊĠ Ġsuspend Ġfun Ġactivate Item ( socket : ĠUser Socket , Ġitem : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġuser Ġ= Ġsocket . user Ġ?: Ġthrow ĠException (" No ĠUser ") ĊĠĠĠ Ġval Ġplayer Ġ= Ġsocket . battle Player Ġ?: Ġthrow ĠException (" No ĠBattle Player ") ĊĠĠĠ Ġval Ġtank Ġ= Ġplayer . tank Ġ?: Ġthrow ĠException (" No ĠT ank ") ĊĊĠĠĠ Ġval Ġeffect Ġ= Ġwhen ( item ) Ġ{ ĊĠĠĠĠĠ Ġ" health " ĠĠĠĠĠĠĠ Ġ-> Ġnull ĊĠĠĠĠĠ Ġ" armor " ĠĠĠĠĠĠĠĠ Ġ-> ĠDouble Armor Effect ( tank ) ĊĠĠĠĠĠ Ġ" double _ damage " Ġ-> ĠDouble Damage Effect ( tank ) ĊĠĠĠĠĠ Ġ" n 2 o " ĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠN itro Effect ( tank ) ĊĠĠĠĠĠ Ġ" mine " ĠĠĠĠĠĠĠĠĠ Ġ-> ĠM ine Effect ( tank ) ĊĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġthrow ĠException (" Unknown Ġitem : Ġ$ item ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġeffect Ġ?: Ġreturn ĊĊĠĠĠ Ġ// ĠRemark : Ġoriginal Ġserver Ġsends Ġcommands Ġin Ġthe Ġfollowing Ġorder : ĊĠĠĠ Ġ// Ġ 1 . ĠT ank Effect Ġactions Ġ( e . g . ĠChange Tank Specification Ġfor ĠN itro Effect ) ĊĠĠĠ Ġ// Ġ 2 . ĠClient Activate Item ĊĠĠĠ Ġ// Ġ 3 . ĠEnable Effect ĊĠĠĠ Ġtank . effects . add ( effect ) ĊĠĠĠ Ġeffect . run () ĊĊĠĠĠ Ġvar Ġslot Block Time Ġ= Ġ 0 . milliseconds ĊĠĠĠ Ġif ( effect . duration Ġ!= Ġnull ) Ġslot Block Time Ġ+= Ġeffect . duration ĊĠĠĠ Ġif ( player . battle . properties [ Battle Property . Supp lies Cooldown Enabled ] Ġ&& Ġeffect . co old own Ġ!= Ġnull ) Ġslot Block Time Ġ+= Ġeffect . co old own ĊĊĠĠĠ ĠCommand ( ĊĠĠĠĠĠ ĠCommand Name . Client Activate Item , ĊĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġeffect . info . name , ĊĠĠĠĠĠĠĠ Ġslot Block Time . in Whole Milliseconds . toString (), ĊĠĠĠĠĠĠĠ Ġtrue . toString () Ġ// ĠDec rement Ġitem Ġcount Ġin ĠH UD Ġ( visual ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). send ( socket ) ĊĠ Ġ} ĊĊĠ Ġ@ CommandHandler ( CommandName . Try Activate Bonus ) ĊĠ Ġsuspend Ġfun Ġtry Activate Bonus ( socket : ĠUser Socket , Ġkey : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġuser Ġ= Ġsocket . user Ġ?: Ġthrow ĠException (" No ĠUser ") ĊĠĠĠ Ġval Ġplayer Ġ= Ġsocket . battle Player Ġ?: Ġthrow ĠException (" No ĠBattle Player ") ĊĠĠĠ Ġval Ġtank Ġ= Ġplayer . tank Ġ?: Ġthrow ĠException (" No ĠT ank ") ĊĠĠĠ Ġval Ġbattle Ġ= Ġplayer . battle ĊĊĠĠĠ Ġval Ġtype Ġ= Ġkey . substring Before Last ("_ ") ĊĠĠĠ Ġval Ġid Ġ= Ġkey . substring After Last ("_ "). toInt () ĊĊĠĠĠ Ġval Ġbonus Ġ= Ġbattle . bonus Processor . bon uses [ id ] ĊĠĠĠ Ġif ( bonus Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" Attempt Ġto Ġactivate Ġmissing Ġbonus : Ġ$ type @ $ id " Ġ} ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif ( bonus . type . bonus Key Ġ!= Ġtype ) Ġ{ ĊĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" Attempt Ġto Ġactivate Ġbonus Ġ($ id ) Ġwith Ġwrong Ġtype . ĠActual : Ġ${ bonus . type }, Ġreceived Ġ$ type " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbattle . bonus Processor . activate ( bonus , Ġtank ) ĊĠ Ġ} Ċ } Ċ