diff --git a/Spigot-Server-Patches/0006-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch b/Spigot-Server-Patches/0006-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch index 4310e716a6..91fcba17e5 100644 --- a/Spigot-Server-Patches/0006-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch +++ b/Spigot-Server-Patches/0006-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch @@ -1,4 +1,4 @@ -From 8613a4e2ae9a4bb6faef75b90d69728a88692dc1 Mon Sep 17 00:00:00 2001 +From ada548d469ddfd07d7ee05b4473b46eafbe104e0 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 4 Jul 2018 02:10:36 -0400 Subject: [PATCH] Store reference to current Chunk for Entity and Block @@ -8,7 +8,7 @@ This enables us a fast reference to the entities current chunk instead of having to look it up by hashmap lookups. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 4bbebb25a..68008fe6a 100644 +index 4bbebb25a..ea167a17b 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -25,7 +25,7 @@ public class Chunk { @@ -60,26 +60,26 @@ index 4bbebb25a..68008fe6a 100644 this.x = 4096; this.y = Queues.newConcurrentLinkedQueue(); this.entitySlices = (List[]) (new List[16]); // Spigot -@@ -624,6 +648,9 @@ public class Chunk { - this.entityCount.adjustOrPutValue( creatureType.a(), 1, 1 ); - } - } +@@ -609,6 +633,9 @@ public class Chunk { + entity.ac = k; + entity.ad = this.locZ; + this.entitySlices[k].add(entity); + // Paper start + entity.setCurrentChunk(this); + // Paper end - // Spigot end - } - -@@ -656,6 +683,9 @@ public class Chunk { - this.entityCount.adjustValue( creatureType.a(), -1 ); - } + // Spigot start - increment creature type count + // Keep this synced up with World.a(Class) + if (entity instanceof EntityInsentient) { +@@ -641,6 +668,9 @@ public class Chunk { } + + this.entitySlices[i].remove(entity); + // Paper start + entity.setCurrentChunk(null); + // Paper end - // Spigot end - } - + // Spigot start - decrement creature type count + // Keep this synced up with World.a(Class) + if (entity instanceof EntityInsentient) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index 3a8902bf1..4af566b36 100644 --- a/src/main/java/net/minecraft/server/Entity.java diff --git a/Spigot-Server-Patches/0007-Store-counts-for-each-Entity-Block-Entity-Type.patch b/Spigot-Server-Patches/0007-Store-counts-for-each-Entity-Block-Entity-Type.patch index 56f8ca0add..b4baff8d03 100644 --- a/Spigot-Server-Patches/0007-Store-counts-for-each-Entity-Block-Entity-Type.patch +++ b/Spigot-Server-Patches/0007-Store-counts-for-each-Entity-Block-Entity-Type.patch @@ -1,4 +1,4 @@ -From 9638089fa0dcff84f21fc77d17a984b430eb3423 Mon Sep 17 00:00:00 2001 +From 20c6d16a7db36e57bde2a9bac4e5bb99d606239a Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 4 Jul 2018 02:13:59 -0400 Subject: [PATCH] Store counts for each Entity/Block Entity Type @@ -6,7 +6,7 @@ Subject: [PATCH] Store counts for each Entity/Block Entity Type Opens door for future patches to optimize performance diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index b40e60942..952c96c0c 100644 +index ea167a17b..77fdb3c4a 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -34,15 +34,19 @@ public class Chunk { @@ -37,22 +37,22 @@ index b40e60942..952c96c0c 100644 } return removed; } -@@ -650,6 +655,7 @@ public class Chunk { - } +@@ -635,6 +640,7 @@ public class Chunk { + this.entitySlices[k].add(entity); // Paper start entity.setCurrentChunk(this); + entityCounts.increment(entity.entityKeyString); // Paper end - // Spigot end - } -@@ -685,6 +691,7 @@ public class Chunk { - } + // Spigot start - increment creature type count + // Keep this synced up with World.a(Class) +@@ -670,6 +676,7 @@ public class Chunk { + this.entitySlices[i].remove(entity); // Paper start entity.setCurrentChunk(null); + entityCounts.decrement(entity.entityKeyString); // Paper end - // Spigot end - } + // Spigot start - decrement creature type count + // Keep this synced up with World.a(Class) -- 2.18.0 diff --git a/Spigot-Server-Patches/0054-Avoid-hopper-searches-if-there-are-no-items.patch b/Spigot-Server-Patches/0054-Avoid-hopper-searches-if-there-are-no-items.patch index 4e79988fa1..82abcabb3e 100644 --- a/Spigot-Server-Patches/0054-Avoid-hopper-searches-if-there-are-no-items.patch +++ b/Spigot-Server-Patches/0054-Avoid-hopper-searches-if-there-are-no-items.patch @@ -1,4 +1,4 @@ -From 04eb0a217ec431985499b59ceb505a2047a3173c Mon Sep 17 00:00:00 2001 +From 8878c3563aa9f2217bd4ea486aa52ee394b69f01 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,7 +14,7 @@ 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 aaf253c89..a5db14343 100644 +index d6f6cfef2..08d6ef09a 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -76,6 +76,13 @@ public class Chunk { @@ -31,35 +31,31 @@ index aaf253c89..a5db14343 100644 // CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking private int neighbors = 0x1 << 12; public long chunkKey; -@@ -648,6 +655,13 @@ public class Chunk { - entity.ac = k; - entity.ad = this.locZ; - this.entitySlices[k].add(entity); -+ // Paper start - update count +@@ -651,6 +658,11 @@ public class Chunk { + // Paper start + entity.setCurrentChunk(this); + entityCounts.increment(entity.entityKeyString); + if (entity instanceof EntityItem) { + itemCounts[k]++; + } else if (entity instanceof IInventory) { + inventoryEntityCounts[k]++; + } -+ // Paper end + // Paper end // Spigot start - increment creature type count // Keep this synced up with World.a(Class) - if (entity instanceof EntityInsentient) { -@@ -684,6 +698,13 @@ public class Chunk { - } - - this.entitySlices[i].remove(entity); -+ // Paper start - update counts +@@ -687,6 +699,11 @@ public class Chunk { + // Paper start + entity.setCurrentChunk(null); + entityCounts.decrement(entity.entityKeyString); + if (entity instanceof EntityItem) { + itemCounts[i]--; + } else if (entity instanceof IInventory) { + inventoryEntityCounts[i]--; + } -+ // Paper end + // Paper end // Spigot start - decrement creature type count // Keep this synced up with World.a(Class) - if (entity instanceof EntityInsentient) { -@@ -879,6 +900,15 @@ public class Chunk { +@@ -879,6 +896,15 @@ public class Chunk { if (!this.entitySlices[k].isEmpty()) { Iterator iterator = this.entitySlices[k].iterator(); @@ -75,7 +71,7 @@ index aaf253c89..a5db14343 100644 while (iterator.hasNext()) { Entity entity1 = (Entity) iterator.next(); -@@ -915,7 +945,18 @@ public class Chunk { +@@ -915,7 +941,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/0063-Add-exception-reporting-event.patch b/Spigot-Server-Patches/0063-Add-exception-reporting-event.patch index d82dfd5392..4175c32b2f 100644 --- a/Spigot-Server-Patches/0063-Add-exception-reporting-event.patch +++ b/Spigot-Server-Patches/0063-Add-exception-reporting-event.patch @@ -1,4 +1,4 @@ -From fa5787eee0ee62491653acc9fd911e0e3f9134c0 Mon Sep 17 00:00:00 2001 +From 6ceadeb266a7fc9a4a41c7819ce49ec3e034b39c 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 000000000..93397188b +} \ 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 a5db14343..0788f7712 100644 +index 08d6ef09a..d5ef4ed0e 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 a5db14343..0788f7712 100644 public class Chunk { -@@ -795,10 +797,15 @@ public class Chunk { +@@ -791,10 +793,15 @@ public class Chunk { this.tileEntities.remove(blockposition); // Paper end } else { diff --git a/Spigot-Server-Patches/0095-Configurable-Chunk-Inhabited-Timer.patch b/Spigot-Server-Patches/0095-Configurable-Chunk-Inhabited-Timer.patch index dc2f83a0f6..2823279d8e 100644 --- a/Spigot-Server-Patches/0095-Configurable-Chunk-Inhabited-Timer.patch +++ b/Spigot-Server-Patches/0095-Configurable-Chunk-Inhabited-Timer.patch @@ -1,4 +1,4 @@ -From e2eb0375f3b5fa6b9d074ee6d8551732eb8e37a7 Mon Sep 17 00:00:00 2001 +From b0b7b1aef28c4017f37927c00042e87384f5a9bc 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 e634c3afd..54f23ea75 100644 + } } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index bf3b64e37..6b13e1d7d 100644 +index d84cc9843..da7b59434 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -1445,7 +1445,7 @@ public class Chunk { +@@ -1441,7 +1441,7 @@ public class Chunk { } public long x() { diff --git a/Spigot-Server-Patches/0116-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch b/Spigot-Server-Patches/0116-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch index adaf07efa0..2cf4d21aab 100644 --- a/Spigot-Server-Patches/0116-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch +++ b/Spigot-Server-Patches/0116-Fix-Bugs-with-Spigot-Mob-Spawn-Logic.patch @@ -1,4 +1,4 @@ -From 868e6d9441457ad084678875f8c583f27d306916 Mon Sep 17 00:00:00 2001 +From f7b327727e2ac3ad221592ae2b97c64d9297c702 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,18 +14,19 @@ 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 e07ef14ed..aca1457b0 100644 +index da7b59434..1157bc7eb 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -716,7 +716,7 @@ public class Chunk { +@@ -714,8 +714,8 @@ public class Chunk { i = this.entitySlices.length - 1; } - this.entitySlices[i].remove(entity); -+ if (!this.entitySlices[i].remove(entity)) { return; } // Paper - // Paper start - update counts + // Paper start ++ if (!this.entitySlices[i].remove(entity)) { return; } + entity.setCurrentChunk(null); + entityCounts.decrement(entity.entityKeyString); if (entity instanceof EntityItem) { - itemCounts[i]--; diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java index 45a83ae99..ed22607d9 100644 --- a/src/main/java/net/minecraft/server/SpawnerCreature.java diff --git a/Spigot-Server-Patches/0130-Do-not-mark-chunks-as-active-for-neighbor-updates.patch b/Spigot-Server-Patches/0130-Do-not-mark-chunks-as-active-for-neighbor-updates.patch index a10fc9b891..62d51a7a96 100644 --- a/Spigot-Server-Patches/0130-Do-not-mark-chunks-as-active-for-neighbor-updates.patch +++ b/Spigot-Server-Patches/0130-Do-not-mark-chunks-as-active-for-neighbor-updates.patch @@ -1,4 +1,4 @@ -From b61b569f426f29ca36a9b769f868e62d552645ec Mon Sep 17 00:00:00 2001 +From 6a04d822bcaed5049e8c100649a084511ddf364b 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 1e78fc625..ba3ee64f8 100644 +index 1157bc7eb..f3f4b7fe5 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -1044,25 +1044,25 @@ public class Chunk { +@@ -1040,25 +1040,25 @@ public class Chunk { // CraftBukkit end world.timings.syncChunkLoadPostTimer.stopTiming(); // Paper world.timings.syncChunkLoadPopulateNeighbors.startTiming(); // Paper diff --git a/Spigot-Server-Patches/0156-Auto-Save-Improvements.patch b/Spigot-Server-Patches/0156-Auto-Save-Improvements.patch index a3866f2b8b..80e079e92b 100644 --- a/Spigot-Server-Patches/0156-Auto-Save-Improvements.patch +++ b/Spigot-Server-Patches/0156-Auto-Save-Improvements.patch @@ -1,4 +1,4 @@ -From 3116c6b8cd13ddce911fcb81a43a7a8b6696bd67 Mon Sep 17 00:00:00 2001 +From d8b347ac8d0edf9680b00ec72d12945dea811afb Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 19 Sep 2016 23:16:39 -0400 Subject: [PATCH] Auto Save Improvements @@ -64,10 +64,10 @@ index 1b9eb7f45..ce848d63e 100644 + } } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index cc9c8b2e0..a59f5b190 100644 +index 62767a383..798522fa7 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -1000,11 +1000,9 @@ public class Chunk { +@@ -996,11 +996,9 @@ public class Chunk { if (this.t && this.world.getTime() != this.lastSaved || this.s) { return true; } diff --git a/Spigot-Server-Patches/0162-Option-to-remove-corrupt-tile-entities.patch b/Spigot-Server-Patches/0162-Option-to-remove-corrupt-tile-entities.patch index 9621de5a07..e22a6695cf 100644 --- a/Spigot-Server-Patches/0162-Option-to-remove-corrupt-tile-entities.patch +++ b/Spigot-Server-Patches/0162-Option-to-remove-corrupt-tile-entities.patch @@ -1,4 +1,4 @@ -From 5b908630761c4e62419ce38535eaa3b715c34675 Mon Sep 17 00:00:00 2001 +From da23bbc651183f13e725c4a1c85043f06b3164c1 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Wed, 5 Oct 2016 16:27:36 -0500 Subject: [PATCH] Option to remove corrupt tile entities @@ -19,10 +19,10 @@ index ce848d63e..93b0af036 100644 + } } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index a59f5b190..27a36b2b0 100644 +index 798522fa7..ee6c6af94 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -823,11 +823,18 @@ public class Chunk { +@@ -819,11 +819,18 @@ public class Chunk { "Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16)); e.printStackTrace(); ServerInternalException.reportInternalException(e); diff --git a/Spigot-Server-Patches/0254-Don-t-blindly-send-unlit-chunks-when-lighting-update.patch b/Spigot-Server-Patches/0254-Don-t-blindly-send-unlit-chunks-when-lighting-update.patch index 82f9cb5660..03a266da9b 100644 --- a/Spigot-Server-Patches/0254-Don-t-blindly-send-unlit-chunks-when-lighting-update.patch +++ b/Spigot-Server-Patches/0254-Don-t-blindly-send-unlit-chunks-when-lighting-update.patch @@ -1,4 +1,4 @@ -From dd48bbfe6038596192469c818bb31f0a29d71646 Mon Sep 17 00:00:00 2001 +From 308db0274f868def0d98c712102ba50e26a35685 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Mon, 18 Dec 2017 07:26:56 +0000 Subject: [PATCH] Don't blindly send unlit chunks when lighting updates are @@ -18,7 +18,7 @@ only send chunks which are actually ready to be sent, otherwise, we will always send chunks. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index cb33cf902..87d0d426f 100644 +index 9c88effef..51e7a4ad8 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -68,7 +68,7 @@ public class Chunk { @@ -30,7 +30,7 @@ index cb33cf902..87d0d426f 100644 private boolean s; private boolean t; private long lastSaved; -@@ -1174,7 +1174,11 @@ public class Chunk { +@@ -1170,7 +1170,11 @@ public class Chunk { * We cannot unfortunately do this lighting stage during chunk gen as it appears to put a lot more noticeable load on the server, than when it is done at play time. * For now at least we will simply send all chunks, in accordance with pre 1.7 behaviour. */ diff --git a/Spigot-Server-Patches/0325-InventoryCloseEvent-Reason-API.patch b/Spigot-Server-Patches/0325-InventoryCloseEvent-Reason-API.patch index 170ece7b5d..c07f8947dd 100644 --- a/Spigot-Server-Patches/0325-InventoryCloseEvent-Reason-API.patch +++ b/Spigot-Server-Patches/0325-InventoryCloseEvent-Reason-API.patch @@ -1,4 +1,4 @@ -From c5d1182aa2daec8a3627d2295b105756845013b7 Mon Sep 17 00:00:00 2001 +From 7a60efbad7a444b9c728712d98b5d628c0c3206f Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 3 Jul 2018 21:56:23 -0400 Subject: [PATCH] InventoryCloseEvent Reason API @@ -7,10 +7,10 @@ Allows you to determine why an inventory was closed, enabling plugin developers to "confirm" things based on if it was player triggered close or not. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 8c96e7318..3e80825f7 100644 +index 51e7a4ad8..81bf60efa 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -873,7 +873,7 @@ public class Chunk { +@@ -869,7 +869,7 @@ public class Chunk { { if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity ) { @@ -19,7 +19,7 @@ index 8c96e7318..3e80825f7 100644 } } } -@@ -898,7 +898,7 @@ public class Chunk { +@@ -894,7 +894,7 @@ public class Chunk { { if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity ) { diff --git a/Spigot-Server-Patches/0326-Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch b/Spigot-Server-Patches/0326-Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch index 1bf454c181..3fcada57a3 100644 --- a/Spigot-Server-Patches/0326-Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch +++ b/Spigot-Server-Patches/0326-Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch @@ -1,4 +1,4 @@ -From 855c50b43725ac1167d2735d0d0b0b60de73499f Mon Sep 17 00:00:00 2001 +From dbe49167504d8c10b0dd8fbd271f186cf752057e Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 4 Jul 2018 03:39:51 -0400 Subject: [PATCH] Avoid Chunk Lookups for Entity/TileEntity Current Chunk @@ -10,10 +10,10 @@ to the object directly on the Entity/TileEntity object we can directly grab. Use that local value instead to reduce lookups in many hot places. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 3e80825f7..4a94fd5a6 100644 +index 81bf60efa..04adf4e3c 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -704,6 +704,7 @@ public class Chunk { +@@ -702,6 +702,7 @@ public class Chunk { // Spigot end }