aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Spigot-Server-Patches/0031-Lighting-Queue.patch314
-rw-r--r--Spigot-Server-Patches/0036-Optimize-explosions.patch8
-rw-r--r--Spigot-Server-Patches/0050-Disable-spigot-tick-limiters.patch8
-rw-r--r--Spigot-Server-Patches/0058-Add-Location-support-to-tab-completers-vanilla-featu.patch6
-rw-r--r--Spigot-Server-Patches/0060-Optimize-getBlockData.patch6
-rw-r--r--Spigot-Server-Patches/0061-Avoid-hopper-searches-if-there-are-no-items.patch14
-rw-r--r--Spigot-Server-Patches/0067-Change-implementation-of-tile-entity-removal-list.patch6
-rw-r--r--Spigot-Server-Patches/0071-Add-exception-reporting-event.patch14
-rw-r--r--Spigot-Server-Patches/0086-Add-World-Util-Methods.patch8
-rw-r--r--Spigot-Server-Patches/0100-Optimize-isValidLocation-for-inlining.patch12
-rw-r--r--Spigot-Server-Patches/0106-Option-to-disable-BlockPhysicsEvent-for-Redstone.patch6
-rw-r--r--Spigot-Server-Patches/0107-Entity-AddTo-RemoveFrom-World-Events.patch8
-rw-r--r--Spigot-Server-Patches/0108-Configurable-Chunk-Inhabited-Timer.patch6
-rw-r--r--Spigot-Server-Patches/0114-Add-getEntity-by-UUID-API.patch6
-rw-r--r--Spigot-Server-Patches/0116-Do-not-load-chunks-for-light-checks.patch6
-rw-r--r--Spigot-Server-Patches/0120-Configurable-Keep-Spawn-Loaded-range-per-world.patch10
-rw-r--r--Spigot-Server-Patches/0121-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch6
-rw-r--r--Spigot-Server-Patches/0122-Don-t-spam-reload-spawn-chunks-in-nether-end.patch6
-rw-r--r--Spigot-Server-Patches/0127-Remove-unused-World-Tile-Entity-List.patch14
-rw-r--r--Spigot-Server-Patches/0133-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch6
-rw-r--r--Spigot-Server-Patches/0142-Check-entity-count-additions-and-mark-entities-remov.patch12
-rw-r--r--Spigot-Server-Patches/0146-remove-null-possibility-for-getServer-singleton.patch10
-rw-r--r--Spigot-Server-Patches/0147-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch6
-rw-r--r--Spigot-Server-Patches/0152-Do-not-mark-chunks-as-active-for-neighbor-updates.patch8
-rw-r--r--Spigot-Server-Patches/0153-Unmark-chunk-as-unloading-when-unload-is-cancelled.patch12
25 files changed, 262 insertions, 256 deletions
diff --git a/Spigot-Server-Patches/0031-Lighting-Queue.patch b/Spigot-Server-Patches/0031-Lighting-Queue.patch
index 368e242597..da3dd898a1 100644
--- a/Spigot-Server-Patches/0031-Lighting-Queue.patch
+++ b/Spigot-Server-Patches/0031-Lighting-Queue.patch
@@ -1,21 +1,31 @@
-From 5efa3dbdcbafbb869d80578874d617adbdbbe687 Mon Sep 17 00:00:00 2001
+From dda988688e1cc0e88e958f3d2efb47a23df5cc01 Mon Sep 17 00:00:00 2001
From: Byteflux <[email protected]>
Date: Wed, 2 Mar 2016 00:52:31 -0600
Subject: [PATCH] Lighting Queue
+This provides option to queue lighting updates to ensure they do not cause the server lag
-diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java
-index 0f8315c..5afdc2c 100644
---- a/src/main/java/co/aikar/timings/MinecraftTimings.java
-+++ b/src/main/java/co/aikar/timings/MinecraftTimings.java
-@@ -17,6 +17,7 @@ public final class MinecraftTimings {
- public static final Timing timeUpdateTimer = Timings.ofSafe("Time Update");
- public static final Timing serverCommandTimer = Timings.ofSafe("Server Command");
- public static final Timing worldSaveTimer = Timings.ofSafe("World Save");
-+ public static final Timing lightingQueueTimer = Timings.ofSafe("Lighting Queue");
+diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java
+index 11dd692..da3787d 100644
+--- a/src/main/java/co/aikar/timings/WorldTimingsHandler.java
++++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java
+@@ -35,6 +35,8 @@ public class WorldTimingsHandler {
+ public final Timing syncChunkLoadTileTicksTimer;
+ public final Timing syncChunkLoadPostTimer;
- public static final Timing tickEntityTimer = Timings.ofSafe("## tickEntity");
- public static final Timing tickTileEntityTimer = Timings.ofSafe("## tickTileEntity");
++ public final Timing lightingQueueTimer;
++
+ public WorldTimingsHandler(World server) {
+ String name = server.worldData.getName() +" - ";
+
+@@ -67,5 +69,7 @@ public class WorldTimingsHandler {
+ tracker2 = Timings.ofSafe(name + "tracker stage 2");
+ doTick = Timings.ofSafe(name + "doTick");
+ tickEntities = Timings.ofSafe(name + "tickEntities");
++
++ lightingQueueTimer = Timings.ofSafe(name + "Lighting Queue");
+ }
+ }
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 7c0e61f..8e3a0f3 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -32,31 +42,22 @@ index 7c0e61f..8e3a0f3 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 5690e81..42fef0a 100644
+index 5690e81..d55beb9 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -45,6 +45,7 @@ public class Chunk {
- private ConcurrentLinkedQueue<BlockPosition> y;
- public boolean d;
- protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot
-+ public int lightUpdates; // Paper - Number of queued light updates for this chunk
-
- // CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
- private int neighbors = 0x1 << 12;
-@@ -227,6 +228,22 @@ public class Chunk {
+@@ -33,6 +33,7 @@ public class Chunk {
+ private boolean m;
+ public final Map<BlockPosition, TileEntity> tileEntities;
+ public final List<Entity>[] entitySlices; // Spigot
++ final PaperLightingQueue.LightingQueue lightingQueue = new PaperLightingQueue.LightingQueue(this); // Paper
+ private boolean done;
+ private boolean lit;
+ private boolean r;
+@@ -227,6 +228,13 @@ public class Chunk {
private void h(boolean flag) {
this.world.methodProfiler.a("recheckGaps");
if (this.world.areChunksLoaded(new BlockPosition(this.locX * 16 + 8, 0, this.locZ * 16 + 8), 16)) {
-+ // Paper start - Queue light update
-+ if (!world.paperConfig.queueLightUpdates) {
-+ recheckGaps(flag);
-+ } else {
-+ ++lightUpdates;
-+ world.getServer().getServer().lightingQueue.add(() -> {
-+ recheckGaps(flag);
-+ --lightUpdates;
-+ });
-+ }
++ lightingQueue.add(() -> recheckGaps(flag)); // Paper - Queue light update
+ }
+ }
+
@@ -66,165 +67,170 @@ index 5690e81..42fef0a 100644
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 16; ++j) {
if (this.i[i + j * 16]) {
-@@ -478,7 +495,7 @@ public class Chunk {
+@@ -478,7 +486,7 @@ public class Chunk {
} else {
if (flag) {
this.initLighting();
- } else {
-+ } else if (!world.paperConfig.queueLightUpdates) { // Paper
++ } else { lightingQueue.add(() -> { // Paper - Queue light update
int j1 = iblockdata.c();
int k1 = iblockdata1.c();
-@@ -493,6 +510,28 @@ public class Chunk {
+@@ -493,6 +501,7 @@ public class Chunk {
if (j1 != k1 && (j1 < k1 || this.getBrightness(EnumSkyBlock.SKY, blockposition) > 0 || this.getBrightness(EnumSkyBlock.BLOCK, blockposition) > 0)) {
this.d(i, k);
}
-+ // Paper start - Queue light update
-+ } else {
-+ int j1 = iblockdata.c();
-+ int k1 = iblockdata1.c();
-+
-+ ++lightUpdates;
-+ world.getServer().getServer().lightingQueue.add(() -> {
-+ if (j1 > 0) {
-+ if (j >= i1) {
-+ this.c(i, j + 1, k);
-+ }
-+ } else if (j == i1 - 1) {
-+ this.c(i, j, k);
-+ }
-+
-+ if (j1 != k1 && (j1 < k1 || this.getBrightness(EnumSkyBlock.SKY, blockposition) > 0 || this.getBrightness(EnumSkyBlock.BLOCK, blockposition) > 0)) {
-+ this.d(i, k);
-+ }
-+
-+ --lightUpdates;
-+ });
-+ // Paper end
++ }); // Paper
}
TileEntity tileentity;
-@@ -1318,4 +1357,29 @@ public class Chunk {
-
- private EnumTileEntityState() {}
- }
-+
-+ // Paper start
-+ public boolean hasLightUpdates() {
-+ if (world.paperConfig.queueLightUpdates) {
-+ if (lightUpdates > 0) {
-+ return true;
-+ }
-+
-+ for (int x = locX - 2; x <= locX + 2; ++x) {
-+ for (int z = locZ - 2; z <= locZ + 2; ++z) {
-+ if ((x == 0 && z == 0) || (x == locX && z == locZ)) {
-+ continue;
-+ }
-+
-+ Chunk chunk = MCUtil.getLoadedChunkWithoutMarkingActive(world, x, z);
-+ if (chunk != null && chunk.lightUpdates > 0) {
-+ return true;
-+ }
-+ }
-+ }
-+ }
-+
-+ return false;
-+ }
-+ // Paper end
- }
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
-index de85bd5..20dccfb 100644
+index de85bd5..50f0345 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
-@@ -269,6 +269,7 @@ public class ChunkProviderServer implements IChunkProvider {
- Chunk chunk = (Chunk) this.chunks.get(olong);
+@@ -275,6 +275,7 @@ public class ChunkProviderServer implements IChunkProvider {
+ if (event.isCancelled()) {
+ continue;
+ }
++ chunk.lightingQueue.processUnload(); // Paper
- if (chunk != null && chunk.d) {
-+ if (chunk.hasLightUpdates()) continue; // Paper - Don't unload chunks with pending light updates.
- // CraftBukkit start
- ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk);
- this.world.getServer().getPluginManager().callEvent(event);
+ // Update neighbor counts
+ for (int x = -2; x < 3; x++) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index ebf6c48..fcc1214 100644
+index ebf6c48..89a40a8 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -52,6 +52,11 @@ import org.bukkit.craftbukkit.CraftServer;
- // CraftBukkit end
- import co.aikar.timings.MinecraftTimings; // Paper
+@@ -706,7 +706,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
-+// Paper start
-+import java.util.LinkedList;
-+import java.util.Queue;
-+// Paper end
-+
- public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics {
-
- public static final Logger LOGGER = LogManager.getLogger();
-@@ -118,6 +123,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
- public final Thread primaryThread;
- public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
- public int autosavePeriod;
-+ public final Queue<Runnable> lightingQueue = new LinkedList<Runnable>(); // Paper - Queued light updates
- // CraftBukkit end
+ protected void C() throws ExceptionWorldConflict { // CraftBukkit - added throws
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.startTiming(); // Paper
+- long i = System.nanoTime();
++ long i = System.nanoTime(); long startTime = i; // Paper
- public MinecraftServer(OptionSet options, Proxy proxy, DataConverterManager dataconvertermanager, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache) {
-@@ -765,6 +771,34 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
- this.methodProfiler.b();
+ ++this.ticks;
+ if (this.S) {
+@@ -766,6 +766,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
this.methodProfiler.b();
-+ // Paper start - Flush light updates
-+ if (!lightingQueue.isEmpty()) {
-+ MinecraftTimings.lightingQueueTimer.startTiming();
-+
-+ int updatesThisTick = 0;
-+ long cachedTime = System.currentTimeMillis();
-+ long startTime = cachedTime - (this.h[this.ticks % 100] / 1000000);
-+ int maxTickTimeCap = MathHelper.floor((TICK_TIME / 1000000) * 0.8);
-+ int maxTickTime = Math.max(0, (int) (maxTickTimeCap - (cachedTime - startTime)));
-+ Runnable lightUpdate;
-+
-+ while (maxTickTime > 0 && (lightUpdate = lightingQueue.poll()) != null) {
-+ lightUpdate.run();
-+ if (++updatesThisTick % 10 == 0) {
-+ long currentTime = System.currentTimeMillis();
-+ if (currentTime - cachedTime > maxTickTime) {
-+ break;
-+ }
+ org.spigotmc.WatchdogThread.tick(); // Spigot
++ PaperLightingQueue.processQueue(startTime); // Paper
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
+ }
+
+diff --git a/src/main/java/net/minecraft/server/PaperLightingQueue.java b/src/main/java/net/minecraft/server/PaperLightingQueue.java
+new file mode 100644
+index 0000000..2350fe3
+--- /dev/null
++++ b/src/main/java/net/minecraft/server/PaperLightingQueue.java
+@@ -0,0 +1,98 @@
++package net.minecraft.server;
++
++import co.aikar.timings.Timing;
++import java.util.ArrayDeque;
+
-+ cachedTime = currentTime;
-+ maxTickTime = Math.max(0, (int) (maxTickTimeCap - (currentTime - startTime)));
++class PaperLightingQueue {
++ private static final long MAX_TIME = (long) (1000000000 / 20 * .95);
++ private static int updatesThisTick;
++
++
++ static void processQueue(long curTime) {
++ updatesThisTick = 0;
++
++ final long startTime = System.nanoTime();
++ final long maxTickTime = MAX_TIME - (startTime - curTime);
++
++ START:
++ for (World world : MinecraftServer.getServer().worlds) {
++ if (!world.paperConfig.queueLightUpdates) {
++ continue;
++ }
++
++ for (Chunk chunk : ((WorldServer) world).getChunkProviderServer().chunks.values()) {
++ if (chunk.lightingQueue.processQueue(startTime, maxTickTime)) {
++ break START;
+ }
+ }
++ }
++ }
+
-+ MinecraftTimings.lightingQueueTimer.stopTiming();
++ static class LightingQueue extends ArrayDeque<Runnable> {
++ final private Chunk chunk;
++
++ LightingQueue(Chunk chunk) {
++ super();
++ this.chunk = chunk;
+ }
-+ // Paper end
+
- org.spigotmc.WatchdogThread.tick(); // Spigot
- co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
- }
++ @Override
++ public boolean add(Runnable runnable) {
++ if (chunk.world.paperConfig.queueLightUpdates) {
++ return super.add(runnable);
++ }
++ runnable.run();
++ return true;
++ }
++
++ /**
++ * Processes the lighting queue for this chunk
++ *
++ * @param startTime If start Time is 0, we will not limit execution time
++ * @param maxTickTime Maximum time to spend processing lighting updates
++ * @return true to abort processing furthur lighting updates
++ */
++ private boolean processQueue(long startTime, long maxTickTime) {
++ if (this.isEmpty()) {
++ return false;
++ }
++ try (Timing ignored = chunk.world.timings.lightingQueueTimer.startTiming()) {
++ Runnable lightUpdate;
++ while ((lightUpdate = this.poll()) != null) {
++ lightUpdate.run();
++ if (startTime > 0 && ++PaperLightingQueue.updatesThisTick % 10 == 0 && PaperLightingQueue.updatesThisTick > 10) {
++ if (System.nanoTime() - startTime > maxTickTime) {
++ return true;
++ }
++ }
++ }
++ }
++
++ return false;
++ }
++
++ /**
++ * Flushes lighting updates to unload the chunk
++ */
++ void processUnload() {
++ if (!chunk.world.paperConfig.queueLightUpdates) {
++ return;
++ }
++ processQueue(0, 0); // No timeout
++
++ final int radius = 1; // TODO: bitflip, why should this ever be 2?
++ for (int x = chunk.locX - radius; x <= chunk.locX + radius; ++x) {
++ for (int z = chunk.locZ - radius; z <= chunk.locZ + radius; ++z) {
++ if (x == chunk.locX && z == chunk.locZ) {
++ continue;
++ }
++
++ Chunk neighbor = MCUtil.getLoadedChunkWithoutMarkingActive(chunk.world, x, z);
++ if (neighbor != null) {
++ neighbor.lightingQueue.processQueue(0, 0); // No timeout
++ }
++ }
++ }
++ }
++ }
++}
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 362df8f..77cfd3f 100644
+index 362df8f..dc51a79 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -384,7 +384,17 @@ public abstract class World implements IBlockAccess {
+@@ -384,7 +384,7 @@ public abstract class World implements IBlockAccess {
} else {
if (iblockdata.c() != iblockdata1.c() || iblockdata.d() != iblockdata1.d()) {
this.methodProfiler.a("checkLight");
- this.w(blockposition);
-+ // Paper start - Queue light update
-+ if (!paperConfig.queueLightUpdates) {
-+ this.w(blockposition);
-+ } else {
-+ ++chunk.lightUpdates;
-+ getMinecraftServer().lightingQueue.add(() -> {
-+ this.w(blockposition);
-+ --chunk.lightUpdates;
-+ });
-+ }
-+ // Paper end
++ chunk.lightingQueue.add(() -> this.w(blockposition)); // Paper - Queue light update
this.methodProfiler.b();
}
diff --git a/Spigot-Server-Patches/0036-Optimize-explosions.patch b/Spigot-Server-Patches/0036-Optimize-explosions.patch
index 5397378fba..26ff8cd64e 100644
--- a/Spigot-Server-Patches/0036-Optimize-explosions.patch
+++ b/Spigot-Server-Patches/0036-Optimize-explosions.patch
@@ -1,4 +1,4 @@
-From f537cf6b939037c60801e039483949925bf390c5 Mon Sep 17 00:00:00 2001
+From 67a035d6646e7d542e0a6c0156ec202e542e01aa Mon Sep 17 00:00:00 2001
From: Byteflux <[email protected]>
Date: Wed, 2 Mar 2016 11:59:48 -0600
Subject: [PATCH] Optimize explosions
@@ -124,10 +124,10 @@ index de74fb7..8e225a5 100644
+ // Paper end
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index fcc1214..5925e2c 100644
+index 89a40a8..bbdb19a 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -903,6 +903,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
+@@ -870,6 +870,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
worldserver.getTracker().updatePlayers();
this.methodProfiler.b();
this.methodProfiler.b();
@@ -136,7 +136,7 @@ index fcc1214..5925e2c 100644
// this.i[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 77cfd3f..71159b4 100644
+index dc51a79..c8c2601 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -16,6 +16,7 @@ import javax.annotation.Nullable;
diff --git a/Spigot-Server-Patches/0050-Disable-spigot-tick-limiters.patch b/Spigot-Server-Patches/0050-Disable-spigot-tick-limiters.patch
index 85de4a51b5..db68c93d81 100644
--- a/Spigot-Server-Patches/0050-Disable-spigot-tick-limiters.patch
+++ b/Spigot-Server-Patches/0050-Disable-spigot-tick-limiters.patch
@@ -1,14 +1,14 @@
-From be1c32e1306b4b5713bc1046bdc234f3827f7407 Mon Sep 17 00:00:00 2001
+From 58ac13abf1d84ad3e446556592682eb8f077ee4a Mon Sep 17 00:00:00 2001
From: Zach Brown <[email protected]>
Date: Wed, 2 Mar 2016 23:45:17 -0600
Subject: [PATCH] Disable spigot tick limiters
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 71159b4..5adc297 100644
+index c8c2601..b7f45b6 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -1428,10 +1428,10 @@ public abstract class World implements IBlockAccess {
+@@ -1418,10 +1418,10 @@ public abstract class World implements IBlockAccess {
// CraftBukkit start - Use field for loop variable
co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Paper
int entitiesThisCycle = 0;
@@ -23,7 +23,7 @@ index 71159b4..5adc297 100644
tickPosition = (tickPosition < entityList.size()) ? tickPosition : 0;
entity = (Entity) this.entityList.get(this.tickPosition);
// CraftBukkit end
-@@ -1496,9 +1496,7 @@ public abstract class World implements IBlockAccess {
+@@ -1486,9 +1486,7 @@ public abstract class World implements IBlockAccess {
// Spigot start
// Iterator iterator = this.tileEntityListTick.iterator();
int tilesThisCycle = 0;
diff --git a/Spigot-Server-Patches/0058-Add-Location-support-to-tab-completers-vanilla-featu.patch b/Spigot-Server-Patches/0058-Add-Location-support-to-tab-completers-vanilla-featu.patch
index 8e704efe09..09102fc047 100644
--- a/Spigot-Server-Patches/0058-Add-Location-support-to-tab-completers-vanilla-featu.patch
+++ b/Spigot-Server-Patches/0058-Add-Location-support-to-tab-completers-vanilla-featu.patch
@@ -1,4 +1,4 @@
-From 098cb462c9c959f5b015dd13058fbb76619829d0 Mon Sep 17 00:00:00 2001
+From d867255d8c2e1b34c741e287d89375ba801c1098 Mon Sep 17 00:00:00 2001
From: DemonWav <[email protected]>
Date: Thu, 3 Mar 2016 01:44:39 -0600
Subject: [PATCH] Add Location support to tab completers (vanilla feature
@@ -20,10 +20,10 @@ index 2b7a4dd..246f3d9 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 5925e2c..f5e26df 100644
+index bbdb19a..3d2e0b6 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1189,7 +1189,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
+@@ -1156,7 +1156,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return arraylist;
}
*/
diff --git a/Spigot-Server-Patches/0060-Optimize-getBlockData.patch b/Spigot-Server-Patches/0060-Optimize-getBlockData.patch
index 6062b7952a..2c773fdff2 100644
--- a/Spigot-Server-Patches/0060-Optimize-getBlockData.patch
+++ b/Spigot-Server-Patches/0060-Optimize-getBlockData.patch
@@ -1,4 +1,4 @@
-From 7b8fd6c09c65c9bafae7bd58364797691be50cad Mon Sep 17 00:00:00 2001
+From 086069acbe2c36b968bd5d853426ff8d38a8cd49 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Thu, 3 Mar 2016 02:07:55 -0600
Subject: [PATCH] Optimize getBlockData
@@ -6,10 +6,10 @@ Subject: [PATCH] Optimize getBlockData
Hot method, so reduce # of instructions for the method.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 3bcbbb9..08525d6 100644
+index d55beb9..3806def 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -404,8 +404,15 @@ public class Chunk {
+@@ -395,8 +395,15 @@ public class Chunk {
return this.a(i, j, k).c();
}
diff --git a/Spigot-Server-Patches/0061-Avoid-hopper-searches-if-there-are-no-items.patch b/Spigot-Server-Patches/0061-Avoid-hopper-searches-if-there-are-no-items.patch
index ace40b50e9..6dc5d4cc47 100644
--- a/Spigot-Server-Patches/0061-Avoid-hopper-searches-if-there-are-no-items.patch
+++ b/Spigot-Server-Patches/0061-Avoid-hopper-searches-if-there-are-no-items.patch
@@ -1,4 +1,4 @@
-From c78c930892a7b03ed80dcf843aedb632fb1a8b4d Mon Sep 17 00:00:00 2001
+From 1bba159601a998917f3ebe31c6b6642951a02ef7 Mon Sep 17 00:00:00 2001
From: CullanP <[email protected]>
Date: Thu, 3 Mar 2016 02:13:38 -0600
Subject: [PATCH] Avoid hopper searches if there are no items
@@ -14,12 +14,12 @@ And since minecart hoppers are used _very_ rarely near we can avoid alot of sear
Combined, this adds up a lot.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 08525d6..300d625 100644
+index 3806def..acce7cb 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -47,6 +47,13 @@ public class Chunk {
+ public boolean d;
protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot
- public int lightUpdates; // Paper - Number of queued light updates for this chunk
+ // Paper start
+ // Track the number of minecarts and items
@@ -31,7 +31,7 @@ index 08525d6..300d625 100644
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
private int neighbors = 0x1 << 12;
-@@ -655,6 +662,13 @@ public class Chunk {
+@@ -625,6 +632,13 @@ public class Chunk {
entity.ac = k;
entity.ad = this.locZ;
this.entitySlices[k].add(entity);
@@ -45,7 +45,7 @@ index 08525d6..300d625 100644
// Spigot start - increment creature type count
// Keep this synced up with World.a(Class)
if (entity instanceof EntityInsentient) {
-@@ -687,6 +701,13 @@ public class Chunk {
+@@ -657,6 +671,13 @@ public class Chunk {
}
this.entitySlices[i].remove(entity);
@@ -59,7 +59,7 @@ index 08525d6..300d625 100644
// Spigot start - decrement creature type count
// Keep this synced up with World.a(Class)
if (entity instanceof EntityInsentient) {
-@@ -878,6 +899,15 @@ public class Chunk {
+@@ -848,6 +869,15 @@ public class Chunk {
if (!this.entitySlices[k].isEmpty()) {
Iterator iterator = this.entitySlices[k].iterator();
@@ -75,7 +75,7 @@ index 08525d6..300d625 100644
while (iterator.hasNext()) {
Entity entity1 = (Entity) iterator.next();
-@@ -910,7 +940,18 @@ public class Chunk {
+@@ -880,7 +910,18 @@ public class Chunk {
i = MathHelper.clamp(i, 0, this.entitySlices.length - 1);
j = MathHelper.clamp(j, 0, this.entitySlices.length - 1);
diff --git a/Spigot-Server-Patches/0067-Change-implementation-of-tile-entity-removal-list.patch b/Spigot-Server-Patches/0067-Change-implementation-of-tile-entity-removal-list.patch
index b94fe4f3ab..196d645264 100644
--- a/Spigot-Server-Patches/0067-Change-implementation-of-tile-entity-removal-list.patch
+++ b/Spigot-Server-Patches/0067-Change-implementation-of-tile-entity-removal-list.patch
@@ -1,4 +1,4 @@
-From 0457e6130e427aac532ba7ebae80b9e3a3350ef9 Mon Sep 17 00:00:00 2001
+From acf9844949fec83fbc827beef334a584b9b28f2e Mon Sep 17 00:00:00 2001
From: Joseph Hirschfeld <[email protected]>
Date: Thu, 3 Mar 2016 02:39:54 -0600
Subject: [PATCH] Change implementation of (tile)entity removal list
@@ -22,7 +22,7 @@ index 751e07d..c6fe888 100644
public boolean impulse;
public int portalCooldown;
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 5adc297..159934f 100644
+index b7f45b6..26352d2 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -31,6 +31,11 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
@@ -51,7 +51,7 @@ index 5adc297..159934f 100644
public final List<EntityHuman> players = Lists.newArrayList();
public final List<Entity> j = Lists.newArrayList();
protected final IntHashMap<Entity> entitiesById = new IntHashMap();
-@@ -1400,19 +1405,20 @@ public abstract class World implements IBlockAccess {
+@@ -1390,19 +1395,20 @@ public abstract class World implements IBlockAccess {
int j;
diff --git a/Spigot-Server-Patches/0071-Add-exception-reporting-event.patch b/Spigot-Server-Patches/0071-Add-exception-reporting-event.patch
index 589df126e6..38f2902440 100644
--- a/Spigot-Server-Patches/0071-Add-exception-reporting-event.patch
+++ b/Spigot-Server-Patches/0071-Add-exception-reporting-event.patch
@@ -1,4 +1,4 @@
-From 6716cfabe2cb44666f1c9fa5d7ccf68d95224f3c Mon Sep 17 00:00:00 2001
+From cc1f55cfececca4adcf18519f2b2fe2f6b2a3165 Mon Sep 17 00:00:00 2001
From: Joseph Hirschfeld <[email protected]>
Date: Thu, 3 Mar 2016 03:15:41 -0600
Subject: [PATCH] Add exception reporting event
@@ -50,7 +50,7 @@ index 0000000..9339718
+}
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 300d625..eb60455 100644
+index acce7cb..b39960a 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -1,5 +1,6 @@
@@ -68,7 +68,7 @@ index 300d625..eb60455 100644
public class Chunk {
-@@ -793,10 +795,15 @@ public class Chunk {
+@@ -763,10 +765,15 @@ public class Chunk {
this.tileEntities.remove(blockposition);
// Paper end
} else {
@@ -89,7 +89,7 @@ index 300d625..eb60455 100644
}
}
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
-index 20dccfb..32b71c6 100644
+index 50f0345..25a2720 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -11,6 +11,7 @@ import java.util.Iterator;
@@ -292,7 +292,7 @@ index 26d7d12..fcd2ddf 100644
}
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index e56f705..21ba235 100644
+index 26352d2..ccbfda0 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1,5 +1,7 @@
@@ -303,7 +303,7 @@ index e56f705..21ba235 100644
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.base.Predicate;
-@@ -1460,8 +1462,10 @@ public abstract class World implements IBlockAccess {
+@@ -1450,8 +1452,10 @@ public abstract class World implements IBlockAccess {
} catch (Throwable throwable1) {
entity.tickTimer.stopTiming();
// Paper start - Prevent tile entity and entity crashes
@@ -315,7 +315,7 @@ index e56f705..21ba235 100644
entity.dead = true;
continue;
// Paper end
-@@ -1525,8 +1529,10 @@ public abstract class World implements IBlockAccess {
+@@ -1515,8 +1519,10 @@ public abstract class World implements IBlockAccess {
this.methodProfiler.b();
} catch (Throwable throwable2) {
// Paper start - Prevent tile entity and entity crashes
diff --git a/Spigot-Server-Patches/0086-Add-World-Util-Methods.patch b/Spigot-Server-Patches/0086-Add-World-Util-Methods.patch
index 528f1785a3..58f1420629 100644
--- a/Spigot-Server-Patches/0086-Add-World-Util-Methods.patch
+++ b/Spigot-Server-Patches/0086-Add-World-Util-Methods.patch
@@ -1,4 +1,4 @@
-From a9bec1c0266a2ed770f99dd1288b88a71b997aba Mon Sep 17 00:00:00 2001
+From 2e5d3ab319b7c04911614a21e08c28144e9544f8 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Fri, 18 Mar 2016 20:16:03 -0400
Subject: [PATCH] Add World Util Methods
@@ -6,7 +6,7 @@ Subject: [PATCH] Add World Util Methods
Methods that can be used for other patches to help improve logic.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 21ba235..3bdf072 100644
+index ccbfda0..133d4e2 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -153,6 +153,12 @@ public abstract class World implements IBlockAccess {
@@ -22,7 +22,7 @@ index 21ba235..3bdf072 100644
public Chunk getChunkIfLoaded(int x, int z) {
return ((ChunkProviderServer) this.chunkProvider).getLoadedChunkAt(x, z);
}
-@@ -640,6 +646,41 @@ public abstract class World implements IBlockAccess {
+@@ -630,6 +636,41 @@ public abstract class World implements IBlockAccess {
}
}
@@ -64,7 +64,7 @@ index 21ba235..3bdf072 100644
public int getLightLevel(BlockPosition blockposition) {
return this.c(blockposition, true);
}
-@@ -755,6 +796,27 @@ public abstract class World implements IBlockAccess {
+@@ -745,6 +786,27 @@ public abstract class World implements IBlockAccess {
return this.worldProvider.n()[this.getLightLevel(blockposition)];
}
diff --git a/Spigot-Server-Patches/0100-Optimize-isValidLocation-for-inlining.patch b/Spigot-Server-Patches/0100-Optimize-isValidLocation-for-inlining.patch
index 280641c711..6624392650 100644
--- a/Spigot-Server-Patches/0100-Optimize-isValidLocation-for-inlining.patch
+++ b/Spigot-Server-Patches/0100-Optimize-isValidLocation-for-inlining.patch
@@ -1,4 +1,4 @@
-From 3a02b0e6f4d2149f1be45e802a51ecfae1fa7453 Mon Sep 17 00:00:00 2001
+From 00e5dc742dc2b80b9d43600cbe44b087c648c3d8 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Tue, 22 Mar 2016 23:41:34 -0400
Subject: [PATCH] Optimize isValidLocation for inlining
@@ -41,7 +41,7 @@ index 99fcf4c..be34dcd 100644
public MutableBlockPosition() {
this(0, 0, 0);
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 3bdf072..ecf3a38 100644
+index 133d4e2..718215c 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -274,8 +274,8 @@ public abstract class World implements IBlockAccess {
@@ -55,7 +55,7 @@ index 3bdf072..ecf3a38 100644
}
private boolean E(BlockPosition blockposition) {
-@@ -649,7 +649,7 @@ public abstract class World implements IBlockAccess {
+@@ -639,7 +639,7 @@ public abstract class World implements IBlockAccess {
// Paper start - test if meets light level, return faster
// logic copied from below
public boolean isLightLevel(BlockPosition blockposition, int level) {
@@ -64,7 +64,7 @@ index 3bdf072..ecf3a38 100644
if (this.getType(blockposition).f()) {
if (this.c(blockposition.up(), false) >= level) {
return true;
-@@ -763,7 +763,7 @@ public abstract class World implements IBlockAccess {
+@@ -753,7 +753,7 @@ public abstract class World implements IBlockAccess {
blockposition = new BlockPosition(blockposition.getX(), 0, blockposition.getZ());
}
@@ -73,7 +73,7 @@ index 3bdf072..ecf3a38 100644
return enumskyblock.c;
} else if (!this.isLoaded(blockposition)) {
return enumskyblock.c;
-@@ -775,7 +775,7 @@ public abstract class World implements IBlockAccess {
+@@ -765,7 +765,7 @@ public abstract class World implements IBlockAccess {
}
public void a(EnumSkyBlock enumskyblock, BlockPosition blockposition, int i) {
@@ -82,7 +82,7 @@ index 3bdf072..ecf3a38 100644
if (this.isLoaded(blockposition)) {
Chunk chunk = this.getChunkAtWorldCoords(blockposition);
-@@ -811,7 +811,7 @@ public abstract class World implements IBlockAccess {
+@@ -801,7 +801,7 @@ public abstract class World implements IBlockAccess {
// CraftBukkit end
Chunk chunk = this.getChunkIfLoaded(blockposition);
if (chunk != null) {
diff --git a/Spigot-Server-Patches/0106-Option-to-disable-BlockPhysicsEvent-for-Redstone.patch b/Spigot-Server-Patches/0106-Option-to-disable-BlockPhysicsEvent-for-Redstone.patch
index d27f33f136..d37a5f0dd6 100644
--- a/Spigot-Server-Patches/0106-Option-to-disable-BlockPhysicsEvent-for-Redstone.patch
+++ b/Spigot-Server-Patches/0106-Option-to-disable-BlockPhysicsEvent-for-Redstone.patch
@@ -1,4 +1,4 @@
-From 53ba2d46f33926f724bff3ae45dbc377821d51dd Mon Sep 17 00:00:00 2001
+From 2f625e1e83f3c8ea5a221e29dcf5b8321b9ee533 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Mon, 28 Mar 2016 19:55:45 -0400
Subject: [PATCH] Option to disable BlockPhysicsEvent for Redstone
@@ -25,10 +25,10 @@ index cdb1766..f689d69 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index ecf3a38..db70868 100644
+index 718215c..757ed3e 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -568,7 +568,7 @@ public abstract class World implements IBlockAccess {
+@@ -558,7 +558,7 @@ public abstract class World implements IBlockAccess {
try {
// CraftBukkit start
CraftWorld world = ((WorldServer) this).getWorld();
diff --git a/Spigot-Server-Patches/0107-Entity-AddTo-RemoveFrom-World-Events.patch b/Spigot-Server-Patches/0107-Entity-AddTo-RemoveFrom-World-Events.patch
index 76bc0541a7..5c16b2c52c 100644
--- a/Spigot-Server-Patches/0107-Entity-AddTo-RemoveFrom-World-Events.patch
+++ b/Spigot-Server-Patches/0107-Entity-AddTo-RemoveFrom-World-Events.patch
@@ -1,14 +1,14 @@
-From 42278206102e357936f9e7d8b7001160df905803 Mon Sep 17 00:00:00 2001
+From 6a7f3beb5deb1e84b02189832d3db4bc8fbc2161 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Mon, 28 Mar 2016 20:32:58 -0400
Subject: [PATCH] Entity AddTo/RemoveFrom World Events
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index db70868..830494c 100644
+index 757ed3e..095d4b2 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -1117,6 +1117,7 @@ public abstract class World implements IBlockAccess {
+@@ -1107,6 +1107,7 @@ public abstract class World implements IBlockAccess {
}
entity.valid = true; // CraftBukkit
@@ -16,7 +16,7 @@ index db70868..830494c 100644
}
protected void c(Entity entity) {
-@@ -1124,6 +1125,7 @@ public abstract class World implements IBlockAccess {
+@@ -1114,6 +1115,7 @@ public abstract class World implements IBlockAccess {
((IWorldAccess) this.u.get(i)).b(entity);
}
diff --git a/Spigot-Server-Patches/0108-Configurable-Chunk-Inhabited-Timer.patch b/Spigot-Server-Patches/0108-Configurable-Chunk-Inhabited-Timer.patch
index 5d77646738..2825c78fbc 100644
--- a/Spigot-Server-Patches/0108-Configurable-Chunk-Inhabited-Timer.patch
+++ b/Spigot-Server-Patches/0108-Configurable-Chunk-Inhabited-Timer.patch
@@ -1,4 +1,4 @@
-From c1e5076fcdd19903b706e7bb19c7a4ec80edea1a Mon Sep 17 00:00:00 2001
+From 6141cadba25a695101752faca997db05813c436b Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Mon, 28 Mar 2016 20:46:14 -0400
Subject: [PATCH] Configurable Chunk Inhabited Timer
@@ -23,10 +23,10 @@ index f689d69..6f77cfd 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 22e4728..f7452b3 100644
+index 98d9e99..7144227 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -1401,7 +1401,7 @@ public class Chunk {
+@@ -1371,7 +1371,7 @@ public class Chunk {
}
public long x() {
diff --git a/Spigot-Server-Patches/0114-Add-getEntity-by-UUID-API.patch b/Spigot-Server-Patches/0114-Add-getEntity-by-UUID-API.patch
index b8548b6af1..ef300bc325 100644
--- a/Spigot-Server-Patches/0114-Add-getEntity-by-UUID-API.patch
+++ b/Spigot-Server-Patches/0114-Add-getEntity-by-UUID-API.patch
@@ -1,14 +1,14 @@
-From b50ffe187045367a4cadb8abf7d4990bccc58038 Mon Sep 17 00:00:00 2001
+From 60d48a782502bf6c276124acfd412f18390a4ac7 Mon Sep 17 00:00:00 2001
From: DemonWav <[email protected]>
Date: Wed, 30 Mar 2016 01:20:11 -0500
Subject: [PATCH] Add getEntity by UUID API
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index f5e26df..8d8e415 100644
+index 3d2e0b6..842e364 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1626,4 +1626,20 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
+@@ -1593,4 +1593,20 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return (Bukkit.getServer() instanceof CraftServer) ? ((CraftServer) Bukkit.getServer()).getServer() : null;
}
// CraftBukkit end
diff --git a/Spigot-Server-Patches/0116-Do-not-load-chunks-for-light-checks.patch b/Spigot-Server-Patches/0116-Do-not-load-chunks-for-light-checks.patch
index 977c04b8a9..8677a2c059 100644
--- a/Spigot-Server-Patches/0116-Do-not-load-chunks-for-light-checks.patch
+++ b/Spigot-Server-Patches/0116-Do-not-load-chunks-for-light-checks.patch
@@ -1,4 +1,4 @@
-From d4c8600623227bb4ccc74a31b66b010e2d65ed3c Mon Sep 17 00:00:00 2001
+From c0da998748217fabcbbea1ae21ca614b18409710 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Thu, 31 Mar 2016 19:17:58 -0400
Subject: [PATCH] Do not load chunks for light checks
@@ -7,10 +7,10 @@ Should only happen for blocks on the edge that uses neighbors light level
(certain blocks). In that case, there will be 3-4 other neighbors to get a light level from.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 830494c..f25b6e0 100644
+index 095d4b2..5223785 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -717,6 +717,7 @@ public abstract class World implements IBlockAccess {
+@@ -707,6 +707,7 @@ public abstract class World implements IBlockAccess {
if (blockposition.getY() >= 256) {
blockposition = new BlockPosition(blockposition.getX(), 255, blockposition.getZ());
}
diff --git a/Spigot-Server-Patches/0120-Configurable-Keep-Spawn-Loaded-range-per-world.patch b/Spigot-Server-Patches/0120-Configurable-Keep-Spawn-Loaded-range-per-world.patch
index 7a6cc15b3e..67b88890ea 100644
--- a/Spigot-Server-Patches/0120-Configurable-Keep-Spawn-Loaded-range-per-world.patch
+++ b/Spigot-Server-Patches/0120-Configurable-Keep-Spawn-Loaded-range-per-world.patch
@@ -1,4 +1,4 @@
-From 4b59f933529474fa40301cad4efdfe5e59dbf849 Mon Sep 17 00:00:00 2001
+From e2c01a96c6d7748d416bc8b270f513d9bd96afef Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Sat, 13 Sep 2014 23:14:43 -0400
Subject: [PATCH] Configurable Keep Spawn Loaded range per world
@@ -21,10 +21,10 @@ index b2d74df..36f0087 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 8d8e415..02e8551 100644
+index 842e364..e1c0c0b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -359,8 +359,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
+@@ -353,8 +353,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
long j = av();
i = 0;
@@ -37,10 +37,10 @@ index 8d8e415..02e8551 100644
if (i1 - j > 1000L) {
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index f25b6e0..c19c112 100644
+index 5223785..7bfb735 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -3238,7 +3238,7 @@ public abstract class World implements IBlockAccess {
+@@ -3228,7 +3228,7 @@ public abstract class World implements IBlockAccess {
BlockPosition blockposition = this.getSpawn();
int k = i * 16 + 8 - blockposition.getX();
int l = j * 16 + 8 - blockposition.getZ();
diff --git a/Spigot-Server-Patches/0121-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch b/Spigot-Server-Patches/0121-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch
index d51532fdec..7c61bcdb41 100644
--- a/Spigot-Server-Patches/0121-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch
+++ b/Spigot-Server-Patches/0121-Fix-Cancelling-BlockPlaceEvent-triggering-physics.patch
@@ -1,14 +1,14 @@
-From fceddc67b91324c40ed6247fda6d0013ffae368c Mon Sep 17 00:00:00 2001
+From 0ca2c45f3293c21521e8ff3a5048cca7b53edf58 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Sun, 3 Apr 2016 17:48:50 -0400
Subject: [PATCH] Fix Cancelling BlockPlaceEvent triggering physics
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index c19c112..0d0db07 100644
+index 7bfb735..75b95b4 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -526,6 +526,7 @@ public abstract class World implements IBlockAccess {
+@@ -516,6 +516,7 @@ public abstract class World implements IBlockAccess {
}
public void applyPhysics(BlockPosition blockposition, Block block) {
diff --git a/Spigot-Server-Patches/0122-Don-t-spam-reload-spawn-chunks-in-nether-end.patch b/Spigot-Server-Patches/0122-Don-t-spam-reload-spawn-chunks-in-nether-end.patch
index c669f37a4f..eb50fe88af 100644
--- a/Spigot-Server-Patches/0122-Don-t-spam-reload-spawn-chunks-in-nether-end.patch
+++ b/Spigot-Server-Patches/0122-Don-t-spam-reload-spawn-chunks-in-nether-end.patch
@@ -1,14 +1,14 @@
-From f428b285b73ce11e85505b1cf9001aac34ce7ab7 Mon Sep 17 00:00:00 2001
+From ec07f804a484921eea0a5440f15c2ebe95ff7469 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Tue, 5 Apr 2016 19:42:22 -0400
Subject: [PATCH] Don't spam reload spawn chunks in nether/end
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 0d0db07..8f3adc5 100644
+index 75b95b4..91bbc75 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -3235,6 +3235,7 @@ public abstract class World implements IBlockAccess {
+@@ -3225,6 +3225,7 @@ public abstract class World implements IBlockAccess {
return this.N;
}
diff --git a/Spigot-Server-Patches/0127-Remove-unused-World-Tile-Entity-List.patch b/Spigot-Server-Patches/0127-Remove-unused-World-Tile-Entity-List.patch
index a7e2ff6d39..f868c25f42 100644
--- a/Spigot-Server-Patches/0127-Remove-unused-World-Tile-Entity-List.patch
+++ b/Spigot-Server-Patches/0127-Remove-unused-World-Tile-Entity-List.patch
@@ -1,4 +1,4 @@
-From 6ccec30f3b3880fc79844051e9e47796d1477967 Mon Sep 17 00:00:00 2001
+From 1afe6ec3716226403ae8fd91217c07d9c1342999 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Wed, 13 Apr 2016 00:25:28 -0400
Subject: [PATCH] Remove unused World Tile Entity List
@@ -6,7 +6,7 @@ Subject: [PATCH] Remove unused World Tile Entity List
Massive hit to performance and it is completely unnecessary.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 8f3adc5..0c20216 100644
+index 91bbc75..b3dd456 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -69,7 +69,7 @@ public abstract class World implements IBlockAccess {
@@ -18,7 +18,7 @@ index 8f3adc5..0c20216 100644
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
private final List<TileEntity> b = Lists.newArrayList();
private final Set<TileEntity> tileEntityListUnload = Sets.newHashSet(); // Paper
-@@ -1564,7 +1564,7 @@ public abstract class World implements IBlockAccess {
+@@ -1554,7 +1554,7 @@ public abstract class World implements IBlockAccess {
// CraftBukkit start - From below, clean up tile entities before ticking them
if (!this.tileEntityListUnload.isEmpty()) {
this.tileEntityListTick.removeAll(this.tileEntityListUnload);
@@ -27,7 +27,7 @@ index 8f3adc5..0c20216 100644
this.tileEntityListUnload.clear();
}
// CraftBukkit end
-@@ -1615,7 +1615,7 @@ public abstract class World implements IBlockAccess {
+@@ -1605,7 +1605,7 @@ public abstract class World implements IBlockAccess {
if (tileentity.x()) {
tilesThisCycle--;
this.tileEntityListTick.remove(tileTickPosition--);
@@ -36,7 +36,7 @@ index 8f3adc5..0c20216 100644
if (this.isLoaded(tileentity.getPosition())) {
this.getChunkAtWorldCoords(tileentity.getPosition()).d(tileentity.getPosition());
}
-@@ -1653,7 +1653,7 @@ public abstract class World implements IBlockAccess {
+@@ -1643,7 +1643,7 @@ public abstract class World implements IBlockAccess {
this.notify(tileentity1.getPosition(), iblockdata, iblockdata, 3);
// CraftBukkit start
// From above, don't screw this up - SPIGOT-1746
@@ -45,7 +45,7 @@ index 8f3adc5..0c20216 100644
this.a(tileentity1);
}
// CraftBukkit end
-@@ -1673,9 +1673,9 @@ public abstract class World implements IBlockAccess {
+@@ -1663,9 +1663,9 @@ public abstract class World implements IBlockAccess {
protected void l() {}
public boolean a(TileEntity tileentity) {
@@ -57,7 +57,7 @@ index 8f3adc5..0c20216 100644
this.tileEntityListTick.add(tileentity);
}
-@@ -2145,7 +2145,7 @@ public abstract class World implements IBlockAccess {
+@@ -2135,7 +2135,7 @@ public abstract class World implements IBlockAccess {
} else {
if (tileentity != null) {
this.b.remove(tileentity);
diff --git a/Spigot-Server-Patches/0133-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch b/Spigot-Server-Patches/0133-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch
index b2e596c4a7..d3a51ac542 100644
--- a/Spigot-Server-Patches/0133-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch
+++ b/Spigot-Server-Patches/0133-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch
@@ -1,4 +1,4 @@
-From 8b6deba310ca28fe576b153349c97cb9aaab5f65 Mon Sep 17 00:00:00 2001
+From 426c5a1d94eef4816e659f6384148abc4e849b26 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Thu, 14 Apr 2016 21:01:39 -0400
Subject: [PATCH] Fix Bugs with Spigot Mob Spawn Logic
@@ -14,10 +14,10 @@ Specially with servers using smaller mob spawn ranges than view distance, as wel
This patch returns mob counting to use all loaded chunks, and 17x17 division.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index f7452b3..773b153 100644
+index 7144227..b94cdad 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -704,7 +704,7 @@ public class Chunk {
+@@ -674,7 +674,7 @@ public class Chunk {
i = this.entitySlices.length - 1;
}
diff --git a/Spigot-Server-Patches/0142-Check-entity-count-additions-and-mark-entities-remov.patch b/Spigot-Server-Patches/0142-Check-entity-count-additions-and-mark-entities-remov.patch
index 26a1fb9059..a080e62317 100644
--- a/Spigot-Server-Patches/0142-Check-entity-count-additions-and-mark-entities-remov.patch
+++ b/Spigot-Server-Patches/0142-Check-entity-count-additions-and-mark-entities-remov.patch
@@ -1,14 +1,14 @@
-From f9b11fc494edca4b6c42d180fa214cac92fadcdf Mon Sep 17 00:00:00 2001
+From 96f6ebe5e1b8a63789ffffb307ef1cf856c434de Mon Sep 17 00:00:00 2001
From: Zach Brown <[email protected]>
Date: Fri, 22 Apr 2016 20:34:21 -0500
Subject: [PATCH] Check entity count additions and mark entities removed
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 773b153..4953e97 100644
+index b94cdad..904141a 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -661,12 +661,36 @@ public class Chunk {
+@@ -631,12 +631,36 @@ public class Chunk {
k = this.entitySlices.length - 1;
}
@@ -45,7 +45,7 @@ index 773b153..4953e97 100644
if (entity instanceof EntityItem) {
itemCounts[k]++;
} else if (entity instanceof IInventory) {
-@@ -711,6 +735,7 @@ public class Chunk {
+@@ -681,6 +705,7 @@ public class Chunk {
} else if (entity instanceof IInventory) {
inventoryEntityCounts[i]--;
}
@@ -54,10 +54,10 @@ index 773b153..4953e97 100644
// Spigot start - decrement creature type count
// Keep this synced up with World.a(Class)
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 0c20216..2e767e4 100644
+index b3dd456..5c3e075 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -1749,7 +1749,7 @@ public abstract class World implements IBlockAccess {
+@@ -1739,7 +1739,7 @@ public abstract class World implements IBlockAccess {
}
int k = MathHelper.floor(entity.locX / 16.0D);
diff --git a/Spigot-Server-Patches/0146-remove-null-possibility-for-getServer-singleton.patch b/Spigot-Server-Patches/0146-remove-null-possibility-for-getServer-singleton.patch
index 9040bdbf49..7dd1c080c2 100644
--- a/Spigot-Server-Patches/0146-remove-null-possibility-for-getServer-singleton.patch
+++ b/Spigot-Server-Patches/0146-remove-null-possibility-for-getServer-singleton.patch
@@ -1,4 +1,4 @@
-From 31e86975e071304b48ecb3c603ab1a4774e81720 Mon Sep 17 00:00:00 2001
+From 3b596ccedcfa761caa54a479c5aa43c6a3b5053c Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Thu, 28 Apr 2016 00:57:27 -0400
Subject: [PATCH] remove null possibility for getServer singleton
@@ -6,10 +6,10 @@ Subject: [PATCH] remove null possibility for getServer singleton
to stop IDE complaining about potential NPE
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 02e8551..3b04681 100644
+index e1c0c0b..ec9f037 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -59,6 +59,7 @@ import java.util.Queue;
+@@ -54,6 +54,7 @@ import co.aikar.timings.MinecraftTimings; // Paper
public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics {
@@ -17,7 +17,7 @@ index 02e8551..3b04681 100644
public static final Logger LOGGER = LogManager.getLogger();
public static final File a = new File("usercache.json");
public Convertable convertable;
-@@ -127,6 +128,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
+@@ -121,6 +122,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
// CraftBukkit end
public MinecraftServer(OptionSet options, Proxy proxy, DataConverterManager dataconvertermanager, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache) {
@@ -25,7 +25,7 @@ index 02e8551..3b04681 100644
io.netty.util.ResourceLeakDetector.setEnabled( false ); // Spigot - disable
this.e = proxy;
this.U = yggdrasilauthenticationservice;
-@@ -1624,7 +1626,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
+@@ -1591,7 +1593,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
// CraftBukkit start
@Deprecated
public static MinecraftServer getServer() {
diff --git a/Spigot-Server-Patches/0147-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch b/Spigot-Server-Patches/0147-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch
index 742b3470b3..1ca96a7314 100644
--- a/Spigot-Server-Patches/0147-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch
+++ b/Spigot-Server-Patches/0147-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch
@@ -1,4 +1,4 @@
-From 8e9e6eadd852b2360b4be33223a402533f0f1fe6 Mon Sep 17 00:00:00 2001
+From d0e77b7d023cdba51d177126f4592d26da939ee1 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Fri, 29 Apr 2016 20:02:00 -0400
Subject: [PATCH] Improve Maps (in item frames) performance and bug fixes
@@ -48,10 +48,10 @@ index 6c8da79..38e88d8 100644
Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index 2e767e4..741850e 100644
+index 5c3e075..0f1ee49 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
-@@ -1154,6 +1154,7 @@ public abstract class World implements IBlockAccess {
+@@ -1144,6 +1144,7 @@ public abstract class World implements IBlockAccess {
{
if ( iter.next().trackee == entity )
{
diff --git a/Spigot-Server-Patches/0152-Do-not-mark-chunks-as-active-for-neighbor-updates.patch b/Spigot-Server-Patches/0152-Do-not-mark-chunks-as-active-for-neighbor-updates.patch
index 454035800a..da03862131 100644
--- a/Spigot-Server-Patches/0152-Do-not-mark-chunks-as-active-for-neighbor-updates.patch
+++ b/Spigot-Server-Patches/0152-Do-not-mark-chunks-as-active-for-neighbor-updates.patch
@@ -1,4 +1,4 @@
-From 82bf7c14dccf3f1c88c4760a2edf709c542358fb Mon Sep 17 00:00:00 2001
+From 2746640f12a29c656745e7ea06b1f2ddd9817fb8 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Thu, 12 May 2016 01:55:17 -0400
Subject: [PATCH] Do not mark chunks as active for neighbor updates
@@ -6,10 +6,10 @@ Subject: [PATCH] Do not mark chunks as active for neighbor updates
Fixes chunk unload issues
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 1e172b8..90eba27 100644
+index 904141a..d7b9581 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -1021,25 +1021,25 @@ public class Chunk {
+@@ -991,25 +991,25 @@ public class Chunk {
public void loadNearby(IChunkProvider ichunkprovider, ChunkGenerator chunkgenerator) {
world.timings.syncChunkLoadPostTimer.startTiming(); // Spigot
@@ -44,7 +44,7 @@ index 1e172b8..90eba27 100644
if (chunk4 != null) {
chunk4.a(chunkgenerator);
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
-index 8ee8e80..1bc001d 100644
+index 3cf2d8b..c2c6d3a 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -197,7 +197,7 @@ public class ChunkProviderServer implements IChunkProvider {
diff --git a/Spigot-Server-Patches/0153-Unmark-chunk-as-unloading-when-unload-is-cancelled.patch b/Spigot-Server-Patches/0153-Unmark-chunk-as-unloading-when-unload-is-cancelled.patch
index 0b2d63bd36..01534369f7 100644
--- a/Spigot-Server-Patches/0153-Unmark-chunk-as-unloading-when-unload-is-cancelled.patch
+++ b/Spigot-Server-Patches/0153-Unmark-chunk-as-unloading-when-unload-is-cancelled.patch
@@ -1,24 +1,24 @@
-From e5bd49a93687c1a4aed20c45b62283540017f6a0 Mon Sep 17 00:00:00 2001
+From 5a965808414b88283da8dc7aa36f9dcb6090311f Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Thu, 12 May 2016 02:03:56 -0400
Subject: [PATCH] Unmark chunk as unloading when unload is cancelled
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 1e172b8..f72b1f8 100644
+index d7b9581..40d4c9c 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -46,7 +46,7 @@ public class Chunk {
+@@ -47,7 +47,7 @@ public class Chunk {
private long w;
private int x;
private ConcurrentLinkedQueue<BlockPosition> y;
- public boolean d;
+ public boolean d;public void setShouldUnload(boolean unload) { this.d = unload; } // Paper // OBFHELPER
protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot
- public int lightUpdates; // Paper - Number of queued light updates for this chunk
+ // Paper start
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
-index 1bc001d..7820ad9 100644
+index c2c6d3a..7427e6e 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -303,6 +303,7 @@ public class ChunkProviderServer implements IChunkProvider {
@@ -26,9 +26,9 @@ index 1bc001d..7820ad9 100644
if (chunk != null && chunk.d) {
+ chunk.setShouldUnload(false); // Paper
- if (chunk.hasLightUpdates()) continue; // Paper - Don't unload chunks with pending light updates.
// CraftBukkit start
ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk);
+ this.world.getServer().getPluginManager().callEvent(event);
--
2.8.2