public void moveLava() { if (sourceBlock != null) { targetDestination = getTargetEarthBlock((int) range).getLocation(); if (targetDestination.distanceSquared(location) <= 1) { progressing = false; targetDestination = null; } else { progressing = true; settingUp = true; firstDestination = getToEyeLevel(); firstDirection = getDirection(sourceBlock.getLocation(), firstDestination); targetDirection = getDirection(firstDestination, targetDestination); if (!GeneralMethods.isAdjacentToThreeOrMoreSources(sourceBlock)) { sourceBlock.setType(Material.AIR); } addLava(sourceBlock); } } }
@Override public void progress() { if (!bPlayer.canBendIgnoreCooldowns(this)) { if (!forming) { breakBlock(); } remove(); return; } if (System.currentTimeMillis() - time >= interval) { time = System.currentTimeMillis(); if (progressing && !player.isSneaking()) { remove(); return; } if (!progressing) { sourceBlock.getWorld().playEffect(location, Effect.SMOKE, 4, (int) range); return; } if (forming) { ArrayList<Block> blocks = new ArrayList<Block>(); Location loc = GeneralMethods.getTargetedLocation(player, (int) range, 8, 9, 79); location = loc.clone(); Vector dir = player.getEyeLocation().getDirection(); Vector vec; Block block; for (double i = 0; i <= radius; i += 0.5) { for (double angle = 0; angle < 360; angle += 10) { vec = GeneralMethods.getOrthogonalVector(dir.clone(), angle, i); block = loc.clone().add(vec).getBlock(); if (GeneralMethods.isRegionProtectedFromBuild( player, "LavaSurge", block.getLocation())) { continue; } if (WALL_BLOCKS.containsKey(block)) { blocks.add(block); } else if (!blocks.contains(block) && (block.getType() == Material.AIR || block.getType() == Material.FIRE || isLavabendable(block))) { WALL_BLOCKS.put(block, player); addWallBlock(block); blocks.add(block); FireBlast.removeFireBlastsAroundPoint(block.getLocation(), 2); } } } for (Block blocki : WALL_BLOCKS.keySet()) { if (WALL_BLOCKS.get(blocki) == player && !blocks.contains(blocki)) { finalRemoveLava(blocki); } } return; } if (sourceBlock.getLocation().distanceSquared(firstDestination) < 0.5 * 0.5 && settingUp) { settingUp = false; } Vector direction; if (settingUp) { direction = firstDirection; } else { direction = targetDirection; } location = location.clone().add(direction); Block block = location.getBlock(); if (block.getLocation().equals(sourceBlock.getLocation())) { location = location.clone().add(direction); block = location.getBlock(); } if (block.getType() != Material.AIR) { breakBlock(); return; } else if (!progressing) { breakBlock(); return; } addLava(block); removeLava(sourceBlock); sourceBlock = block; if (location.distanceSquared(targetDestination) < 1) { removeLava(sourceBlock); forming = true; } return; } }