public void lasercannonTarget(Skill laser, Hero hero, LivingEntity target) {

    if (damageCheck(hero.getPlayer(), target)) {
      Player dmger = hero.getPlayer();

      addSpellTarget(target, hero);

      int damage = SkillConfigManager.getUseSetting(hero, laser, SkillSetting.DAMAGE, 1, false);

      if (target.getFireTicks() > 0) {
        damage += 1;
      }

      boolean knockback = true;

      if (target instanceof Player && !(target.equals(dmger))) {
        Player p = (Player) target;
        damageEntity(p, dmger, damage, EntityDamageEvent.DamageCause.MAGIC, knockback);
      } else {
        damageEntity(target, dmger, damage, EntityDamageEvent.DamageCause.MAGIC, knockback);
      }
      targets.add(target.getEntityId());
    }
  }
  public void wave(Skill laser, Hero hero, Location nxt, int c, final Vector thrv) {
    nxt = nxt.add(thrv);
    // nxt.getWorld().playEffect(nxt, Effect.POTION_BREAK, 245);
    nxt.getWorld().playEffect(nxt, Effect.ENDER_SIGNAL, 50);
    c++;

    int distance =
        SkillConfigManager.getUseSetting(hero, laser, SkillSetting.MAX_DISTANCE, 30, false);
    if (c > distance) {
      return;
    }
    if (!Util.transparentBlocks.contains(nxt.getBlock().getType())) {
      return;
    }

    /*
    for(LivingEntity target:getNearbyLivingEntities(nxt,2)) {
        if(!targets.contains(target)) {
            lasercannonTarget(hero, target);
        }
    }*/

    // final Location fnxt = nxt;
    // final Hero fhero = hero;
    // final int fc = c;

    delex(this, nxt, c, hero);

    slowdamage(nxt, hero);

    wave(laser, hero, nxt, c, thrv);
    /*
    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(asd, new Runnable(){
        @Override public void run(){ wave(fhero,fnxt,fc,thrv); }},(long)(1));*/

  }
  @Override
  public String getDescription(Hero hero) {

    int damage =
        (SkillConfigManager.getUseSetting(hero, this, SkillSetting.DAMAGE.node(), 30, false));

    String description = getDescription().replace("$1", damage + "");

    // COOLDOWN
    int cooldown =
        (SkillConfigManager.getUseSetting(hero, this, SkillSetting.COOLDOWN.node(), 0, false)
                - SkillConfigManager.getUseSetting(
                        hero, this, SkillSetting.COOLDOWN_REDUCE.node(), 0, false)
                    * hero.getSkillLevel(this))
            / 1000;
    if (cooldown > 0) {
      description += " CD:" + cooldown + "s";
    }

    // MANA
    int mana =
        SkillConfigManager.getUseSetting(hero, this, SkillSetting.MANA.node(), 10, false)
            - (SkillConfigManager.getUseSetting(
                    hero, this, SkillSetting.MANA_REDUCE.node(), 0, false)
                * hero.getSkillLevel(this));
    if (mana > 0) {
      description += " M:" + mana;
    }

    // HEALTH_COST
    int healthCost =
        SkillConfigManager.getUseSetting(hero, this, SkillSetting.HEALTH_COST, 0, false)
            - (SkillConfigManager.getUseSetting(
                    hero, this, SkillSetting.HEALTH_COST_REDUCE, mana, true)
                * hero.getSkillLevel(this));
    if (healthCost > 0) {
      description += " HP:" + healthCost;
    }

    // STAMINA
    int staminaCost =
        SkillConfigManager.getUseSetting(hero, this, SkillSetting.STAMINA.node(), 0, false)
            - (SkillConfigManager.getUseSetting(
                    hero, this, SkillSetting.STAMINA_REDUCE.node(), 0, false)
                * hero.getSkillLevel(this));
    if (staminaCost > 0) {
      description += " FP:" + staminaCost;
    }

    // DELAY
    int delay =
        SkillConfigManager.getUseSetting(hero, this, SkillSetting.DELAY.node(), 0, false) / 1000;
    if (delay > 0) {
      description += " W:" + delay + "s";
    }

    // EXP
    int exp = SkillConfigManager.getUseSetting(hero, this, SkillSetting.EXP.node(), 0, false);
    if (exp > 0) {
      description += " XP:" + exp;
    }
    return description;
  }