package Ġcre ep . actions Ċ Ċ import Ġannotations . Throws Exceptions Ċ import Ġexception . Construction Site NotFoundException Ċ import Ġexception . Invalid Id Exception Ċ import Ġlogger . log Message Ċ import Ġmemory . dynamic Deposit Structure Id Ċ import Ġmemory . dynamic Source Id Ċ import Ġmemory . dynamic Withdraw Structure Id Ċ import Ġscre eps . api .* Ċ import Ġscre eps . api . structures . Structure Ċ Ċ @ Throws Exceptions Ċ open Ġclass ĠEconom y Actions ( private Ġval Ġcre ep : ĠCre ep ) Ġ: ĠMemory Actions ( cre ep ) Ġ{ ĊĠĠĠ Ġfun Ġhar vest Target Source () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġget Source From Task () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . har vest ( source )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( source ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhar vest Source Dynamic () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cre ep . memory . dynamic Source Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . dynamic Source Id Ġ= Ġget Source By Task Room (). id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠGame . getObject ById < Source >( cre ep . memory . dynamic Source Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid Id Exception (" dynamic Deposit Structure Id Ġmapped Ġto Ġno Ġreal Ġstructure . ĠCre ep : Ġ${ cre ep . name }") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . har vest ( source )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( source ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupgrade Controller () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= Ġget Controller From Task () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . upgrade Controller ( controller )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( controller ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Structures ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstruction Site Ġ= Ġget Construction Site By Task Room () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . build ( construction Site )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( construction Site ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeposit Energy ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeposit Structure Ġ= Ġget Deposit Structure From Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deposit Structure . store . get Free Capacity () Ġ== Ġ 0 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . transfer ( deposit Structure , ĠRESOURCE _ ENER GY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( deposit Structure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ FULL Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeposit Energy Dynamic ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cre ep . memory . dynamic Deposit Structure Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . dynamic Deposit Structure Id Ġ= Ġget Deposit Structure By Task Room (). id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeposit Structure Ġ= ĠGame . getObject ById < Store Owner >( cre ep . memory . dynamic Deposit Structure Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid Id Exception (" dynamic Deposit Structure Id Ġmapped Ġto Ġno Ġreal Ġstructure . ĠCre ep : Ġ${ cre ep . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deposit Structure . store . get Free Capacity ( RESOURCE _ ENER GY ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . dynamic Deposit Structure Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . transfer ( deposit Structure , ĠRESOURCE _ ENER GY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( deposit Structure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ FULL Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOK Ġ-> Ġcre ep . memory . dynamic Deposit Structure Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeposit Energy Near by ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeposit Structure Ġ= Ġget Deposit Structure From Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . transfer ( deposit Structure , ĠRESOURCE _ ENER GY ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwithdraw Energy ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwithdraw Structure Ġ= Ġget Withdraw Structure From Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . withdraw ( withdraw Structure , ĠRESOURCE _ ENER GY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( withdraw Structure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ FULL Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwithdraw Energy Dynamic ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cre ep . memory . dynamic Withdraw Structure Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . dynamic Withdraw Structure Id Ġ= Ġget Withdraw Structure By Task Room (). id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwithdraw Structure Ġ= ĠGame . getObject ById < Store Owner >( cre ep . memory . dynamic Withdraw Structure Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠInvalid Id Exception (" dynamic Withdraw Structure Id Ġmapped Ġto Ġno Ġreal Ġstructure . ĠCre ep : Ġ${ cre ep . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( withdraw Structure . store . get Used Capacity ( RESOURCE _ ENER GY ) Ġ< Ġwithdraw Structure . store . get Capacity ( RESOURCE _ ENER GY ) !! / 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . dynamic Withdraw Structure Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . withdraw ( withdraw Structure , ĠRESOURCE _ ENER GY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ NOT _ IN _ RANGE Ġ-> Ġcre ep . moveTo ( withdraw Structure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERR _ FULL Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOK Ġ-> Ġcre ep . memory . dynamic Withdraw Structure Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwithdraw Energy Near by ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwithdraw Structure Ġ= Ġget Withdraw Structure From Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . withdraw ( withdraw Structure , ĠRESOURCE _ ENER GY ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwithdraw Energy Near Controller ( throw Exception : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwithdraw Structure Ġ= Ġget Withdraw Structure By Room Controller () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . withdraw ( withdraw Structure , ĠRESOURCE _ ENER GY ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw Exception ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }