private void bigStrike (final Location loc)
      {
        final int radius = 8;
        final int radiusSq = radius * radius;
        final int blockX = loc.getBlockX();
        final int blockY = loc.getBlockY();
        final int blockZ = loc.getBlockZ();
        final int fireworksY = blockY + 15;
        int iter = 0;
        for (float x = -radius; x <= radius; x += 0.5, iter += 2)
          {
            final float finalX = x;
            Merlin.getInstance().getServer().getScheduler()
                .scheduleSyncDelayedTask(Merlin.getInstance(), new Runnable()
                  {
                    public void run ()
                      {
                        float z1 =
                            (float) Math.sqrt(radiusSq - finalX * finalX);
                        Fireworks.detonateFirework(new Location(loc.getWorld(),
                            blockX + finalX, fireworksY, blockZ + z1), true,
                            false, FireworkEffect.Type.BALL, Color.AQUA,
                            Color.AQUA);
                        if (finalX != radius && finalX != -radius)
                          {
                            float z2 = -z1;
                            Fireworks.detonateFirework(
                                new Location(loc.getWorld(), blockX + finalX,
                                    fireworksY, blockZ + z2), true, false,
                                FireworkEffect.Type.BALL, Color.AQUA,
                                Color.AQUA);
                          }
                      }
                  }, iter);
          }
        final int xMax = blockX + radius;
        final int zMax = blockZ + radius;
        Merlin.getInstance().getServer().getScheduler()
            .scheduleSyncDelayedTask(Merlin.getInstance(), new Runnable()
              {
                public void run ()
                  {
                    littleStrike(loc);
                    for (int x = blockX - radius; x <= xMax; x += 2)
                      {
                        for (int z = blockZ - radius; z <= zMax; z += 2)
                          {
                            Location strike =
                                new Location(loc.getWorld(), x, blockY, z);
                            if (strike.distanceSquared(loc) < radiusSq)
                              {
                                littleStrike(strike);
                              }
                          }
                      }
                  }
              }, iter);
      }