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 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 y; - public boolean d; - protected gnu.trove.map.hash.TObjectIntHashMap entityCount = new gnu.trove.map.hash.TObjectIntHashMap(); // 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 tileEntities; + public final List[] 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 { +diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java +index de85bd5..50f0345 100644 +--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java ++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +@@ -275,6 +275,7 @@ public class ChunkProviderServer implements IChunkProvider { + if (event.isCancelled()) { + continue; + } ++ chunk.lightingQueue.processUnload(); // Paper - private EnumTileEntityState() {} + // 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..89a40a8 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -706,7 +706,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + + 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 + + ++this.ticks; + if (this.S) { +@@ -766,6 +766,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + this.methodProfiler.b(); + + 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; + -+ // Paper start -+ public boolean hasLightUpdates() { -+ if (world.paperConfig.queueLightUpdates) { -+ if (lightUpdates > 0) { -+ return true; ++import co.aikar.timings.Timing; ++import java.util.ArrayDeque; ++ ++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 (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)) { ++ for (Chunk chunk : ((WorldServer) world).getChunkProviderServer().chunks.values()) { ++ if (chunk.lightingQueue.processQueue(startTime, maxTickTime)) { ++ break START; ++ } ++ } ++ } ++ } ++ ++ static class LightingQueue extends ArrayDeque { ++ final private Chunk chunk; ++ ++ LightingQueue(Chunk chunk) { ++ super(); ++ this.chunk = chunk; ++ } ++ ++ @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 chunk = MCUtil.getLoadedChunkWithoutMarkingActive(world, x, z); -+ if (chunk != null && chunk.lightUpdates > 0) { -+ return true; ++ Chunk neighbor = MCUtil.getLoadedChunkWithoutMarkingActive(chunk.world, x, z); ++ if (neighbor != null) { ++ neighbor.lightingQueue.processQueue(0, 0); // No timeout + } + } + } + } -+ -+ 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 ---- 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); - - 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); -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ebf6c48..fcc1214 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 - -+// 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 processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); - public int autosavePeriod; -+ public final Queue lightingQueue = new LinkedList(); // Paper - Queued light updates - // CraftBukkit end - - 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.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; -+ } -+ -+ cachedTime = currentTime; -+ maxTickTime = Math.max(0, (int) (maxTickTimeCap - (currentTime - startTime))); -+ } -+ } -+ -+ MinecraftTimings.lightingQueueTimer.stopTiming(); -+ } -+ // Paper end -+ - org.spigotmc.WatchdogThread.tick(); // Spigot - co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper - } ++} 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 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 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 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 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 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 entityCount = new gnu.trove.map.hash.TObjectIntHashMap(); // 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 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 players = Lists.newArrayList(); public final List j = Lists.newArrayList(); protected final IntHashMap 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 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 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 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 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 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 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 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 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 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 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 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 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 tileEntityListTick = Lists.newArrayList(); private final List b = Lists.newArrayList(); private final Set 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 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 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 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 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 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 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 y; - public boolean d; + public boolean d;public void setShouldUnload(boolean unload) { this.d = unload; } // Paper // OBFHELPER protected gnu.trove.map.hash.TObjectIntHashMap entityCount = new gnu.trove.map.hash.TObjectIntHashMap(); // 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