Exemplo n.º 1
0
  private void throwIce() {
    if (!prepared) return;
    LivingEntity target =
        (LivingEntity) GeneralMethods.getTargetedEntity(player, range, new ArrayList<Entity>());
    if (target == null) {
      destination =
          GeneralMethods.getTargetedLocation(player, range, EarthMethods.transparentToEarthbending);
    } else {
      destination = target.getEyeLocation();
    }

    location = sourceblock.getLocation();
    if (destination.distance(location) < 1) return;
    firstdestination = location.clone();
    if (destination.getY() - location.getY() > 2) {
      firstdestination.setY(destination.getY() - 1);
    } else {
      firstdestination.add(0, 2, 0);
    }
    destination = GeneralMethods.getPointOnLine(firstdestination, destination, range);
    progressing = true;
    settingup = true;
    prepared = false;

    new TempBlock(sourceblock, Material.AIR, (byte) 0);

    source = new TempBlock(sourceblock, Material.PACKED_ICE, data);
  }
 private static Location getTargetLocation(Player player) {
   Entity target = GeneralMethods.getTargetedEntity(player, RANGE, new ArrayList<Entity>());
   Location location;
   if (target == null) {
     location = GeneralMethods.getTargetedLocation(player, RANGE);
   } else {
     location = ((LivingEntity) target).getEyeLocation();
   }
   return location;
 }
Exemplo n.º 3
0
  public QuickStrike(Player player) {
    if (!isEligible(player)) return;

    Entity e = GeneralMethods.getTargetedEntity(player, 2, new ArrayList<Entity>());

    if (e == null) return;

    GeneralMethods.damageEntity(player, e, damage);

    if (GeneralMethods.rand.nextInt(100) < blockChance && e instanceof Player) {
      ChiPassive.blockChi((Player) e);
    }

    ChiComboManager.addCombo(player, ChiCombo.QuickStrike);
  }
 @SuppressWarnings("deprecation")
 public void throwEarth() {
   if (sourceblock != null) {
     if (sourceblock.getWorld().equals(player.getWorld())) {
       if (EarthMethods.movedearth.containsKey(sourceblock)) {
         if (!revert) {
           EarthMethods.removeRevertIndex(sourceblock);
         }
       }
       Entity target = GeneralMethods.getTargetedEntity(player, range, new ArrayList<Entity>());
       // Methods.verbose(target);
       if (target == null) {
         destination =
             player
                 .getTargetBlock(EarthMethods.getTransparentEarthbending(), (int) range)
                 .getLocation();
         firstdestination = sourceblock.getLocation().clone();
         firstdestination.setY(destination.getY());
       } else {
         destination = ((LivingEntity) target).getEyeLocation();
         firstdestination = sourceblock.getLocation().clone();
         firstdestination.setY(destination.getY());
         destination = GeneralMethods.getPointOnLine(firstdestination, destination, range);
       }
       if (destination.distance(location) <= 1) {
         progressing = false;
         destination = null;
       } else {
         progressing = true;
         EarthMethods.playEarthbendingSound(sourceblock.getLocation());
         // direction = getDirection().normalize();
         if (sourcetype != Material.SAND && sourcetype != Material.GRAVEL) {
           sourceblock.setType(sourcetype);
         }
       }
     }
   }
 }
Exemplo n.º 5
0
  @Override
  public void progress() {
    progressCounter++;
    if (player.isDead() || !player.isOnline()) {
      remove();
      return;
    } else if (currentLoc != null && GeneralMethods.isRegionProtectedFromBuild(this, currentLoc)) {
      remove();
      return;
    }

    if (abilityName.equalsIgnoreCase("Twister")) {
      if (destination == null) {
        state = AbilityState.TWISTER_MOVING;
        direction = player.getEyeLocation().getDirection().clone().normalize();
        direction.setY(0);
        origin = player.getLocation().add(direction.clone().multiply(2));
        destination = player.getLocation().add(direction.clone().multiply(range));
        currentLoc = origin.clone();
      }
      if (origin.distanceSquared(currentLoc) < origin.distanceSquared(destination)
          && state == AbilityState.TWISTER_MOVING) {
        currentLoc.add(direction.clone().multiply(speed));
      } else if (state == AbilityState.TWISTER_MOVING) {
        state = AbilityState.TWISTER_STATIONARY;
        time = System.currentTimeMillis();
      } else if (System.currentTimeMillis() - time >= twisterRemoveDelay) {
        remove();
        return;
      } else if (GeneralMethods.isRegionProtectedFromBuild(this, currentLoc)) {
        remove();
        return;
      }

      Block topBlock = GeneralMethods.getTopBlock(currentLoc, 3, -3);
      if (topBlock == null) {
        remove();
        return;
      }
      currentLoc.setY(topBlock.getLocation().getY());

      double height = twisterHeight;
      double radius = twisterRadius;
      for (double y = 0; y < height; y += twisterHeightParticles) {
        double animRadius = ((radius / height) * y);
        for (double i = -180; i <= 180; i += twisterDegreeParticles) {
          Vector animDir = GeneralMethods.rotateXZ(new Vector(1, 0, 1), i);
          Location animLoc = currentLoc.clone().add(animDir.multiply(animRadius));
          animLoc.add(0, y, 0);
          playAirbendingParticles(animLoc, 1, 0, 0, 0);
        }
      }
      playAirbendingSound(currentLoc);

      for (int i = 0; i < height; i += 3) {
        for (Entity entity :
            GeneralMethods.getEntitiesAroundPoint(currentLoc.clone().add(0, i, 0), radius * 0.75)) {
          if (!affectedEntities.contains(entity) && !entity.equals(player)) {
            affectedEntities.add(entity);
          }
        }
      }

      for (Entity entity : affectedEntities) {
        Vector forceDir =
            GeneralMethods.getDirection(entity.getLocation(), currentLoc.clone().add(0, height, 0));
        if (entity instanceof Player) {
          if (Commands.invincible.contains(((Player) entity).getName())) {
            break;
          }
        }
        entity.setVelocity(forceDir.clone().normalize().multiply(0.3));
      }
    } else if (abilityName.equalsIgnoreCase("AirStream")) {
      if (destination == null) {
        origin = player.getEyeLocation();
        currentLoc = origin.clone();
      }
      Entity target = GeneralMethods.getTargetedEntity(player, range);
      if (target instanceof Player) {
        if (Commands.invincible.contains(((Player) target).getName())) {
          return;
        }
      }

      if (target != null && target.getLocation().distanceSquared(currentLoc) > 49) {
        destination = target.getLocation();
      } else {
        destination = GeneralMethods.getTargetedLocation(player, range, getTransparentMaterial());
      }

      direction = GeneralMethods.getDirection(currentLoc, destination).normalize();
      currentLoc.add(direction.clone().multiply(speed));

      if (player.getWorld() != currentLoc.getWorld()) {
        remove();
        return;
      } else if (!player.isSneaking()) {
        remove();
        return;
      } else if (player.getWorld().equals(currentLoc.getWorld())
          && Math.abs(player.getLocation().distanceSquared(currentLoc)) > range * range) {
        remove();
        return;
      } else if (affectedEntities.size() > 0
          && System.currentTimeMillis() - time >= airStreamEntityCarryDuration) {
        remove();
        return;
      } else if (!isTransparent(currentLoc.getBlock())) {
        remove();
        return;
      } else if (currentLoc.getY() - origin.getY() > airStreamMaxEntityHeight) {
        remove();
        return;
      } else if (GeneralMethods.isRegionProtectedFromBuild(this, currentLoc)) {
        remove();
        return;
      } else if (FireAbility.isWithinFireShield(currentLoc)) {
        remove();
        return;
      } else if (isWithinAirShield(currentLoc)) {
        remove();
        return;
      } else if (!isTransparent(currentLoc.getBlock())) {
        currentLoc.subtract(direction.clone().multiply(speed));
      }

      for (int i = 0; i < 10; i++) {
        BukkitRunnable br =
            new BukkitRunnable() {
              final Location loc = currentLoc.clone();
              final Vector dir = direction.clone();

              @Override
              public void run() {
                for (int angle = -180; angle <= 180; angle += 45) {
                  Vector orthog = GeneralMethods.getOrthogonalVector(dir.clone(), angle, 0.5);
                  playAirbendingParticles(loc.clone().add(orthog), 1, 0F, 0F, 0F);
                }
              }
            };
        br.runTaskLater(ProjectKorra.plugin, i * 2);
        tasks.add(br);
      }

      for (Entity entity : GeneralMethods.getEntitiesAroundPoint(currentLoc, 2.8)) {
        if (affectedEntities.size() == 0) {
          // Set the timer to remove the ability
          time = System.currentTimeMillis();
        }
        if (!entity.equals(player) && !affectedEntities.contains(entity)) {
          affectedEntities.add(entity);
          if (entity instanceof Player) {
            flights.add(new Flight((Player) entity, player));
          }
        }
      }

      for (Entity entity : affectedEntities) {
        Vector force = GeneralMethods.getDirection(entity.getLocation(), currentLoc);
        entity.setVelocity(force.clone().normalize().multiply(speed));
        entity.setFallDistance(0F);
      }
    } else if (abilityName.equalsIgnoreCase("AirSweep")) {
      if (origin == null) {
        direction = player.getEyeLocation().getDirection().normalize();
        origin = player.getLocation().add(direction.clone().multiply(10));
      }
      if (progressCounter < 8) {
        return;
      }
      if (destination == null) {
        destination =
            player
                .getLocation()
                .add(player.getEyeLocation().getDirection().normalize().multiply(10));
        Vector origToDest = GeneralMethods.getDirection(origin, destination);
        for (double i = 0; i < 30; i++) {
          Vector vec =
              GeneralMethods.getDirection(
                  player.getLocation(), origin.clone().add(origToDest.clone().multiply(i / 30)));

          FireComboStream fs =
              new FireComboStream(null, vec, player.getLocation(), range, speed, "AirSweep");
          fs.setDensity(1);
          fs.setSpread(0F);
          fs.setUseNewParticles(true);
          fs.setParticleEffect(getAirbendingParticles());
          fs.setCollides(false);
          fs.runTaskTimer(ProjectKorra.plugin, (long) (i / 2.5), 1L);
          tasks.add(fs);
        }
      }
      manageAirVectors();
    }
  }