/** clears region file references */ public static synchronized void clearRegionFileReferences() { Iterator iterator = regionsByFilename.values().iterator(); do { if (!iterator.hasNext()) { break; } Reference reference = (Reference) iterator.next(); try { RegionFile regionfile = (RegionFile) reference.get(); if (regionfile != null) { regionfile.close(); } } catch (IOException ioexception) { ioexception.printStackTrace(); } } while (true); regionsByFilename.clear(); }
/** 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(); } }