From 2568a50fe3f2535447bd74c47e81b76dd68cae83 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 12 Jul 2019 02:10:06 -0500 Subject: [PATCH] Implement ChunkTooLargeEvent --- src/main/java/net/minecraft/server/RegionFileCache.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java index d2b3289450..e0fdf5f90f 100644 --- a/src/main/java/net/minecraft/server/RegionFileCache.java +++ b/src/main/java/net/minecraft/server/RegionFileCache.java @@ -21,6 +21,7 @@ public abstract class RegionFileCache implements AutoCloseable { private final File actualWorld; private boolean useAltWorld; // Paper end + private final String worldName; // Purpur protected RegionFileCache(File file) { @@ -35,6 +36,7 @@ public abstract class RegionFileCache implements AutoCloseable { if (name.equals("DIM-1") || name.equals("DIM1")) { container = container.getParentFile(); } + worldName = container.getName(); // Purpur this.templateWorld = new File(container, name); File region = new File(file, "region"); if (!region.exists()) { @@ -43,6 +45,7 @@ public abstract class RegionFileCache implements AutoCloseable { } else { this.useAltWorld = false; this.templateWorld = file; + worldName = file.getParentFile().getParentFile().getName(); // Purpur } // Paper start } @@ -119,6 +122,7 @@ public abstract class RegionFileCache implements AutoCloseable { regionfile.setStatus(chunk.x, chunk.z, ChunkRegionLoader.getStatus(nbttagcompound)); // Paper - cache status on disk regionfile.setOversized(chunkX, chunkZ, false); } catch (RegionFile.ChunkTooLargeException ignored) { + new net.pl3x.purpur.event.ChunkTooLargeEvent(worldName, chunkX, chunkZ, true, false).callEvent(); // Purpur printOversizedLog("ChunkTooLarge! Someone is trying to duplicate.", regionfile.file, chunkX, chunkZ); // Clone as we are now modifying it, don't want to corrupt the pending save state nbttagcompound = nbttagcompound.clone(); @@ -136,6 +140,7 @@ public abstract class RegionFileCache implements AutoCloseable { } regionfile.setStatus(chunk.x, chunk.z, ChunkRegionLoader.getStatus(nbttagcompound)); // Paper - cache status on disk } catch (RegionFile.ChunkTooLargeException e) { + new net.pl3x.purpur.event.ChunkTooLargeEvent(worldName, chunkX, chunkZ, true, true).callEvent(); // Purpur printOversizedLog("ChunkTooLarge even after reduction. Trying in overzealous mode.", regionfile.file, chunkX, chunkZ); // Eek, major fail. We have retry logic, so reduce threshholds and fall back SIZE_THRESHOLD = OVERZEALOUS_THRESHOLD; @@ -242,6 +247,7 @@ public abstract class RegionFileCache implements AutoCloseable { DataInputStream datainputstream = regionfile.a(chunkcoordintpair); // Paper start if (regionfile.isOversized(chunkcoordintpair.x, chunkcoordintpair.z)) { + new net.pl3x.purpur.event.ChunkTooLargeEvent(worldName, chunkcoordintpair.x, chunkcoordintpair.z, false, false).callEvent(); // Purpur printOversizedLog("Loading Oversized Chunk!", regionfile.file, chunkcoordintpair.x, chunkcoordintpair.z); return readOversizedChunk(regionfile, chunkcoordintpair); } -- 2.20.1