From e139db70f11d3abea9a77258d7747f1b272287ec Mon Sep 17 00:00:00 2001 From: Iceee Date: Thu, 23 Jul 2015 04:24:24 -0700 Subject: [PATCH] Optimize Spigot's Anti X-Ray --- .../0067-Optimize-Spigot-s-Anti-X-Ray.patch | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Spigot-Server-Patches/0067-Optimize-Spigot-s-Anti-X-Ray.patch diff --git a/Spigot-Server-Patches/0067-Optimize-Spigot-s-Anti-X-Ray.patch b/Spigot-Server-Patches/0067-Optimize-Spigot-s-Anti-X-Ray.patch new file mode 100644 index 0000000000..52b0382bc0 --- /dev/null +++ b/Spigot-Server-Patches/0067-Optimize-Spigot-s-Anti-X-Ray.patch @@ -0,0 +1,88 @@ +From 902c3277bf0160786ae839f700e3d390edb9c713 Mon Sep 17 00:00:00 2001 +From: Iceee +Date: Thu, 23 Jul 2015 04:23:23 -0700 +Subject: [PATCH] Optimize Spigot's Anti X-Ray + + +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index a6452bb..b8c336f 100644 +--- a/src/main/java/net/minecraft/server/WorldServer.java ++++ b/src/main/java/net/minecraft/server/WorldServer.java +@@ -252,6 +252,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { + timings.doTickTiles.startTiming(); // Spigot + this.h(); + timings.doTickTiles.stopTiming(); // Spigot ++ spigotConfig.antiXrayInstance.flushUpdates(this); // PaperSpigot + this.methodProfiler.c("chunkMap"); + timings.doChunkMap.startTiming(); // Spigot + this.manager.flush(); +diff --git a/src/main/java/org/spigotmc/AntiXray.java b/src/main/java/org/spigotmc/AntiXray.java +index 6f28cd8..a59583e 100644 +--- a/src/main/java/org/spigotmc/AntiXray.java ++++ b/src/main/java/org/spigotmc/AntiXray.java +@@ -8,6 +8,11 @@ import net.minecraft.server.Blocks; + import net.minecraft.server.World; + import org.bukkit.craftbukkit.util.CraftMagicNumbers; + ++// PaperSpigot start ++import java.util.HashSet; ++import java.util.Set; ++// PaperSpigot end ++ + public class AntiXray + { + +@@ -18,6 +23,10 @@ public class AntiXray + private final boolean[] obfuscateBlocks = new boolean[ Short.MAX_VALUE ]; + // Used to select a random replacement ore + private final byte[] replacementOres; ++ // PaperSpigot start ++ public boolean queueUpdates = true; ++ public final Set pendingUpdates = new HashSet(); ++ // PaperSpigot end + + public AntiXray(SpigotWorldConfig config) + { +@@ -44,6 +53,25 @@ public class AntiXray + } + + /** ++ * PaperSpigot - Flush queued block updates for world. ++ */ ++ public void flushUpdates(World world) ++ { ++ if ( world.spigotConfig.antiXray && !pendingUpdates.isEmpty() ) ++ { ++ queueUpdates = false; ++ ++ for ( BlockPosition position : pendingUpdates ) ++ { ++ updateNearbyBlocks( world, position ); ++ } ++ ++ pendingUpdates.clear(); ++ queueUpdates = true; ++ } ++ } ++ ++ /** + * Starts the timings handler, then updates all blocks within the set radius + * of the given coordinate, revealing them if they are hidden ores. + */ +@@ -51,6 +79,13 @@ public class AntiXray + { + if ( world.spigotConfig.antiXray ) + { ++ // PaperSpigot start ++ if ( queueUpdates ) ++ { ++ pendingUpdates.add( position ); ++ return; ++ } ++ // PaperSpigot end + update.startTiming(); + updateNearbyBlocks( world, position, 2, false ); // 2 is the radius, we shouldn't change it as that would make it exponentially slower + update.stopTiming(); +-- +1.9.5.msysgit.1 +