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; }
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); } } } } }
@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(); } }