package net.minecraft.world.chunk.storage; import com.google.common.collect.Maps; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.Map; public class RegionFileCache { /** A map containing Files as keys and RegionFiles as values */ private static final Map regionsByFilename = Maps.newHashMap(); private static final String __OBFID = "CL_00000383"; public static synchronized RegionFile createOrLoadRegionFile(File worldDir, int chunkX, int chunkZ) { File var3 = new File(worldDir, "region"); File var4 = new File(var3, "r." + (chunkX >> 5) + "." + (chunkZ >> 5) + ".mca"); RegionFile var5 = (RegionFile)regionsByFilename.get(var4); if (var5 != null) { return var5; } else { if (!var3.exists()) { var3.mkdirs(); } if (regionsByFilename.size() >= 256) { clearRegionFileReferences(); } RegionFile var6 = new RegionFile(var4); regionsByFilename.put(var4, var6); return var6; } } /** * clears region file references */ public static synchronized void clearRegionFileReferences() { Iterator var0 = regionsByFilename.values().iterator(); while (var0.hasNext()) { RegionFile var1 = (RegionFile)var0.next(); try { if (var1 != null) { var1.close(); } } catch (IOException var3) { var3.printStackTrace(); } } regionsByFilename.clear(); } /** * Returns an input stream for the specified chunk. Args: worldDir, chunkX, chunkZ */ public static DataInputStream getChunkInputStream(File worldDir, int chunkX, int chunkZ) { RegionFile var3 = createOrLoadRegionFile(worldDir, chunkX, chunkZ); return var3.getChunkDataInputStream(chunkX & 31, chunkZ & 31); } /** * Returns an output stream for the specified chunk. Args: worldDir, chunkX, chunkZ */ public static DataOutputStream getChunkOutputStream(File worldDir, int chunkX, int chunkZ) { RegionFile var3 = createOrLoadRegionFile(worldDir, chunkX, chunkZ); return var3.getChunkDataOutputStream(chunkX & 31, chunkZ & 31); } }