package Ġcom . ma ze k ine . ever scale . minecraft . paper Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . ma ze k ine . ever scale . E VER Ċ import Ġcom . ma ze k ine . ever scale . minecraft . paper . Store . count All Ċ import Ġcom . ma ze k ine . ever scale . minecraft . paper . Store . is Store Item Ċ import Ġcom . ma ze k ine . ever scale . models . Account Type Ċ import Ġcom . ma ze k ine . libs . Ch a Ch a 2 0 Poly 1 3 0 5 Ċ import Ġcom . ma ze k ine . libs . Plugin Locale Ċ import Ġcom . ma ze k ine . libs . Plugin Secure Storage Ċ import Ġee . nx 0 1 . ton client . abi . KeyPair Ċ import Ġkotlinx . coroutines .* Ċ import Ġnet . ky ori . ad venture . text . Component Ċ import Ġnet . ky ori . ad venture . text . event . Click Event Ċ import Ġorg . bukkit . Bu kkit Ċ import Ġorg . bukkit . Chat Color Ċ import Ġorg . bukkit . command . Command Ċ import Ġorg . bukkit . command . Command Executor Ċ import Ġorg . bukkit . command . Command Sender Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . Round ingMode Ċ import Ġkotlin . random . Random Ċ Ċ /** Ċ Ġ* ĠSends Ġa Ġtransfer Ġto Ġanother Ġplayer Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠE Ġsend Ġcommand Ċ Ġ*/ Ċ class ĠE Send Command Ġ: ĠCommand Executor , ĠPlayer Send able () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwithdraw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Player Send able . Send Type . Send , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġe _ pk Ġcommand Ġto Ġoutput Ġcurrent Ġuser 's Ġprivate Ġkey Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠE Ġp Ġk Ġcommand Ċ Ġ*/ Ċ class ĠE PK Command Ġ: ĠCommand Executor , ĠI Com munic ative Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . missing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . wrong _ number ", ĠarrayOf ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġencrypted Pk Ġ= ĠPlugin Secure Storage . get PrivateKey ( player . unique Id . toString ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠIf Ġthe Ġplayer Ġhasn 't Ġcreated Ġa ĠPK Ġyet ĊĠĠĠĠĠĠĠ Ġif Ġ( encrypted Pk Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . not _ created ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh a Ch a 2 0 Poly 1 3 0 5 (). decrypt String With Password ( encrypted Pk , Ġargs [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . wrong ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" pk . display . 1 ", Ġprefix Ġ= Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . text ("${ Chat Color . GREEN }$ pk "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . Action . COPY _ TO _ CLIP BOARD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . append ( Component . text ("\ n ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" pk . display . 2 ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġe _ register Ġcommand Ġfor Ġcreating Ġa Ġnew Ġkey Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠE Ġregister Ġcommand Ċ Ġ*/ Ċ class ĠE Register Command Ġ: ĠCommand Executor , ĠI Com munic ative Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( args . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . missing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . repeat ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args [ 0 ] Ġ== Ġargs [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Secure Storage . set Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . unique Id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted PrivateKey Ġ= ĠPlugin Secure Storage . get PrivateKey ( player . unique Id . toString ()) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . pk . not _ saved ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= ĠCh a Ch a 2 0 Poly 1 3 0 5 (). decrypt String With Password ( encrypted PrivateKey , Ġargs [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= ĠPlugin Secure Storage . derive PublicKey ( privateKey ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . create Address ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Type . Safe Mult is ig , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . address . not _ saved ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Secure Storage . set Player Address ( player . unique Id . toString (), Ġaddress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠTODO : ĠĠ ĠCheck Ġthat Ġworks Ġafter Ġrefactoring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" account . status . success ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . text ("${ Chat Color . GREEN . as B ungee ()} $ address "). click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . Action . COPY _ TO _ CLIP BOARD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . no _ match ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . wrong _ number ", ĠarrayOf ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġe _ new _ password Ġcommand Ġfor Ġupdating Ġthe Ġwallet Ġpassword Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠE Ġnew Ġpassword Ġcommand Ċ Ġ*/ Ċ class ĠE New Password Command Ġ: ĠCommand Executor , ĠI Com munic ative Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( args . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . missing . old ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . missing . new ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . repeat . new ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Pk Ġ= ĠPlugin Secure Storage . get PrivateKey ( player . unique Id . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠIf Ġthe Ġplayer Ġhasn 't Ġcreated Ġa ĠPK Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( encrypted Pk Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . not _ created ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh a Ch a 2 0 Poly 1 3 0 5 (). decrypt String With Password ( encrypted Pk , Ġargs [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . wrong ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args [ 1 ] Ġ== Ġargs [ 2 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Secure Storage . update Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . unique Id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Success ( player , Ġ" password . status . success . new ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . no _ match ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . wrong _ number ", ĠarrayOf ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġe _ balance Ġcommand Ġto Ġreturn Ġplayer 's Ġbalance Ġin ĠE VER Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠE Ġbalance Ġcommand Ċ Ġ*/ Ċ class ĠE Balance Command Ġ: ĠCommand Executor , ĠI Com munic ative Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Plugin Secure Storage . get PrivateKey ( player . unique Id . toString ()) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . not _ created ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= ĠPlugin Secure Storage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Address By Player Id ( player . unique Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . no _ address ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( args . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Balance Nano Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . getAddress ( address )?. balance ?. to BigDecimal OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . balance . un available ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Balance Ġ= Ġ( player Balance Nano . set Scale ( 4 , ĠRound ingMode . HALF _ DOWN ) Ġ/ ĠBigDecimal ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. strip Trailing Z eros () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Plain String () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , Ġ" account . balance ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Balance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . currency Name . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . wrong _ count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġe _ withdraw Ġcommand Ġto Ġsend ĠE VER s Ġto Ġan Ġexternal Ġaddress Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠE Ġwithdraw Ġcommand Ċ Ġ*/ Ċ class ĠE Withdraw Command Ġ: ĠCommand Executor , ĠPlayer Send able () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . prefix Error Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġwithdraw ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI Player Send able . Send Type . Withdraw , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠE Address Command Ġ: ĠCommand Executor , ĠI Com munic ative Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġval Ġencrypted PrivateKey Ġ= ĠPlugin Secure Storage . get PrivateKey ( player . unique Id . toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( encrypted PrivateKey Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . not _ created ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġaddress Ġ= ĠPlugin Secure Storage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getPlayer Address ( player . unique Id . toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( address Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . no _ address ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= ĠCh a Ch a 2 0 Poly 1 3 0 5 (). decrypt String With Password ( encrypted PrivateKey , Ġargs [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= ĠPlugin Secure Storage . derive PublicKey ( privateKey ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . create Address ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Type . Safe Mult is ig , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . account . address . not _ saved ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠPlugin Secure Storage . set Player Address ( player . unique Id . toString (), Ġaddress ) ĊĊĠĠĠĠĠĠĠ Ġ_ on Update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" account . address ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . text ("${ Chat Color . GREEN . as B ungee ()} $ address ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . Action . COPY _ TO _ CLIP BOARD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠE UserData Command Ġ: ĠCommand Executor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġis ĠPlayer ) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġprintln ( Gson (). toJson ( Plugin Secure Storage . getAll Players Data ())) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠE Version Command Ġ: ĠCommand Executor , ĠI Com munic ative Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( sender : ĠCommand Sender , Ġcommand : ĠCommand , Ġlabel : ĠString , Ġargs : ĠArray < out ĠString >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĠĠĠĠĠĠĠ Ġ_ on Update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" version ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBu kkit . get PluginManager () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Plugin (" E ver Craft ") ?. description ?. version Ġ?: Ġ" 0 . 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠE Store Command Ġ: ĠCommand Executor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ ĠStore . open ( player ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠE Coupon Command Ġ: ĠCommand Executor , ĠPlayer Send able () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġsender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Store . store Wallet Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . store . not _ configured ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOnly Ġplayers Ġcan Ġuse Ġthis Ġcommand ĊĠĠĠĠĠĠĠ Ġif Ġ( sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . access . player _ only ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġsender ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠIf Ġno Ġargs Ġspecified , Ġjust Ġoutput Ġthe Ġcoupon Ġprice ĊĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , Ġ" store . coupon . price ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Store . coupon Price , ĠPlugin Locale . currency Name Ġ?: Ġ" E VER ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsub command Ġ= Ġargs [ 0 ]. lowercase () ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġif Ġ( args . size Ġ> Ġ 1 ) Ġargs [ 1 ]. toInt OrNull () Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġif Ġ( args . size Ġ> Ġ 2 ) Ġargs [ 2 ] Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠIf Ġsub command Ġis Ġunknown , Ġoutput Ġerror ĊĠĠĠĠĠĠĠ Ġif Ġ( sub command Ġ!= Ġ" price " Ġ&& Ġsub command Ġ!= Ġ" buy ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . unknown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠIf Ġamount Ġis Ġspecified , Ġit Ġmust Ġbe Ġpositive ĊĠĠĠĠĠĠĠ Ġamount ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . amount . not _ positive ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Amount : Ġ$ amount ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠOutput Ġcoupon ( s ) Ġprice ĊĠĠĠĠĠĠĠ Ġif Ġ( sub command Ġ== Ġ" price ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( amount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠĠĠĠ Ġ// Ġ ĠA Ġsingle Ġcoupon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , Ġ" store . coupon . price ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStore . coupon Price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . currency Name Ġ?: Ġ" E VER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠĠĠĠ Ġ// Ġ ĠMultiple Ġcoup ons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , Ġ" store . coupon . price . multiple ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount . to BigDecimal () Ġ* ĠStore . coupon Price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . currency Name Ġ?: Ġ" E VER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sub command Ġ== Ġ" buy ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠAmount Ġmust Ġexist Ġand Ġbe Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġif Ġ( args . size Ġ== Ġ 1 ) Ġ" error . args . amount . abs ent " Ġelse Ġ" error . args . amount . not _ numeric ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠPassword Ġmust Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( password Ġ== Ġnull Ġ&& Ġ! Store . coupon Price . equals ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( player , Ġ" error . args . password . missing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠonSuccess : Ġ( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit Ġ= Ġ{ Ġp , Ġm , Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Quantity Ġ= Ġit . inventory . count All Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack ?. is Store Item ( Store . Buttons . CO UP ON ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġremaining Quantity Ġ= Ġamount Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m Ġ!= Ġnull ) Ġ_ on Fail ( p , Ġm , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . store . purchase _ error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠTry Ġto Ġfind Ġexisting Ġstack Ġof Ġcoup ons Ġto Ġadd Ġto Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġdelivery @{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . inventory . forEach Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack ?. is Store Item ( Store . Buttons . CO UP ON ) Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . amount Ġ< Ġstack . max Stack Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailable Slot Ġ= Ġstack . max Stack Size Ġ- Ġstack . amount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( available Slot Ġ< Ġremaining Quantity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Quantity Ġ-= Ġavailable Slot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . amount Ġ+= Ġavailable Slot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . amount Ġ+= Ġremaining Quantity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Quantity Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ delivery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠCreate Ġa Ġnew Ġstack Ġotherwise ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( remaining Quantity Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . inventory . addItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStore . coupon . as Quantity ( remaining Quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Ġ!= Ġnull ) Ġ_ on Success ( it , Ġm , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" store . coupon . purchase d ", ĠarrayOf ( amount ), Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Ghost Ġpurchase Ġin Ġthe Ġstore : Ġcannot Ġidentify Ġpurch aser ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġon Fail : Ġ( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit Ġ= Ġ{ Ġp , Ġm , Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m Ġ!= Ġnull ) Ġ_ on Fail ( p , Ġm , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Error (" error . store . purchase _ error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( Store . coupon Price Ġ== ĠBigDecimal ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess ( player , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwithdraw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Player Send able . Send Type . Withdraw , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStore . store Wallet !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( amount !!. to BigDecimal () Ġ* ĠStore . coupon Price ). to Plain String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= ĠonSuccess , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Fail Ġ= Ġon Fail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Store Tx Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġthe Ġopportunity Ġto Ġwithdraw Ġfunds Ġfrom Ġa Ġuser 's Ġwallet Ġto Ġthe Ġspecific Ġcommand Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠI Player Send able Ċ Ġ*/ Ċ interface ĠI Player Send able Ġ: ĠI Com munic ative Ġ{ ĊĠĠĠ Ġfun Ġwithdraw ( ĊĠĠĠĠĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠĠĠĠĠ Ġcommand : ĠSend Type , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? Ġ= Ġ:: _ on Success , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? Ġ= Ġ:: _ on Fail , ĊĠĠĠĠĠĠĠ ĠonUpdate : Ġ(( Player ?, ĠComponent ?) Ġ-> ĠUnit )? Ġ= Ġ:: _ on Update , ĊĠĠĠĠĠĠĠ Ġis Store Tx : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠ Ġsuspend Ġfun Ġwithdraw ( ĊĠĠĠĠĠĠĠ Ġaddress From : ĠString , ĊĠĠĠĠĠĠĠ Ġaddress To : ĠString , ĊĠĠĠĠĠĠĠ Ġamount : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġfrom : ĠPlayer , ĊĠĠĠĠĠĠĠ Ġto : ĠPlayer ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? Ġ= Ġ:: _ on Success , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? Ġ= Ġ:: _ on Fail , ĊĠĠĠĠĠĠĠ ĠonUpdate : Ġ(( Player ?, ĠComponent ?) Ġ-> ĠUnit )? Ġ= Ġ:: _ on Update , ĊĠĠĠĠĠĠĠ Ġis Store Tx : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠ Ġenum Ġclass ĠSend Type Ġ{ ĠSend , ĠWith draw Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIntro duces Ġthe Ġuser Ġfeedback Ġcommunication Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠI Com munic ative Ċ Ġ*/ Ċ interface ĠI Com munic ative Ġ{ ĊĠĠĠ Ġfun Ġ_ on Success ( player : ĠPlayer ? Ġ= Ġnull , Ġmessage : ĠString ? Ġ= Ġnull , Ġargs : ĠArray < out ĠAny >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ?. let Ġ{ Ġm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . is Online ) Ġp . sendMessage ( Plugin Locale . get Localized Message ( m , Ġargs , Ġprefix Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ_ on Update ( player : ĠPlayer ? Ġ= Ġnull , Ġmessage : ĠComponent ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ?. let Ġ{ Ġm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . is Online ) Ġp . sendMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ_ on Fail ( player : ĠPlayer ? Ġ= Ġnull , Ġmessage : ĠString ? Ġ= Ġnull , Ġargs : ĠArray < out ĠAny >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ?. let Ġ{ Ġm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . is Online ) Ġp . sendMessage ( Plugin Locale . get Localized Error ( m , Ġargs , Ġprefix Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements ĠI Player Send able Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠPlayer Send able Ċ Ġ*/ Ċ open Ġclass ĠPlayer Send able Ġ: ĠI Player Send able Ġ{ ĊĠĠĠ Ġprotected Ġval Ġlogger Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( this :: class . java ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUniversal Ġwithdraw / send Ġmethod ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplayer ĠĠĠ ĠSender ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand ĠĠ ĠSend Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġargs ĠĠĠĠĠ ĠCommand Ġinputs ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġall Ġwent Ġsmooth ly , ĠFalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġwithdraw ( ĊĠĠĠĠĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠĠĠĠĠ Ġcommand : ĠI Player Send able . Send Type , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ ĠonUpdate : Ġ(( Player ?, ĠComponent ?) Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġis Store Tx : ĠBoolean ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠFirst Ġcheck Ġif Ġthe Ġsender Ġhas Ġthe Ġaddress Ġcreated ĊĠĠĠĠĠĠĠ Ġval Ġaddress From : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Secure Storage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Address By Player Id ( player . unique Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( player , Ġ" error . account . no _ address ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġarguments Ġquantity ĊĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( player , Ġ" error . args . amount . abs ent ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( player , Ġ" error . args . password . missing ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty () Ġ|| Ġargs . size Ġ> Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( player , Ġ" error . args . wrong _ number ", ĠarrayOf ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġreceiver : ĠPlayer ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġaddress To Ġ= Ġwhen Ġ( command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI Player Send able . Send Type . Withdraw Ġ-> Ġargs [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI Player Send able . Send Type . Send Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġif Ġplayer Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= ĠBu kkit . getPlayer Exact ( args [ 0 ]) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( player , Ġ" error . args . player . abs ent ", ĠarrayOf ( args [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġif Ġthe Ġreceiver Ġhas Ġcreated Ġan Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Secure Storage . find Address By Player Id ( receiver . unique Id . toString ()) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( player , Ġ" error . transfer . receiver . not _ registered ", ĠarrayOf ( args [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġargs [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġargs [ 2 ] ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwithdraw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress To , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Fail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Store Tx Ġ= Ġis Store Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġwithdraw ( ĊĠĠĠĠĠĠĠ Ġaddress From : ĠString , ĊĠĠĠĠĠĠĠ Ġaddress To : ĠString , ĊĠĠĠĠĠĠĠ Ġamount : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġfrom : ĠPlayer , ĊĠĠĠĠĠĠĠ Ġto : ĠPlayer ?, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ(( Player ?, ĠString ?, ĠArray < out ĠAny > ?) Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ ĠonUpdate : Ġ(( Player ?, ĠComponent ?) Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġis Store Tx : ĠBoolean ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġthat Ġaddresses Ġdon 't Ġmatch ĊĠĠĠĠĠĠĠ Ġif Ġ( address From Ġ== Ġaddress To ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . transfer . receiver . self ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġif Ġsender 's Ġaddress Ġis Ġcorrect ĊĠĠĠĠĠĠĠ Ġval Ġaddress From Correct Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĠE VER . check Address ( address From ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( address From Correct Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . account . address . invalid ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġif Ġreceiver 's Ġaddress Ġis Ġcorrect ĊĠĠĠĠĠĠĠ Ġval Ġaddress To Correct Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĠE VER . check Address ( address To ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( address To Correct Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . args . address . invalid ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠValidate Ġthe Ġamount ĊĠĠĠĠĠĠĠ Ġval Ġamount BD Ġ= Ġamount . to BigDecimal OrNull () Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . args . amount . not _ numeric ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( amount BD Ġ<= ĠBigDecimal ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . args . amount . not _ positive ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġthe Ġamount Ġis Ġsufficient ĊĠĠĠĠĠĠĠ Ġval Ġfrom Balance Nano Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . getAddress ( address From ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . balance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to BigDecimal OrNull () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . account . balance . un available ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Balance Ġ= Ġfrom Balance Nano . set Scale ( 4 , ĠRound ingMode . HALF _ DOWN ) Ġ/ ĠBigDecimal ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( amount BD Ġ> Ġfrom Balance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" error . account . balance . ins ufficient ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . currency Name Ġ?: Ġ" E VER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġthat Ġprivate Ġkey Ġexists Ġand Ġaccessible ĊĠĠĠĠĠĠĠ Ġval Ġencrypted PrivateKey Ġ= ĠPlugin Secure Storage . get PrivateKey ( from . unique Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . account . not _ created ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠonUpdate ?. let Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( from , ĠPlugin Locale . get Localized Message (" transfer . status . unpack ing _ keys ", Ġprefix Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh a Ch a 2 0 Poly 1 3 0 5 (). decrypt String With Password ( encrypted PrivateKey , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . args . password . wrong ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= ĠPlugin Secure Storage . derive PublicKey ( privateKey ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" fun . cre atures "). split (',' ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠPlugin Locale . get Localized Message (" transfer . status . pre paring ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPlugin Locale . get Localized Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" transfer . status . pre paring . cre atures ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( it [ Random . nextInt ( 0 , Ġit . last Index Ġ+ Ġ 1 )]. trim ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" transfer . status . pre paring ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠonUpdate ?. let Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( from , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCreating Ġtransaction Ġon Ġmultis ig ĊĠĠĠĠĠĠĠ Ġval Ġtx Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Fail M sig : Ġ(( E VER . Transaction Fail Reason ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġreason Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( errorMessage , Ġargs ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( reason ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . E VER _ API _ NOT _ CONFIGURE D Ġ-> ĠPair (" error . ton api . not _ configured ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . OTHER _ API _ ERROR Ġ-> ĠPair (" error . ton api . other ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . IN SUFF IC IENT _ BAL ANCE Ġ-> ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" error . account . not _ deployed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < Any >( Plugin Locale . currency Name Ġ?: Ġ" Ã Ĭ VER ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . TX _ VALUE _ EMPTY Ġ-> ĠPair (" error . args . amount . not _ numeric ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . TX _ VALUE _ NOT _ POSITIVE Ġ-> ĠPair (" error . args . amount . not _ positive ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . TX _ ABORT ED Ġ-> ĠPair (" transfer . status . error ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . TOO _ MAN Y _ UN FINISHED _ TX S Ġ-> ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" error . transfer . tx . too _ many _ un finished ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . Transaction Fail Reason . OTHER Ġ-> ĠPair (" error . transfer . tx . un init ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , ĠerrorMessage , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . create Transaction To Sign On Mult is ig ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Address Ġ= Ġaddress From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Address Ġ= Ġaddress To , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ( amount BD Ġ* ĠBigDecimal ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 )). set Scale ( 0 , ĠRound ingMode . HALF _ DOWN ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Fail Ġ= Ġon Fail M sig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġ_ on Fail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( ms ig Tx Id , Ġtx Id , Ġ_, Ġ_) Ġ= Ġtx ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġthat Ġtransaction Ġhas Ġcreated ĊĠĠĠĠĠĠĠ Ġif Ġ( ms ig Tx Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . transfer . tx . un init ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠonUpdate ?. let Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( from , ĠPlugin Locale . get Localized Message (" transfer . status . signing ", Ġprefix Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠCheck Ġthat Ġsigning Ġhas Ġpassed Ġsuccessfully ĊĠĠĠĠĠĠĠ Ġval Ġwithdraw al Result Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . confirm Safe Mult is ig Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm sig Tx Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Pair ( publicKey , ĠprivateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( withdraw al Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Message Ġ= ĠPlugin Locale . get Localized Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" transfer . status . success ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . currency Name Ġ?: Ġ" E VER ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is Store Tx ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . get Localized Message (" store . name ", Ġcolored Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ?. name Ġ?: Ġaddress To . mask ( is Address Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Message Ġ= ĠPlugin Locale . get Localized Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" transfer . incoming ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Locale . currency Name . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠGet Ġtransaction Ġhash , Ġif Ġany ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VER . getTransaction ( tx Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . transaction Hash ?. let Ġ{ Ġhash Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Hash Ġ= ĠPlugin Locale . get Localized Message (" transfer . tx _ hash ", Ġprefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( Component . text (" Ġ${ Chat Color . GREEN } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( Component . text ( hash . mask ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . click Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Event . Action . COPY _ TO _ CLIP BOARD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Message . append ( tx Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Message . append ( tx Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate ?. let Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠDefault Ġsuccess Ġupdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( from , Ġfrom Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( it , Ġto Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess ?. let Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠCustom Ġsuccess Ġupdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ( from , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Fail Ġ!= Ġnull ) Ġon Fail ( from , Ġ" error . unknown ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . mask ( leave : ĠInt Ġ= Ġ 6 , Ġdelimiter : ĠString Ġ= Ġ"... ", Ġis Address : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠString Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġvar Ġprefix : ĠString Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . split (': '). let Ġ{ Ġchunks Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chunks . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= Ġchunks [ 0 ] Ġ+ Ġ":" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġthis . drop ( prefix . length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . length Ġ<= Ġleave Ġ* Ġ 2 ) Ġreturn Ġ( prefix Ġ+ Ġresult ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprefix Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . substring ( 0 , Ġleave ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelimiter Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . substring ( result . length Ġ- Ġleave , Ġresult . length ) ĊĠĠĠ Ġ} Ċ }