package Ġme . sy ari . ss . item Ċ Ċ import Ġme . sy ari . ss . battle . damage . Damage Calculator Ċ import Ġme . sy ari . ss . battle . equipment . ElementType Ċ import Ġme . sy ari . ss . battle . status . Entity Status Ċ import Ġme . sy ari . ss . battle . status . On Damage Status Ċ import Ġme . sy ari . ss . battle . status . mob . Mob Status Ċ import Ġme . sy ari . ss . battle . status . player . Player Status . Companion . status Ċ import Ġme . sy ari . ss . core . auto . Event Ċ import Ġme . sy ari . ss . core . item . Custom ItemStack Ċ import Ġme . sy ari . ss . core . player . UUID Player Ċ import Ġme . sy ari . ss . core . scheduler . Create Scheduler . run Later Ċ import Ġme . sy ari . ss . item . Main . Companion . item Plugin Ċ import Ġme . sy ari . ss . item . item Register . custom . Clickable Item Ċ import Ġme . sy ari . ss . item . item Register . custom . Custom Item Ċ import Ġme . sy ari . ss . item . item Register . equip . weapon . indirect . B ow Item Ċ import Ġme . sy ari . ss . item . item Register . equip . weapon . me lee . Me lee Item Ċ import Ġorg . bukkit . entity . Arrow Ċ import Ġorg . bukkit . entity . Entity Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . EventHandler Ċ import Ġorg . bukkit . event . block . Action Ċ import Ġorg . bukkit . event . entity . Entity Damage By Entity Event Ċ import Ġorg . bukkit . event . entity . Entity Shoot B ow Event Ċ import Ġorg . bukkit . event . player . Player Interact Event Ċ import Ġorg . bukkit . metadata . Fixed Metadata Value Ċ Ċ object ĠEvent Listener : ĠEvent Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcancel Click Event Ġ= Ġmutable Set Of < Pair < UUID Player , ĠClick able Item . Cool Down Type >>() ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon ( e : ĠPlayer Interact Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġe . item ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCustom ItemStack . create ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcustom Item Ġ= ĠCustom Item . from ( item ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( custom Item Ġis ĠClick able Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġe . player ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclick Type Ġ= Ġwhen Ġ( e . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAction . LEFT _ CLICK _ AIR , ĠAction . LEFT _ CLICK _ BLOCK Ġ-> ĠClick able Item . Click Type . Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAction . RIGHT _ CLICK _ AIR , ĠAction . RIGHT _ CLICK _ BLOCK Ġ-> ĠClick able Item . Click Type . Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Player Ġ= ĠUUID Player ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcool Down Type Ġ= Ġcustom Item . cool Down Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Click Event Key Ġ= Ġuuid Player Ġto Ġcool Down Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel Click Event . contains ( cancel Click Event Key )) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġcustom Item . onClick ( player , Ġitem , Ġclick Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Click Event . add ( cancel Click Event Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Later ( item Plugin , Ġcustom Item . cool Down Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Click Event . remove ( cancel Click Event Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġarrow Sh ooter Status MetaData Key Ġ= Ġ" ss - item - arrow - sh ooter - status " ĊĠĠĠ Ġprivate Ġconst Ġval Ġarrow Force MetaData Key Ġ= Ġ" ss - item - arrow - force " ĊĊĠĠĠ Ġprivate Ġfun Ġset Projectile Status ( ĊĠĠĠĠĠĠĠ Ġproject ile : ĠEntity , ĊĠĠĠĠĠĠĠ Ġstatus : ĠOn Damage Status ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Value Ġ= ĠFixed Metadata Value ( item Plugin , Ġstatus ) ĊĠĠĠĠĠĠĠ Ġproject ile . set Metadata ( arrow Sh ooter Status MetaData Key , Ġmetadata Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon ( e : ĠEntity Shoot B ow Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġe . entity ĊĠĠĠĠĠĠĠ Ġval Ġentity Status Ġ= Ġif Ġ( entity Ġis ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . consume Arrow Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġe . bow ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom ItemStack . create ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb ow Item Ġ= ĠCustom Item . from ( item ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bow Item Ġ! is ĠB ow Item ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenhanced B ow Item Ġ= Ġb ow Item . get Enhanced ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenhanced B ow Item . get Attack Status ( entity ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMob Status . from ( entity ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġarrow Ġ= Ġe . project ile ĊĠĠĠĠĠĠĠ Ġset Projectile Status ( arrow , Ġentity Status ) ĊĠĠĠĠĠĠĠ Ġarrow . set Metadata ( arrow Force MetaData Key , ĠFixed Metadata Value ( item Plugin , Ġe . force )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventHandler ĊĠĠĠ Ġfun Ġon ( e : ĠEntity Damage By Entity Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattacker Ġ= Ġe . dam ager ĊĠĠĠĠĠĠĠ Ġval Ġv ictim Ġ= Ġe . entity ĊĠĠĠĠĠĠĠ Ġval Ġv ictim Status Ġ= ĠEntity Status . from ( v ictim ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġ( attack er Status , Ġdamage Rate ) Ġ= Ġwhen Ġ( attack er ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArrow Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attack er . sh ooter Ġ! is ĠPlayer ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus MetaData Value List Ġ= Ġattacker . getMetadata ( arrow Sh ooter Status MetaData Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus MetaData Value Ġ= Ġstatus MetaData Value List . first OrNull () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġstatus MetaData Value . value () Ġas ? ĠOn Damage Status Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforce Metadata Value List Ġ= Ġattacker . getMetadata ( arrow Force MetaData Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforce Ġ= Ġforce Metadata Value List . first OrNull ()?. as Float () Ġ?: Ġ 1 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġto Ġforce ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlayer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠCustom ItemStack . create ( attack er . inventory . item In Main Hand ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Item Ġ= ĠCustom Item . from ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( custom Item Ġis ĠMe lee Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenhanced Me lee Item Ġ= Ġcustom Item . get Enhanced ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenhanced Me lee Item . get Attack Status ( attack er ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattacker . status . on Damage ( ElementType . None ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġto Ġget Damage Rate ( attack er . attack Cooldown ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdamage Ġ= ĠDamage Calculator . get Damage ( attack er Status , Ġv ictim Status ) Ġ* Ġdamage Rate ĊĠĠĠĠĠĠĠ Ġe . damage Ġ= Ġdamage . toDouble () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Damage Rate ( attack Cool Down : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Damage Rate Ġ= Ġ 0 . 2 F ĊĠĠĠĠĠĠĠ Ġval Ġmax Damage Rate Ġ= Ġ 1 . 0 F ĊĠĠĠĠĠĠĠ Ġreturn Ġ(( max Damage Rate Ġ- Ġmin Damage Rate ) Ġ* Ġattack Cool Down ) Ġ+ Ġmin Damage Rate ĊĠĠĠ Ġ} Ċ }