public boolean convertMapFormat(String s, IProgressUpdate iprogressupdate) {
   iprogressupdate.setLoadingProgress(0);
   ArrayList arraylist = new ArrayList();
   ArrayList arraylist1 = new ArrayList();
   ArrayList arraylist2 = new ArrayList();
   ArrayList arraylist3 = new ArrayList();
   File file = new File(field_22180_a, s);
   File file1 = new File(file, "DIM-1");
   System.out.println("Scanning folders...");
   func_22183_a(file, arraylist, arraylist1);
   if (file1.exists()) {
     func_22183_a(file1, arraylist2, arraylist3);
   }
   int i = arraylist.size() + arraylist2.size() + arraylist1.size() + arraylist3.size();
   System.out.println(
       (new StringBuilder()).append("Total conversion count is ").append(i).toString());
   func_22181_a(file, arraylist, 0, i, iprogressupdate);
   func_22181_a(file1, arraylist2, arraylist.size(), i, iprogressupdate);
   WorldInfo worldinfo = func_22173_b(s);
   worldinfo.setSaveVersion(19132);
   ISaveHandler isavehandler = getSaveLoader(s, false);
   isavehandler.saveWorldInfo(worldinfo);
   func_22182_a(arraylist1, arraylist.size() + arraylist2.size(), i, iprogressupdate);
   if (file1.exists()) {
     func_22182_a(
         arraylist3, arraylist.size() + arraylist2.size() + arraylist1.size(), i, iprogressupdate);
   }
   return true;
 }
  private void func_22181_a(
      File file, ArrayList arraylist, int i, int j, IProgressUpdate iprogressupdate) {
    Collections.sort(arraylist);
    byte abyte0[] = new byte[4096];
    int i1;
    for (Iterator iterator = arraylist.iterator();
        iterator.hasNext();
        iprogressupdate.setLoadingProgress(i1)) {
      ChunkFile chunkfile = (ChunkFile) iterator.next();
      int k = chunkfile.func_22323_b();
      int l = chunkfile.func_22321_c();
      RegionFile regionfile = RegionFileCache.func_22193_a(file, k, l);
      if (!regionfile.func_22202_c(k & 0x1f, l & 0x1f)) {
        try {
          DataInputStream datainputstream =
              new DataInputStream(
                  new GZIPInputStream(new FileInputStream(chunkfile.func_22324_a())));
          DataOutputStream dataoutputstream =
              regionfile.getChunkDataOutputStream(k & 0x1f, l & 0x1f);
          for (int j1 = 0; (j1 = datainputstream.read(abyte0)) != -1; ) {
            dataoutputstream.write(abyte0, 0, j1);
          }

          dataoutputstream.close();
          datainputstream.close();
        } catch (IOException ioexception) {
          ioexception.printStackTrace();
        }
      }
      i++;
      i1 = (int) Math.round((100D * (double) i) / (double) j);
    }

    RegionFileCache.func_22192_a();
  }
 private void func_22182_a(ArrayList arraylist, int i, int j, IProgressUpdate iprogressupdate) {
   int k;
   for (Iterator iterator = arraylist.iterator();
       iterator.hasNext();
       iprogressupdate.setLoadingProgress(k)) {
     File file = (File) iterator.next();
     File afile[] = file.listFiles();
     func_22179_a(afile);
     file.delete();
     i++;
     k = (int) Math.round((100D * (double) i) / (double) j);
   }
 }
  private void convertFile(
      File par1File,
      Iterable par2Iterable,
      WorldChunkManager par3WorldChunkManager,
      int par4,
      int par5,
      IProgressUpdate par6IProgressUpdate) {
    int i;

    for (Iterator iterator = par2Iterable.iterator();
        iterator.hasNext();
        par6IProgressUpdate.setLoadingProgress(i)) {
      File file = (File) iterator.next();
      convertChunks(par1File, file, par3WorldChunkManager, par4, par5, par6IProgressUpdate);
      par4++;
      i = (int) Math.round((100D * (double) par4) / (double) par5);
    }
  }
  /** Converts the specified map to the new map format. Args: worldName, loadingScreen */
  public boolean convertMapFormat(String par1Str, IProgressUpdate par2IProgressUpdate) {
    par2IProgressUpdate.setLoadingProgress(0);
    ArrayList arraylist = new ArrayList();
    ArrayList arraylist1 = new ArrayList();
    ArrayList arraylist2 = new ArrayList();
    File file = new File(savesDirectory, par1Str);
    File file1 = new File(file, "DIM-1");
    File file2 = new File(file, "DIM1");
    System.out.println("Scanning folders...");
    addRegionFilesToCollection(file, arraylist);

    if (file1.exists()) {
      addRegionFilesToCollection(file1, arraylist1);
    }

    if (file2.exists()) {
      addRegionFilesToCollection(file2, arraylist2);
    }

    int i = arraylist.size() + arraylist1.size() + arraylist2.size();
    System.out.println(
        (new StringBuilder()).append("Total conversion count is ").append(i).toString());
    WorldInfo worldinfo = getWorldInfo(par1Str);
    Object obj = null;

    if (worldinfo.getTerrainType() == WorldType.FLAT) {
      obj = new WorldChunkManagerHell(BiomeGenBase.plains, 0.5F, 0.5F);
    } else {
      obj = new WorldChunkManager(worldinfo.getSeed(), worldinfo.getTerrainType());
    }

    convertFile(
        new File(file, "region"),
        arraylist,
        ((WorldChunkManager) (obj)),
        0,
        i,
        par2IProgressUpdate);
    convertFile(
        new File(file1, "region"),
        arraylist1,
        new WorldChunkManagerHell(BiomeGenBase.hell, 1.0F, 0.0F),
        arraylist.size(),
        i,
        par2IProgressUpdate);
    convertFile(
        new File(file2, "region"),
        arraylist2,
        new WorldChunkManagerHell(BiomeGenBase.sky, 0.5F, 0.0F),
        arraylist.size() + arraylist1.size(),
        i,
        par2IProgressUpdate);
    worldinfo.setSaveVersion(19133);

    if (worldinfo.getTerrainType() == WorldType.DEFAULT_1_1) {
      worldinfo.setTerrainType(WorldType.DEFAULT);
    }

    createFile(par1Str);
    ISaveHandler isavehandler = getSaveLoader(par1Str, false);
    isavehandler.saveWorldInfo(worldinfo);
    return true;
  }
  /** copies a 32x32 chunk set from par2File to par1File, via AnvilConverterData */
  private void convertChunks(
      File par1File,
      File par2File,
      WorldChunkManager par3WorldChunkManager,
      int par4,
      int par5,
      IProgressUpdate par6IProgressUpdate) {
    try {
      String s = par2File.getName();
      RegionFile regionfile = new RegionFile(par2File);
      RegionFile regionfile1 =
          new RegionFile(
              new File(
                  par1File,
                  (new StringBuilder())
                      .append(s.substring(0, s.length() - ".mcr".length()))
                      .append(".mca")
                      .toString()));

      for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 32; j++) {
          if (!regionfile.isChunkSaved(i, j) || regionfile1.isChunkSaved(i, j)) {
            continue;
          }

          DataInputStream datainputstream = regionfile.getChunkDataInputStream(i, j);

          if (datainputstream == null) {
            System.out.println("Failed to fetch input stream");
          } else {
            NBTTagCompound nbttagcompound = CompressedStreamTools.read(datainputstream);
            datainputstream.close();
            NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("Level");
            AnvilConverterData anvilconverterdata = ChunkLoader.load(nbttagcompound1);
            NBTTagCompound nbttagcompound2 = new NBTTagCompound();
            NBTTagCompound nbttagcompound3 = new NBTTagCompound();
            nbttagcompound2.setTag("Level", nbttagcompound3);
            ChunkLoader.convertToAnvilFormat(
                anvilconverterdata, nbttagcompound3, par3WorldChunkManager);
            DataOutputStream dataoutputstream = regionfile1.getChunkDataOutputStream(i, j);
            CompressedStreamTools.write(nbttagcompound2, dataoutputstream);
            dataoutputstream.close();
          }
        }

        int k = (int) Math.round((100D * (double) (par4 * 1024)) / (double) (par5 * 1024));
        int l =
            (int)
                Math.round((100D * (double) ((i + 1) * 32 + par4 * 1024)) / (double) (par5 * 1024));

        if (l > k) {
          par6IProgressUpdate.setLoadingProgress(l);
        }
      }

      regionfile.close();
      regionfile1.close();
    } catch (IOException ioexception) {
      ioexception.printStackTrace();
    }
  }