package Ġcom . exp an se mc . b ending . classic . ability . air Ċ Ċ import Ġcom . exp an se mc . b ending . api . ability .* Ċ 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 . 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 . ray . progress All Ċ import Ġcom . exp an se mc . b ending . api . util .* Ċ 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 Ġorg . spongepowered . math . matrix . Matrix 3 d Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . random . Random Ċ Ċ @ Serializable Ċ data Ġclass ĠAir Swipe Ability ( ĊĠĠĠ Ġoverride Ġval Ġcool down : ĠLong , ĊĠĠĠ Ġval Ġcharge Time : ĠLong , ĊĠĠĠ Ġval Ġmax Charge Factor : ĠDouble , ĊĠĠĠ Ġval Ġarc Degrees : ĠInt , ĊĠĠĠ Ġval Ġarc Increment Degrees : ĠInt , ĊĠĠĠ Ġval Ġdamage : ĠDouble , ĊĠĠĠ Ġval Ġkn ock back : ĠDouble , ĊĠĠĠ Ġval Ġradius : ĠDouble , ĊĠĠĠ Ġval Ġrange : ĠDouble , ĊĠĠĠ Ġval Ġspeed : ĠDouble , ĊĠĠĠ Ġval Ġnum Particles : ĠInt , ĊĠĠĠ Ġval Ġcollision Priority : ĠInt Ċ ) Ġ: ĠCor outine Ability Ġ{ ĊĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġprivate Ġval Ġarc Mat rices : ĠArray < Matrix 3 d > Ġ= Ġthis . create Arc Mat rices (). to Typed Array () ĊĊĠĠĠ Ġoverride Ġval Ġtype : ĠAbility Type Ġget () Ġ= ĠClass ic Ability Types . AIR _ SW I PE ĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( execution Type Ġ== ĠAbility Execution Types . LEFT _ CLICK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . swipe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġplayer . eye Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdamage Ġ= Ġthis @ Air Swipe Ability . damage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkn ock back Ġ= Ġthis @ Air Swipe Ability . kn ock back ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġchar ged Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval ĠstartTime : ĠEpoch Time Ġ= ĠEpoch Time . now () ĊĠĠĠĠĠĠĠ Ġability Loop Unsafe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . is St ale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlayer Ġobject Ġwent Ġstale . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed : ĠLong Ġ= ĠstartTime . elapsed Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elapsed Ġ>= Ġcharge Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar ged Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! player . is S ne aking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactor : ĠDouble Ġ= Ġif Ġ( char ged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . eye Location . play Sound ( Sound . BLOCK _ S NOW _ STEP , Ġ 1 . 0 f , Ġ 2 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Charge Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Charge Factor Ġ* Ġ( elapsed Ġ/ Ġcharge Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . swipe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġplayer . eye Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdamage Ġ= Ġthis @ Air Swipe Ability . damage Ġ* Ġfactor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkn ock back Ġ= Ġthis @ Air Swipe Ability . kn ock back Ġ* Ġfactor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char ged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . eye Location . spawn Particle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParticle . CLOUD , Ġthis @ Air Swipe Ability . num Particles , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 2 , Ġ 0 . 2 , Ġ 0 . 2 , Ġ 0 . 0 , Ġnull , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠCor outine Task . swipe ( source : ĠPlayer , Ġorigin : ĠLocation , Ġdamage : ĠDouble , Ġkn ock back : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġray casts : ĠArray < Fast Ray cast > Ġ= Ġcreate Ray casts ( origin , Ġsource . eye Location . direction . normalize ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġaffected Entities Ġ= ĠHashSet < Entity >() ĊĠĠĠĠĠĠĠ Ġability Loop Unsafe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source . is St ale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd Ġif Ġthe Ġplayer Ġobject Ġis Ġstale . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġcollision Ġchecking ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġany Succeeded : ĠBoolean Ġ= Ġray casts . progress All Ġ{ Ġcurrent : ĠLocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Block Protection Service . instance . is Protected ( source , Ġcurrent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCan 't Ġb end Ġhere ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ progress All Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaffect Entities ( source , Ġaffected Entities , Ġthis @ Air Swipe Ability . radius ) Ġ{ Ġtest : ĠEntity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAir Ray cast . push Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġsource , Ġtest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , Ġ 0 . 0 , Ġkn ock back ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdamage Entity ( test , Ġdamage , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspawn Particle ( Particle . CLOUD , Ġthis @ Air Swipe Ability . num Particles , Ġ 0 . 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Random . nextInt ( 4 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Sound ( Sound . ENTITY _ CRE E PER _ H UR T , Ġ 0 . 5 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ progress All Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! any Succeeded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġwhen Ġno Ġmore Ġr ays Ġare Ġadv ancing . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Ray casts ( origin : ĠLocation , Ġdirection : ĠVector ): ĠArray < Fast Ray cast > Ġ= ĊĠĠĠĠĠĠĠ Ġthis . arc Mat rices . map ToArray Ġ{ Ġmatrix : ĠMatrix 3 d Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFast Ray cast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġorigin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġdirection . clone (). transform ( matrix ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange Ġ= Ġthis . range , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġthis . speed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Di agon als Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Arc Mat rices (): ĠList < Matrix 3 d > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrices Ġ= ĠArrayList < Matrix 3 d >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( angle : ĠInt Ġin Ġ- arc Degrees .. arc Degrees Ġstep Ġarc Increment Degrees ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Rad : ĠDouble Ġ= ĠMath . to Radians ( angle . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsin Angle : ĠDouble Ġ= Ġsin ( angle Rad ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcos Angle : ĠDouble Ġ= Ġcos ( angle Rad ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrices Ġ+= ĠMatrix 3 d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcos Angle , Ġ 0 . 0 , Ġ- sin Angle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , Ġ 1 . 0 , Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsin Angle , Ġ 0 . 0 , Ġcos Angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatrices ĊĠĠĠ Ġ} Ċ }