package Ġcom . exp an se mc . b ending . classic . ability . air Ċ Ċ import Ġcom . exp an se mc . b ending . api . ability . Ability Context Ċ import Ġcom . exp an se mc . b ending . api . ability . Ability Context Keys Ċ import Ġcom . exp an se mc . b ending . api . ability . Ability Execution Type Ċ import Ġcom . exp an se mc . b ending . api . ability . Ability Execution Types . LEFT _ CLICK Ċ import Ġcom . exp an se mc . b ending . api . ability . Ability Execution Types . S NE AK Ċ import Ġcom . exp an se mc . b ending . api . ability . Ability Type Ċ import Ġcom . exp an se mc . b ending . api . ability . coroutine . Coroutine Ability Ċ import Ġcom . exp an se mc . b ending . api . ability . coroutine . Coroutine Task Ċ import Ġcom . exp an se mc . b ending . api . b ender . B ender Ċ import Ġcom . exp an se mc . b ending . api . protection . Block Protection Service Ċ import Ġcom . exp an se mc . b ending . api . ray . Air Ray cast Ċ import Ġcom . exp an se mc . b ending . api . ray . Fast Ray cast Ċ import Ġcom . exp an se mc . b ending . api . util . getTarget Location Ċ import Ġcom . exp an se mc . b ending . api . util . is Liquid Ċ import Ġcom . exp an se mc . b ending . api . util . is St ale Ċ import Ġcom . exp an se mc . b ending . api . util . spawn Particle Ċ import Ġcom . exp an se mc . b ending . classic . B ending Classic Ċ import Ġcom . exp an se mc . b ending . classic . ability . Classic Ability Types Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Transient Ċ import Ġorg . bukkit . Location Ċ import Ġorg . bukkit . Particle Ċ import Ġorg . bukkit . Sound Ċ import Ġorg . bukkit . entity . Entity Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . plugin . Plugin Ċ import Ġorg . bukkit . util . Vector Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġkotlin . random . Random Ċ Ċ @ Serializable Ċ data Ġclass ĠAir B last Ability ( ĊĠĠĠ Ġoverride Ġval Ġcool down : ĠLong , ĊĠĠĠ Ġval Ġdamage : ĠDouble , ĊĠĠĠ Ġval Ġkn ock back Other : ĠDouble , ĊĠĠĠ Ġval Ġkn ock back Self : ĠDouble , ĊĠĠĠ Ġval Ġradius : ĠDouble , ĊĠĠĠ Ġval Ġrange : ĠDouble , ĊĠĠĠ Ġval Ġselect Range : ĠDouble , ĊĠĠĠ Ġval Ġspeed : ĠDouble , ĊĠĠĠ Ġval Ġnum Particles : ĠInt , ĊĠĠĠ Ġval Ġcan Cool L ava : ĠBoolean , ĊĠĠĠ Ġval Ġcan Open Do ors : ĠBoolean , ĊĠĠĠ Ġval Ġcan F lick Le vers : ĠBoolean Ċ ) Ġ: ĠCor outine Ability Ġ{ ĊĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġprivate Ġval Ġselect Range Squared : ĠDouble Ġ= Ġthis . select Range Ġ* Ġthis . select Range ĊĊĠĠĠ Ġoverride Ġval Ġtype : ĠAbility Type Ġget () Ġ= ĠClass ic Ability Types . AIR _ BL AST ĊĊĠĠĠ Ġoverride Ġval Ġplugin : ĠPlugin Ġget () Ġ= ĠB ending Classic . PLUGIN ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠCor outine Task . activate ( context : ĠAbility Context , Ġexecution Type : ĠAbility Execution Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġcontext . require ( Ability Context Keys . PLAYER ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( execution Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS NE AK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb ender : ĠB ender Ġ= Ġcontext . require ( Ability Context Keys . B ENDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . s ne ak ( player . getTarget Location ( this @ Air B last Ability . select Range ), Ġb ender , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT _ CLICK Ġ-> Ġthis . left Click ( player . eye Location , Ġplayer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠCor outine Task . s ne ak ( origin : ĠLocation , Ġb ender : ĠB ender , Ġplayer : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefer : ĠCompletableFuture < Void ?> Ġ= Ġb ender . waitFor Execution ( this @ Air B last Ability . type , ĠLEFT _ CLICK ) ĊĠĠĠĠĠĠĠ Ġability Loop Unsafe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . is St ale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlayer Ġobject Ġwent Ġstale . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefer . cancel ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( origin . distance Squared ( player . eye Location ) Ġ> Ġselect Range Squared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠW ent Ġbeyond Ġb last Ġrange . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefer . cancel ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin . spawn Particle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParticle . CLOUD , Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . random (), ĠMath . random (), ĠMath . random (), Ġ 0 . 0 , Ġnull , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( defer . is Done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġplayer Ġleft Ġclicked . ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( defer . is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlready Ġstopped Ġwaiting Ġfor Ġthem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . left Click ( origin , Ġplayer , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠCor outine Task . left Click ( origin : ĠLocation , Ġplayer : ĠPlayer , Ġcan Push Self : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player . eye Location . block . type . is Liquid ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġaffected Locations Ġ= ĠHashSet < Location >() ĊĠĠĠĠĠĠĠ Ġval Ġaffected Entities Ġ= ĠHashSet < Entity >() ĊĠĠĠĠĠĠĠ Ġval Ġdirection : ĠVector Ġ= Ġplayer . location . direction . normalize () ĊĊĠĠĠĠĠĠĠ Ġval Ġray cast Ġ= ĠFast Ray cast ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġorigin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġdirection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrange Ġ= Ġthis @ Air B last Ability . range , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġthis @ Air B last Ability . speed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Di agon als Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġability Loop Unsafe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . is St ale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd Ġif Ġthe Ġplayer Ġobject Ġis Ġstale . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġcollision Ġchecking ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncrement Ġray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsucceeded : ĠBoolean Ġ= Ġray cast . progress Ġ{ Ġcurrent : ĠLocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Block Protection Service . instance . is Protected ( player , Ġcurrent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCan 't Ġb end Ġhere ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ progress Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaffect Locations ( player , Ġaffected Locations , Ġthis @ Air B last Ability . radius ) Ġ{ Ġtest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAir Ray cast . ext ingu ish Fl ames ( test ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġcan Cool L ava ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( this @ Air B last Ability . can Open Do ors Ġ&& ĠAir Ray cast . toggle Door ( test )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( this @ Air B last Ability . can F lick Le vers Ġ&& ĠAir Ray cast . toggle Le ver ( test )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaffect Entities ( player , Ġaffected Entities , Ġthis @ Air B last Ability . radius ) Ġ{ Ġtest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpush Entity Ġreturn Ġvalue Ġignored Ġbecause Ġwe Ġwant Ġto Ġpush Ġentities Ġmultiple Ġtimes . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAir Ray cast . push Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġplayer , Ġtest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Push Self , Ġthis @ Air B last Ability . kn ock back Self , Ġthis @ Air B last Ability . kn ock back Other ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdamage Entity ( test , Ġthis @ Air B last Ability . damage , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspawn Particle ( Particle . CLOUD , Ġthis @ Air B last Ability . num Particles , Ġ 0 . 2 7 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Random . nextInt ( 4 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Sound ( Sound . ENTITY _ CRE E PER _ H UR T , Ġ 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current . block . type . is Solid Ġ|| Ġcurrent . block . type . is Liquid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ progress Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ progress Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd Ġthe Ġability Ġif Ġthe Ġray Ġcouldn 't Ġadvance . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! succeeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }