--- a/net/minecraft/server/RegionFileCache.java
+++ b/net/minecraft/server/RegionFileCache.java
@@ -21,7 +21,7 @@
         this.c = flag;
     }
 
-    private RegionFile getFile(ChunkCoordIntPair chunkcoordintpair) throws IOException {
+    private RegionFile getFile(ChunkCoordIntPair chunkcoordintpair, boolean existingOnly) throws IOException { // CraftBukkit
         long i = ChunkCoordIntPair.pair(chunkcoordintpair.getRegionX(), chunkcoordintpair.getRegionZ());
         RegionFile regionfile = (RegionFile) this.cache.getAndMoveToFirst(i);
 
@@ -37,6 +37,7 @@
             }
 
             File file = new File(this.b, "r." + chunkcoordintpair.getRegionX() + "." + chunkcoordintpair.getRegionZ() + ".mca");
+            if (existingOnly && !file.exists()) return null; // CraftBukkit
             RegionFile regionfile1 = new RegionFile(file, this.b, this.c);
 
             this.cache.putAndMoveToFirst(i, regionfile1);
@@ -46,7 +47,12 @@
 
     @Nullable
     public NBTTagCompound read(ChunkCoordIntPair chunkcoordintpair) throws IOException {
-        RegionFile regionfile = this.getFile(chunkcoordintpair);
+        // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing
+        RegionFile regionfile = this.getFile(chunkcoordintpair, true);
+        if (regionfile == null) {
+            return null;
+        }
+        // CraftBukkit end
         DataInputStream datainputstream = regionfile.a(chunkcoordintpair);
         Throwable throwable = null;
 
@@ -81,7 +87,7 @@
     }
 
     protected void write(ChunkCoordIntPair chunkcoordintpair, NBTTagCompound nbttagcompound) throws IOException {
-        RegionFile regionfile = this.getFile(chunkcoordintpair);
+        RegionFile regionfile = this.getFile(chunkcoordintpair, false); // CraftBukkit
         DataOutputStream dataoutputstream = regionfile.c(chunkcoordintpair);
         Throwable throwable = null;