@Override
    public void run() {

      for (String s : imageURLs) {
        LogHelper.info("Checking Image: " + s);
        if (!checkExistence(s)) if (downloadImage(s)) reloadRequired = true;
        if (checkExistence(s)) {
          try {
            URL url = new URL(s);
            String fileName = url.getFile();

            BufferedImage bi = ImageIO.read(new File(getImagesFolder(), fileName));
            downloadedImages.put(
                s,
                new CustomResourceLocation(
                    fileName.substring(fileName.indexOf("/") + 1), bi.getWidth(), bi.getHeight()));
          } catch (MalformedURLException e) {
            LogHelper.error("Image Read Failed");
            e.printStackTrace();
          } catch (IOException e) {
            LogHelper.error("Image Read Failed");
            e.printStackTrace();
          }
        }
      }

      isFinished = true;
    }
  private static void addRSPack(boolean refreash) {
    File rspack = new File(getConfigFolder(), "/resources");
    if (!rspack.exists()) return;

    if (!Arrays.asList(rspack.list()).contains("pack.mcmeta")) {
      try {
        JsonWriter writer = new JsonWriter(new FileWriter(new File(rspack, "pack.mcmeta")));
        writer.beginObject();
        writer.name("pack");
        writer.beginObject();
        writer.name("pack_format").value(1);
        writer.name("description").value("Draconic Evolution GUI Images");
        writer.endObject();
        writer.endObject();
        writer.close();
      } catch (IOException e) {
        LogHelper.error("Error creating pack.mcmeta");
        e.printStackTrace();
      }
    }

    Field f =
        ReflectionHelper.findField(Minecraft.class, "defaultResourcePacks", "field_110449_ao");
    f.setAccessible(true);
    try {
      List defaultResourcePacks = (List) f.get(Minecraft.getMinecraft());
      defaultResourcePacks.add(new FolderResourcePack(rspack));

      f.set(Minecraft.getMinecraft(), defaultResourcePacks);
      LogHelper.info("RS Added");
      if (refreash) Minecraft.getMinecraft().refreshResources();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    }
  }
 private static boolean checkExistence(String urlS) {
   try {
     URL url = new URL(urlS);
     String fileName = url.getFile();
     return Arrays.asList(getImagesFolder().list())
         .contains(fileName.substring(fileName.indexOf("/") + 1));
   } catch (MalformedURLException e) {
     LogHelper.error("Unable to check files existence. Invalid URL: " + urlS);
     e.printStackTrace();
     return false;
   }
 }
    private static boolean downloadImage(String urlString) {
      try {
        URL url = new URL(urlString);
        String fileName = url.getFile();

        LogHelper.info("Downloading Image " + fileName);

        File dll = new File(getImagesFolder(), fileName);

        InputStream is = url.openStream();
        OutputStream os = new FileOutputStream(dll);

        ByteStreams.copy(is, os);

        is.close();
        os.close();

      } catch (IOException e) {
        LogHelper.error("Download Failed");
        e.printStackTrace();
        return false;
      }
      return true;
    }