--- a/net/minecraft/world/level/chunk/storage/RegionFileCache.java
+++ b/net/minecraft/world/level/chunk/storage/RegionFileCache.java
@@ -30,7 +30,7 @@
         this.sync = flag;
     }
 
-    private RegionFile getRegionFile(ChunkCoordIntPair chunkcoordintpair) throws IOException {
+    private RegionFile getRegionFile(ChunkCoordIntPair chunkcoordintpair, boolean existingOnly) throws IOException { // CraftBukkit
         long i = ChunkCoordIntPair.asLong(chunkcoordintpair.getRegionX(), chunkcoordintpair.getRegionZ());
         RegionFile regionfile = (RegionFile) this.regionCache.getAndMoveToFirst(i);
 
@@ -45,6 +45,7 @@
             Path path = this.folder;
             int j = chunkcoordintpair.getRegionX();
             Path path1 = path.resolve("r." + j + "." + chunkcoordintpair.getRegionZ() + ".mca");
+            if (existingOnly && !java.nio.file.Files.exists(path1)) return null; // CraftBukkit
             RegionFile regionfile1 = new RegionFile(path1, this.folder, this.sync);
 
             this.regionCache.putAndMoveToFirst(i, regionfile1);
@@ -54,7 +55,12 @@
 
     @Nullable
     public NBTTagCompound read(ChunkCoordIntPair chunkcoordintpair) throws IOException {
-        RegionFile regionfile = this.getRegionFile(chunkcoordintpair);
+        // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing
+        RegionFile regionfile = this.getRegionFile(chunkcoordintpair, true);
+        if (regionfile == null) {
+            return null;
+        }
+        // CraftBukkit end
         DataInputStream datainputstream = regionfile.getChunkDataInputStream(chunkcoordintpair);
 
         NBTTagCompound nbttagcompound;
@@ -94,7 +100,12 @@
     }
 
     public void scanChunk(ChunkCoordIntPair chunkcoordintpair, StreamTagVisitor streamtagvisitor) throws IOException {
-        RegionFile regionfile = this.getRegionFile(chunkcoordintpair);
+        // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing
+        RegionFile regionfile = this.getRegionFile(chunkcoordintpair, true);
+        if (regionfile == null) {
+            return;
+        }
+        // CraftBukkit end
         DataInputStream datainputstream = regionfile.getChunkDataInputStream(chunkcoordintpair);
 
         try {
@@ -120,7 +131,7 @@
     }
 
     protected void write(ChunkCoordIntPair chunkcoordintpair, @Nullable NBTTagCompound nbttagcompound) throws IOException {
-        RegionFile regionfile = this.getRegionFile(chunkcoordintpair);
+        RegionFile regionfile = this.getRegionFile(chunkcoordintpair, false); // CraftBukkit
 
         if (nbttagcompound == null) {
             regionfile.clear(chunkcoordintpair);
