From e65858c78a75079c9bd4cc48903e31db2c0570c6 Mon Sep 17 00:00:00 2001 From: ishland Date: Sun, 20 Sep 2020 19:55:56 +0300 Subject: [PATCH 1/4] Improve async task handler (#203) --- PATCHES.md | 1 + .../0051-Improve-async-task-handler.patch | 82 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 patches/server/0051-Improve-async-task-handler.patch diff --git a/PATCHES.md b/PATCHES.md index 7c578177..6d503cff 100644 --- a/PATCHES.md +++ b/PATCHES.md @@ -65,6 +65,7 @@ # Patches | server | Implement bed explosion options | William Blake Galbreath | | | server | Implement respawn anchor explosion options | William Blake Galbreath | | | server | Improve Hopper Performance | Aikar | | +| server | Improve async task handler | ishland | | | server | Item stuck sleep config | tr7zw | | | api | Kill AnnotationTest | tr7zw | | | server | Lagging threshold | William Blake Galbreath | | diff --git a/patches/server/0051-Improve-async-task-handler.patch b/patches/server/0051-Improve-async-task-handler.patch new file mode 100644 index 00000000..ebb87309 --- /dev/null +++ b/patches/server/0051-Improve-async-task-handler.patch @@ -0,0 +1,82 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: ishland +Date: Sun, 20 Sep 2020 19:43:03 +0300 +Subject: [PATCH] Improve async task handler + +Replace ConcurrentLinkedQueue and LockSupport hacks to reduce execute times + +diff --git a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java +index 5df6be7e8d9b1295ed0700b3be90c3778fc7d77c..95aec7d4705a7a275fe7f5d6aec877dd7ad0f529 100644 +--- a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java ++++ b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java +@@ -13,8 +13,9 @@ public abstract class IAsyncTaskHandler implements Mailbox d = Queues.newConcurrentLinkedQueue(); ++ private final java.util.concurrent.LinkedBlockingDeque d = new java.util.concurrent.LinkedBlockingDeque<>(); // Yatopia + private int e; ++ private R next = null; // Yatopia + + protected IAsyncTaskHandler(String s) { + this.b = s; +@@ -79,7 +80,7 @@ public abstract class IAsyncTaskHandler implements Mailbox implements Mailbox public ++ /* // Yatopia start - replaced logic + while (this.executeNext()) { + ; + } ++ */ ++ while (!d.isEmpty()) { ++ if (next == null) queuePull(); ++ if (!executeNext()) break; ++ } ++ // Yatopia end + + } + + protected boolean executeNext() { +- R r0 = this.d.peek(); // Paper - decompile fix ++ R r0 = next; // Paper - decompile fix // Yatopia - temp storage ++ if (next == null || !d.isEmpty()) queuePull(); // Yatopia - attempt to get from queue + + if (r0 == null) { + return false; + } else if (this.e == 0 && !this.canExecute(r0)) { + return false; + } else { +- this.executeTask(this.d.remove()); // Paper - decompile fix ++ this.executeTask(r0); // Paper - decompile fix // Yatopia - replaced with r0 ++ next = null; // Yatopia - clear temp for next task + return true; + } + } +@@ -126,9 +136,17 @@ public abstract class IAsyncTaskHandler implements Mailbox Date: Sun, 20 Sep 2020 21:45:23 +0300 Subject: [PATCH 2/4] Updated Upstream and Sidestream(s) (Tuinity/Purpur/Rainforest) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Tuinity Changes: 76777f0 Updated Upstream (Paper) 6465aba Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.3 ba4dbb6 Do not allow ticket level changes while unloading playerchunks e0e7144 Aggressive state checking in region manager Purpur Changes: 0743d38 PaperPR - Add hex color code support for console logging 081f5a7 Oopsie, lets fix these snowballs :3 4895a88 Improve output of plugins command 3424c40 Minor changes to projectile despawn rate patch 9d49a31 Updated Upstream (Paper) 09e0103 add snowball to despawn rate config Rainforest Changes: 5a187d6 Update to 1.16.3. --- PATCHES.md | 3 +- Purpur | 2 +- Rainforest | 2 +- Tuinity | 2 +- .../server/0001-Yatopia-Server-Fixes.patch | 177 +++++++++--------- ...0021-Optimize-TileEntity-load-unload.patch | 2 +- .../0027-Fix-lead-fall-dmg-config.patch | 4 +- ...Optimize-player-loops-around-weather.patch | 2 +- .../0031-Add-timings-for-Pathfinder.patch | 2 +- ...0034-lithium-collision-optimizations.patch | 18 +- ...the-chunk-that-you-re-teleporting-to.patch | 2 +- .../0040-Nuke-streams-off-BlockPosition.patch | 4 +- ...Fix-LightEngineThreaded-memory-leak.patch} | 6 +- .../server/0045-Give-them-items-motion.patch | 19 -- ...espect-PlayerKickEvent-leaveMessage.patch} | 0 ...0047-Shutdown-Bootstrap-thread-pool.patch} | 28 +-- ...rs.patch => 0048-Optimize-Villagers.patch} | 0 ...upe.patch => 0049-Fix-villager-dupe.patch} | 0 ... => 0050-Improve-async-task-handler.patch} | 0 19 files changed, 124 insertions(+), 149 deletions(-) rename patches/server/{0046-Fix-LightEngineThreaded-memory-leak.patch => 0045-Fix-LightEngineThreaded-memory-leak.patch} (83%) delete mode 100644 patches/server/0045-Give-them-items-motion.patch rename patches/server/{0047-Respect-PlayerKickEvent-leaveMessage.patch => 0046-Respect-PlayerKickEvent-leaveMessage.patch} (100%) rename patches/server/{0048-Nuke-Bootstrap-thread-pool.patch => 0047-Shutdown-Bootstrap-thread-pool.patch} (66%) rename patches/server/{0049-Optimize-Villagers.patch => 0048-Optimize-Villagers.patch} (100%) rename patches/server/{0050-Fix-villager-dupe.patch => 0049-Fix-villager-dupe.patch} (100%) rename patches/server/{0051-Improve-async-task-handler.patch => 0050-Improve-async-task-handler.patch} (100%) diff --git a/PATCHES.md b/PATCHES.md index 6d503cff..6bb45f14 100644 --- a/PATCHES.md +++ b/PATCHES.md @@ -57,7 +57,6 @@ # Patches | server | Fix the dead lagging the server | William Blake Galbreath | | | server | Fix villager dupe | Ivan Pekov | | | server | Giants AI settings | William Blake Galbreath | | -| server | Give them items motion | Ivan Pekov | | | server | Global Eula file | tr7zw | | | server | Heavily optimize furnance fuel and recipe lookups | tr7zw | | | server | Highly optimize VillagePlace filtering | Ivan Pekov | | @@ -76,7 +75,6 @@ # Patches | api | Modify POM | tr7zw | | | server | Modify POM | tr7zw | | | server | Modify default configs | tr7zw | | -| server | Nuke Bootstrap thread pool | foss-mc | Ivan Pekov | | server | Nuke streams off BlockPosition | Ivan Pekov | | | server | Nuke streams off SectionPosition | Ivan Pekov | | | server | Optimize BehaviorController | MrIvanPlays | | @@ -104,6 +102,7 @@ # Patches | server | Remove vanilla profiler callers | Sotr | | | server | Respect PlayerKickEvent leaveMessage | Ivan Pekov | | | server | Send more packets immediately | MrIvanPlays | | +| server | Shutdown Bootstrap thread pool | foss-mc | | | server | Skip events if there's no listeners | William Blake Galbreath | | | server | Snowman drop and put back pumpkin | William Blake Galbreath | | | server | Squid EAR immunity | William Blake Galbreath | | diff --git a/Purpur b/Purpur index 242deeef..0743d383 160000 --- a/Purpur +++ b/Purpur @@ -1 +1 @@ -Subproject commit 242deeef8271d2ee02429eed461aec76f8af7a56 +Subproject commit 0743d383bdaffe39fce5260010301d8addf0b017 diff --git a/Rainforest b/Rainforest index c66f7d36..5a187d61 160000 --- a/Rainforest +++ b/Rainforest @@ -1 +1 @@ -Subproject commit c66f7d367f672ee5337fa7f505d9f6a685282d94 +Subproject commit 5a187d6192913e3f228aac1399744b75c9fef8c9 diff --git a/Tuinity b/Tuinity index d39cda09..76777f06 160000 --- a/Tuinity +++ b/Tuinity @@ -1 +1 @@ -Subproject commit d39cda09e5f32f4831a381c401fea0e6099c396f +Subproject commit 76777f06de65b8d24199e0c5f44fce687b3a1753 diff --git a/patches/server/0001-Yatopia-Server-Fixes.patch b/patches/server/0001-Yatopia-Server-Fixes.patch index b8092dbe..cceeb5f2 100644 --- a/patches/server/0001-Yatopia-Server-Fixes.patch +++ b/patches/server/0001-Yatopia-Server-Fixes.patch @@ -483,10 +483,10 @@ index 2291135eaef64c403183724cb6e413cd7e472672..6fcc7ed7c129e6a33386d65b37cbba4a public static long a(long i, EnumDirection enumdirection) { return a(i, enumdirection.getAdjacentX(), enumdirection.getAdjacentY(), enumdirection.getAdjacentZ()); diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index dde38e0222e658b5a841a32af3fc5153ecb02392..5af513cb052382c34e157110265f80a1a2efef15 100644 +index 3234d85aef03657a7bb4a037ee983d787d2930e8..e11b0495c31768919d4929766e740ffbc63005bb 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -739,11 +739,11 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -740,11 +740,11 @@ public class ChunkProviderServer extends IChunkProvider { if (this.a(playerchunk, l)) { GameProfilerFiller gameprofilerfiller = this.world.getMethodProfiler(); @@ -500,7 +500,7 @@ index dde38e0222e658b5a841a32af3fc5153ecb02392..5af513cb052382c34e157110265f80a1 if (this.a(playerchunk, l)) { this.chunkMapDistance.removeTicketAtLevel(TicketType.REQUIRED_LOAD, chunkcoordintpair, l, identifier); // Tuinity throw (IllegalStateException) SystemUtils.c((Throwable) (new IllegalStateException("No chunk holder after ticket has been added"))); -@@ -981,11 +981,11 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -983,11 +983,11 @@ public class ChunkProviderServer extends IChunkProvider { player.playerNaturallySpawnedEvent = event; } // Paper end - optimize isOutisdeRange @@ -514,12 +514,26 @@ index dde38e0222e658b5a841a32af3fc5153ecb02392..5af513cb052382c34e157110265f80a1 this.world.timings.countNaturalMobs.startTiming(); // Paper - timings int l = this.chunkMapDistance.b(); // Paper start - per player mob spawning +@@ -1019,11 +1019,11 @@ public class ChunkProviderServer extends IChunkProvider { + PlayerChunk playerchunk = chunk.playerChunk; + if (playerchunk != null) { // make sure load event has been called along with the load logic we put here + // Tuinity end - optimise chunk tick iteration +- this.world.getMethodProfiler().enter("broadcast"); ++ //this.world.getMethodProfiler().enter("broadcast"); // Akarin - remove caller + this.world.timings.broadcastChunkUpdates.startTiming(); // Paper - timings + playerchunk.a(chunk); // Tuinity + this.world.timings.broadcastChunkUpdates.stopTiming(); // Paper - timings +- this.world.getMethodProfiler().exit(); ++ //this.world.getMethodProfiler().exit(); // Akarin - remove caller + // Tuinity + + if (true) { // Tuinity diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java.rej b/src/main/java/net/minecraft/server/ChunkProviderServer.java.rej deleted file mode 100644 -index 7dd44fa8dc734862bf87691f1d7f4a5dae53b152..0000000000000000000000000000000000000000 +index 44987fc9343ff826dfba14504889d765655f079b..0000000000000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java.rej +++ /dev/null -@@ -1,29 +0,0 @@ +@@ -1,43 +0,0 @@ -diff a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java (rejected hunks) -@@ -732,11 +732,11 @@ public class ChunkProviderServer extends IChunkProvider { - if (this.a(playerchunk, l)) { @@ -549,6 +563,20 @@ index 7dd44fa8dc734862bf87691f1d7f4a5dae53b152..00000000000000000000000000000000 - this.world.timings.countNaturalMobs.startTiming(); // Paper - timings - int l = this.chunkMapDistance.b(); - // Paper start - per player mob spawning +-@@ -1007,11 +1007,11 @@ public class ChunkProviderServer extends IChunkProvider { +- PlayerChunk playerchunk = chunk.playerChunk; +- if (playerchunk != null) { // make sure load event has been called along with the load logic we put there +- // Tuinity end - optimise chunk tick iteration +-- this.world.getMethodProfiler().enter("broadcast"); +-+ //this.world.getMethodProfiler().enter("broadcast"); // Akarin - remove caller +- this.world.timings.broadcastChunkUpdates.startTiming(); // Paper - timings +- playerchunk.a(chunk); // Tuinity +- this.world.timings.broadcastChunkUpdates.stopTiming(); // Paper - timings +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- // Tuinity +- +- if (true) { // Tuinity diff --git a/src/main/java/net/minecraft/server/ContainerSmithing.java b/src/main/java/net/minecraft/server/ContainerSmithing.java index 61ef3adcfb021e222042de62ad06a2e7d808f5b5..f53ff805c5edf6398498aad396144d0fc964c74f 100644 --- a/src/main/java/net/minecraft/server/ContainerSmithing.java @@ -683,10 +711,10 @@ index 8347faf8a7ee62d27cf5eb9f285695fddadfa624..00000000000000000000000000000000 - - AttributeDefaults.a(); diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c509370279207 100644 +index bab072c9850a2c1f07b8f788871de8d6ebb5c891..45c1cbc84bbd7398c9c3bfd07e974c5e2b3dc549 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -438,7 +438,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -440,7 +440,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke public void setPosition(double d0, double d1, double d2) { this.setPositionRaw(d0, d1, d2); //this.a(this.size.a(d0, d1, d2)); // Paper - move into setPositionRaw @@ -695,7 +723,7 @@ index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c5093 } protected void ae() { -@@ -521,7 +521,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -523,7 +523,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } this.justCreated = false; @@ -704,7 +732,7 @@ index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c5093 } public void resetPortalCooldown() { -@@ -2373,7 +2373,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2389,7 +2389,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke WorldServer worldserver1 = minecraftserver.getWorldServer(resourcekey); if (true && !this.isPassenger() && this.portalTicks++ >= i) { // CraftBukkit @@ -713,7 +741,7 @@ index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c5093 this.portalTicks = i; this.resetPortalCooldown(); // CraftBukkit start -@@ -2383,7 +2383,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2399,7 +2399,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.b(worldserver1); } // CraftBukkit end @@ -722,7 +750,7 @@ index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c5093 } this.inPortal = false; -@@ -2766,14 +2766,14 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2786,14 +2786,14 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } // Paper end if (this.world instanceof WorldServer && !this.dead) { @@ -739,7 +767,7 @@ index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c5093 ShapeDetectorShape shapedetectorshape = (location == null) ? this.a(worldserver) : new ShapeDetectorShape(new Vec3D(location.getX(), location.getY(), location.getZ()), Vec3D.ORIGIN, this.yaw, this.pitch, worldserver, null); // CraftBukkit if (shapedetectorshape == null) { -@@ -2806,10 +2806,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2826,10 +2826,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } this.bM(); @@ -752,7 +780,7 @@ index e8da5e4f6d7668fa2dc0361f7246b21933669206..26306687857100173e762578eb2c5093 return entity; } } else { -@@ -3044,7 +3044,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3064,7 +3064,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke entity.a(entity1, Entity::teleportAndSync); } @@ -1784,7 +1812,7 @@ index 98a910fa6bfc9542b1d1cb56b6621809acd6b279..00000000000000000000000000000000 - TileEntity tileentity = block.isTileEntity() ? this.world.getTileEntity(blockposition) : null; - LootTableInfo.Builder loottableinfo_builder = (new LootTableInfo.Builder((WorldServer) this.world)).a(this.world.random).set(LootContextParameters.POSITION, blockposition).set(LootContextParameters.TOOL, ItemStack.b).setOptional(LootContextParameters.BLOCK_ENTITY, tileentity).setOptional(LootContextParameters.THIS_ENTITY, this.source); diff --git a/src/main/java/net/minecraft/server/IProjectile.java b/src/main/java/net/minecraft/server/IProjectile.java -index 0bac6b0506dc35c5117f13db0e9c67b1a0d3154e..8ebc3b133a37538d82af92046c3ab40473afcf3f 100644 +index 567c1bb19020a76b3ce03d8b79b8982d51238dde..97267c4a5040617a24f8131739cc5ee4ac14f34f 100644 --- a/src/main/java/net/minecraft/server/IProjectile.java +++ b/src/main/java/net/minecraft/server/IProjectile.java @@ -13,6 +13,7 @@ public abstract class IProjectile extends Entity { @@ -1795,7 +1823,7 @@ index 0bac6b0506dc35c5117f13db0e9c67b1a0d3154e..8ebc3b133a37538d82af92046c3ab404 IProjectile(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -79,8 +80,29 @@ public abstract class IProjectile extends Entity { +@@ -90,6 +91,12 @@ public abstract class IProjectile extends Entity { } super.tick(); @@ -1805,32 +1833,15 @@ index 0bac6b0506dc35c5117f13db0e9c67b1a0d3154e..8ebc3b133a37538d82af92046c3ab404 + if (ticksLived > 200) this.tickDespawnCounter(); // Paper - tick despawnCounter regardless after 10 seconds + } + // Purpur end -+ } -+ -+ // Purpur start -+ protected void tickDespawnCounter() { // Purpur - modified from EntityArrow -+ if (getPurpurDespawnRate() != -1) { -+ ++this.despawnCounter; -+ if (this.despawnCounter >= getPurpurDespawnRate()) { -+ this.die(); -+ } -+ } } -+ protected int getPurpurDespawnRate() { -+ return -1; -+ } -+ // Purpur end -+ private boolean h() { - Entity entity = this.getShooter(); - diff --git a/src/main/java/net/minecraft/server/IProjectile.java.rej b/src/main/java/net/minecraft/server/IProjectile.java.rej deleted file mode 100644 -index c535c0f1c4c13b0ac0de806992778f602ea02675..0000000000000000000000000000000000000000 +index 963c90c065a9e362c8c3030bb36ac6bf0c14a8e2..0000000000000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/IProjectile.java.rej +++ /dev/null -@@ -1,39 +0,0 @@ +@@ -1,22 +0,0 @@ -diff a/src/main/java/net/minecraft/server/IProjectile.java b/src/main/java/net/minecraft/server/IProjectile.java (rejected hunks) -@@ -13,6 +13,7 @@ public abstract class IProjectile extends Entity { - private UUID shooter; @@ -1840,36 +1851,19 @@ index c535c0f1c4c13b0ac0de806992778f602ea02675..00000000000000000000000000000000 - - IProjectile(EntityTypes entitytypes, World world) { - super(entitytypes, world); --@@ -79,8 +80,29 @@ public abstract class IProjectile extends Entity { +-@@ -79,6 +91,12 @@ public abstract class IProjectile extends Entity { - } - - super.tick(); -+ -+ // Purpur start --+ if (!(this instanceof EntityArrow)) { --+ if (ticksLived > 200) this.tickDespawnCounter(); // Paper - tick despawnCounter regardless after 10 seconds +-+ if (!(this instanceof EntityArrow)) { // EntityArrow handles its own despawn counter +-+ this.tickDespawnCounter(); -+ } -+ // Purpur end --+ } --+ --+ // Purpur start --+ protected void tickDespawnCounter() { // Purpur - modified from EntityArrow --+ if (this.getPurpurDespawnRate() != -1) { --+ ++this.despawnCounter; --+ if (this.despawnCounter >= this.getPurpurDespawnRate()) { --+ this.die(); --+ } --+ } - } - --+ protected int getPurpurDespawnRate() { --+ return -1; --+ } --+ // Purpur end --+ - public boolean checkIfLeftOwner() { return this.h(); } // Purpur - OBFHELPER -- private boolean h() { -- Entity entity = this.getShooter(); diff --git a/src/main/java/net/minecraft/server/LightEngineThreaded.java.rej b/src/main/java/net/minecraft/server/LightEngineThreaded.java.rej deleted file mode 100644 index 74d10212e547adf96762155adb03c0158df00a16..0000000000000000000000000000000000000000 @@ -2118,10 +2112,10 @@ index fce02f5fcef5179e63997c0b06277601c911ecb7..00000000000000000000000000000000 - this.oldTicketLevel = this.ticketLevel; diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java.rej b/src/main/java/net/minecraft/server/PlayerChunkMap.java.rej deleted file mode 100644 -index 759862aba781ec6f1ae0c9a76c4ab6352d603a4c..0000000000000000000000000000000000000000 +index 21d74b79c4f5be946024cd382e1164ecd5fd69c3..0000000000000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java.rej +++ /dev/null -@@ -1,84 +0,0 @@ +@@ -1,95 +0,0 @@ -diff a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java (rejected hunks) -@@ -480,53 +471,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { - double playerChunkZ = MathHelper.floor(player.locZ()) >> 4; @@ -2206,6 +2200,17 @@ index 759862aba781ec6f1ae0c9a76c4ab6352d603a4c..00000000000000000000000000000000 - // Paper end - - if (chunkHolder.protoChunk != null) {try (Timing ignored2 = this.world.timings.chunkLoadLevelTimer.startTimingIfSync()) { // Paper start - timings // Paper - chunk is created async +-@@ -1317,7 +1328,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +- } +- +- if (list != null) { +-- list.forEach(chunk::b); +-+ for (Entity entity : list) { +-+ chunk.b(entity); +-+ } +- } +- } +- diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java index 9273fc22df2c9618efb09a8f95fd7e7f08652f88..67018d2abcca8f9dd71fc3a6bfff19c85e8bcef0 100644 --- a/src/main/java/net/minecraft/server/PortalTravelAgent.java @@ -2363,7 +2368,7 @@ index bada470cba41cce9beb9eb04227b42c1d489d731..00000000000000000000000000000000 - private int c; - private TileEntityShulkerBox.AnimationPhase i; diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 00ef418aa0825dd147fedd91a552aa2437c7348f..702588cbab8aa2ced1a8f4b75d65552dd616efda 100644 +index ce2f69c2c0c67bc113ffdecd5d4f69865f631523..9c17b1feca7642d19df06c0cfc12ee926f0c8c86 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -96,6 +96,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -2382,7 +2387,7 @@ index 00ef418aa0825dd147fedd91a552aa2437c7348f..702588cbab8aa2ced1a8f4b75d65552d this.chunkPacketBlockController = this.paperConfig.antiXray ? new ChunkPacketBlockControllerAntiXray(this, executor) : ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray this.generator = gen; this.world = new CraftWorld((WorldServer) this, gen, env); -@@ -421,9 +423,9 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -412,9 +414,9 @@ public abstract class World implements GeneratorAccess, AutoCloseable { IBlockData iblockdata2 = this.getType(blockposition); if ((i & 128) == 0 && iblockdata2 != iblockdata1 && (iblockdata2.b((IBlockAccess) this, blockposition) != iblockdata1.b((IBlockAccess) this, blockposition) || iblockdata2.f() != iblockdata1.f() || iblockdata2.e() || iblockdata1.e())) { @@ -2483,7 +2488,7 @@ index 3a35169eaf680c45fe42922eb5f0014fa422c31c..00000000000000000000000000000000 - } - // Spigot Start diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index d70ce418a81de3a863c79e3f70737e80216bc95d..41e218f31d5d384d836fe03c474121e7a8e70e82 100644 +index 48260cc3cf98e850eff90ae628e9f59854d8e5cd..7ba007f44ffe062234e9277bc949f1d9cbea45fd 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -869,11 +869,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -2768,7 +2773,7 @@ index ff05ff6aef1e0f61eb4437253020632745ee2bd2..00000000000000000000000000000000 -+ } - } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 361f7857e461578e90cb71e15027dadaf794cb69..b3c31431afc34b249f88e5b3117b203c0e29a959 100644 +index 361f7857e461578e90cb71e15027dadaf794cb69..5ed0b725575bb300f52b48f95c8dc7dc5b51f670 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,7 +1,18 @@ @@ -2790,7 +2795,7 @@ index 361f7857e461578e90cb71e15027dadaf794cb69..b3c31431afc34b249f88e5b3117b203c import static net.pl3x.purpur.PurpurConfig.log; public class PurpurWorldConfig { -@@ -56,4 +67,214 @@ public class PurpurWorldConfig { +@@ -56,4 +67,216 @@ public class PurpurWorldConfig { PurpurConfig.config.addDefault("world-settings.default." + path, def); return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path)); } @@ -2980,65 +2985,69 @@ index 361f7857e461578e90cb71e15027dadaf794cb69..b3c31431afc34b249f88e5b3117b203c + turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); + } + -+ public int witherSkullDespawnRate = -1; + public int dragonFireballDespawnRate = -1; -+ public int largeFireballDespawnRate = -1; -+ public int smallFireballDespawnRate = -1; + public int eggDespawnRate = -1; + public int enderPearlDespawnRate = -1; -+ public int fireworksDespawnRate = -1; ++ public int expBottleDespawnRate = -1; ++ public int fireworkDespawnRate = -1; + public int fishingHookDespawnRate = -1; ++ public int largeFireballDespawnRate = -1; + public int potionDespawnRate = -1; + public int shulkerBulletDespawnRate = -1; -+ public int expBottleDespawnRate = -1; ++ public int smallFireballDespawnRate = -1; ++ public int snowballDespawnRate = -1; ++ public int witherSkullDespawnRate = -1; + private void projectileDespawnRateSettings() { -+ witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); + dragonFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.dragon_fireball", dragonFireballDespawnRate); -+ largeFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireball", largeFireballDespawnRate); -+ smallFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.small_fireball", smallFireballDespawnRate); + eggDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.egg", eggDespawnRate); + enderPearlDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.ender_pearl", enderPearlDespawnRate); -+ fireworksDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireworks_rocket", fireworksDespawnRate); ++ expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate); ++ fireworkDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.firework_rocket", fireworkDespawnRate); + fishingHookDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fishing_bobber", fishingHookDespawnRate); ++ largeFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireball", largeFireballDespawnRate); + potionDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.potion", potionDespawnRate); + shulkerBulletDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.shulker_bullet", shulkerBulletDespawnRate); -+ expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate); ++ smallFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.small_fireball", smallFireballDespawnRate); ++ snowballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.snowball", snowballDespawnRate); ++ witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); + } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java.rej b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java.rej deleted file mode 100644 -index a3f632f03a8a32d4975e0c8179f17baa27c28766..0000000000000000000000000000000000000000 +index f60ccb3a190e1f2e3418952387823e4c6b987758..0000000000000000000000000000000000000000 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java.rej +++ /dev/null -@@ -1,33 +0,0 @@ +@@ -1,35 +0,0 @@ -diff a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java (rejected hunks) --@@ -145,6 +145,31 @@ public class PurpurWorldConfig { +-@@ -145,6 +145,33 @@ public class PurpurWorldConfig { - idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); - } - --+ public int witherSkullDespawnRate = -1; -+ public int dragonFireballDespawnRate = -1; --+ public int largeFireballDespawnRate = -1; --+ public int smallFireballDespawnRate = -1; -+ public int eggDespawnRate = -1; -+ public int enderPearlDespawnRate = -1; --+ public int fireworksDespawnRate = -1; +-+ public int expBottleDespawnRate = -1; +-+ public int fireworkDespawnRate = -1; -+ public int fishingHookDespawnRate = -1; +-+ public int largeFireballDespawnRate = -1; -+ public int potionDespawnRate = -1; -+ public int shulkerBulletDespawnRate = -1; --+ public int expBottleDespawnRate = -1; +-+ public int smallFireballDespawnRate = -1; +-+ public int snowballDespawnRate = -1; +-+ public int witherSkullDespawnRate = -1; -+ private void projectileDespawnRateSettings() { --+ witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); -+ dragonFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.dragon_fireball", dragonFireballDespawnRate); --+ largeFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireball", largeFireballDespawnRate); --+ smallFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.small_fireball", smallFireballDespawnRate); -+ eggDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.egg", eggDespawnRate); -+ enderPearlDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.ender_pearl", enderPearlDespawnRate); --+ fireworksDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireworks_rocket", fireworksDespawnRate); +-+ expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate); +-+ fireworkDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.firework_rocket", fireworkDespawnRate); -+ fishingHookDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fishing_bobber", fishingHookDespawnRate); +-+ largeFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.fireball", largeFireballDespawnRate); -+ potionDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.potion", potionDespawnRate); -+ shulkerBulletDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.shulker_bullet", shulkerBulletDespawnRate); --+ expBottleDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.experience_bottle", expBottleDespawnRate); +-+ smallFireballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.small_fireball", smallFireballDespawnRate); +-+ snowballDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.snowball", snowballDespawnRate); +-+ witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); -+ } -+ - public boolean useBetterMending = false; diff --git a/patches/server/0021-Optimize-TileEntity-load-unload.patch b/patches/server/0021-Optimize-TileEntity-load-unload.patch index d14e4e2d..b76ac8da 100644 --- a/patches/server/0021-Optimize-TileEntity-load-unload.patch +++ b/patches/server/0021-Optimize-TileEntity-load-unload.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Optimize TileEntity load/unload diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 702588cbab8aa2ced1a8f4b75d65552dd616efda..1025237084d46cce2044b17458797282923aa3c7 100644 +index 9c17b1feca7642d19df06c0cfc12ee926f0c8c86..bb93c4c6d2be415efda602678a57bf3a509ab730 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -42,9 +42,9 @@ public abstract class World implements GeneratorAccess, AutoCloseable { diff --git a/patches/server/0027-Fix-lead-fall-dmg-config.patch b/patches/server/0027-Fix-lead-fall-dmg-config.patch index e651f51d..2c63b7c2 100644 --- a/patches/server/0027-Fix-lead-fall-dmg-config.patch +++ b/patches/server/0027-Fix-lead-fall-dmg-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix lead fall dmg config diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 26306687857100173e762578eb2c509370279207..c6bbc620e163acea757b610e95169e8f0cf9fd1d 100644 +index 45c1cbc84bbd7398c9c3bfd07e974c5e2b3dc549..decad96e5affe07078624c2ef95dd1f5e79601b2 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1262,6 +1262,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1264,6 +1264,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.fallDistance = 0.0F; } else if (d0 < 0.0D) { this.fallDistance = (float) ((double) this.fallDistance - d0); diff --git a/patches/server/0028-Optimize-player-loops-around-weather.patch b/patches/server/0028-Optimize-player-loops-around-weather.patch index c1ec11db..efdb73c3 100644 --- a/patches/server/0028-Optimize-player-loops-around-weather.patch +++ b/patches/server/0028-Optimize-player-loops-around-weather.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Optimize player loops around weather diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 41e218f31d5d384d836fe03c474121e7a8e70e82..4a31b93fcfefb44904fde0720953dcf995f6e5fb 100644 +index 7ba007f44ffe062234e9277bc949f1d9cbea45fd..0dd86a72b538ff140d8a7268cf1fe4e18ede33b5 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -814,12 +814,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { diff --git a/patches/server/0031-Add-timings-for-Pathfinder.patch b/patches/server/0031-Add-timings-for-Pathfinder.patch index ca0955c5..c88a9483 100644 --- a/patches/server/0031-Add-timings-for-Pathfinder.patch +++ b/patches/server/0031-Add-timings-for-Pathfinder.patch @@ -18,7 +18,7 @@ index 68ab5ccb2fcfe1de0503c9336572f28e11832b2d..4d4c25cb328b0ca2e16d3c823214aca5 * Gets a timer associated with a plugins tasks. * @param bukkitTask diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java -index d26f8499460c7a26b4e26a39cf52c0d8d2510a80..888744131fd4b51d035be51aa0c9e3fb7e3997b4 100644 +index 0fd68e787a0d7dd558c8de62239b0b5e3960756b..9a5a6a2276bb08a9b7bb88f498a0d0fe031f5265 100644 --- a/src/main/java/net/minecraft/server/NavigationAbstract.java +++ b/src/main/java/net/minecraft/server/NavigationAbstract.java @@ -29,6 +29,7 @@ public abstract class NavigationAbstract { diff --git a/patches/server/0034-lithium-collision-optimizations.patch b/patches/server/0034-lithium-collision-optimizations.patch index 9e5f05e6..a099f524 100644 --- a/patches/server/0034-lithium-collision-optimizations.patch +++ b/patches/server/0034-lithium-collision-optimizations.patch @@ -758,7 +758,7 @@ index 0000000000000000000000000000000000000000..493103d755c222f2c6031ffb8f5c0b7a + Collection getAllOfGroupType(EntityClassGroup type); +} diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index ac6e5e3309affc830d4db07fd9b8d809c3085033..37a3b26cdeb02acb8051f0a99313de7923ebae3b 100644 +index e852fd5b4a70397e2b3a5e6cc35e192deb1a8196..40b174cf0ca8d106c1546dfb0323aa4c99f9a0aa 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -36,7 +36,7 @@ public class Chunk implements IChunkAccess { @@ -799,7 +799,7 @@ index ac6e5e3309affc830d4db07fd9b8d809c3085033..37a3b26cdeb02acb8051f0a99313de79 if (nextSlice == currentSlice) { if (World.DEBUG_ENTITIES) MinecraftServer.LOGGER.warn("Entity was already in this chunk!" + entity, new Throwable()); return; // ??? silly plugins -@@ -930,12 +930,12 @@ public class Chunk implements IChunkAccess { +@@ -936,12 +936,12 @@ public class Chunk implements IChunkAccess { j = MathHelper.clamp(j, 0, this.entitySlices.length - 1); for (int k = i; k <= j; ++k) { @@ -816,7 +816,7 @@ index ac6e5e3309affc830d4db07fd9b8d809c3085033..37a3b26cdeb02acb8051f0a99313de79 if (entity1.shouldBeRemoved) continue; // Paper if (entity1.getBoundingBox().c(axisalignedbb) && entity1 != entity) { -@@ -1066,7 +1066,7 @@ public class Chunk implements IChunkAccess { +@@ -1072,7 +1072,7 @@ public class Chunk implements IChunkAccess { return this.tileEntities; } @@ -826,10 +826,10 @@ index ac6e5e3309affc830d4db07fd9b8d809c3085033..37a3b26cdeb02acb8051f0a99313de79 } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index c6bbc620e163acea757b610e95169e8f0cf9fd1d..388be69fb55c6b1cfd5ccc7635b54aa648728768 100644 +index decad96e5affe07078624c2ef95dd1f5e79601b2..228c17966e51b726768ef7bb6d15e00aa1599b3f 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -72,7 +72,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -73,7 +73,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } } }; @@ -996,10 +996,10 @@ index 882b82d8952d34f6e3c639404d1a1521dedf1bb0..ccf1416000354b78ccef78b072062ce0 default EntityHuman findNearbyPlayer(Entity entity, double d0, @Nullable Predicate predicate) { return this.findNearbyPlayer(entity.locX(), entity.locY(), entity.locZ(), d0, predicate); } // Paper diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 8fd74f076713fa3ec289ee69d4d9a78f10139f8e..15df27eabfee965e6fd63ad74e5be9a991f0d4da 100644 +index 9dd8abcf643ef066b79e87a11a9316b070d3df6e..11a3d358024dbee71aa6a03a641f4c8252b461a9 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -1341,11 +1341,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1367,11 +1367,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { chunk.setLoaded(true); this.world.a(chunk.getTileEntities().values()); List list = null; @@ -1013,7 +1013,7 @@ index 8fd74f076713fa3ec289ee69d4d9a78f10139f8e..15df27eabfee965e6fd63ad74e5be9a9 Iterator iterator = entityslice.iterator(); while (iterator.hasNext()) { -@@ -1638,7 +1638,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1666,7 +1666,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // CraftBukkit - decompile error csvwriter.a(chunkcoordintpair.x, chunkcoordintpair.z, playerchunk.getTicketLevel(), optional.isPresent(), optional.map(IChunkAccess::getChunkStatus).orElse(null), optional1.map(Chunk::getState).orElse(null), a(playerchunk.c()), a(playerchunk.a()), a(playerchunk.b()), this.chunkDistanceManager.c(entry.getLongKey()), !this.isOutsideOfRange(chunkcoordintpair), optional1.map((chunk) -> { int sum = 0; @@ -1023,7 +1023,7 @@ index 8fd74f076713fa3ec289ee69d4d9a78f10139f8e..15df27eabfee965e6fd63ad74e5be9a9 sum += size; } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 4a31b93fcfefb44904fde0720953dcf995f6e5fb..2ff11785fec05b7049d9bd76f54628f362beb35c 100644 +index 0dd86a72b538ff140d8a7268cf1fe4e18ede33b5..87fbc28847a3a6232861d36f3fa2f038c4664239 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -649,8 +649,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { diff --git a/patches/server/0038-Load-also-the-chunk-that-you-re-teleporting-to.patch b/patches/server/0038-Load-also-the-chunk-that-you-re-teleporting-to.patch index 93dcf971..d10bfa77 100644 --- a/patches/server/0038-Load-also-the-chunk-that-you-re-teleporting-to.patch +++ b/patches/server/0038-Load-also-the-chunk-that-you-re-teleporting-to.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Load also the chunk that you're teleporting to Fixes Tuinity-178 diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 2ff11785fec05b7049d9bd76f54628f362beb35c..56d97496807373b00d8f213a1aa0f96f14dc4058 100644 +index 87fbc28847a3a6232861d36f3fa2f038c4664239..a21322ffd0bbb0c24b45cac9e2992c44d9c2977a 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -225,7 +225,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { diff --git a/patches/server/0040-Nuke-streams-off-BlockPosition.patch b/patches/server/0040-Nuke-streams-off-BlockPosition.patch index 34bdbb04..1ba8c846 100644 --- a/patches/server/0040-Nuke-streams-off-BlockPosition.patch +++ b/patches/server/0040-Nuke-streams-off-BlockPosition.patch @@ -89,10 +89,10 @@ index e6b5a21c523c598f53207d024322301fbae74825..5e0aa6e35b1d4e23fdf42add15420665 return a(MathHelper.floor(axisalignedbb.minX), MathHelper.floor(axisalignedbb.minY), MathHelper.floor(axisalignedbb.minZ), MathHelper.floor(axisalignedbb.maxX), MathHelper.floor(axisalignedbb.maxY), MathHelper.floor(axisalignedbb.maxZ)); } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 388be69fb55c6b1cfd5ccc7635b54aa648728768..71210cfb2079e92392323e9df945975fed0ac9d4 100644 +index 228c17966e51b726768ef7bb6d15e00aa1599b3f..9dfc5649b552a8cb16092fe6b20aa1c181b59d5e 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -800,11 +800,25 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -802,11 +802,25 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke float f2 = this.getBlockSpeedFactor(); this.setMot(this.getMot().d((double) f2, 1.0D, (double) f2)); diff --git a/patches/server/0046-Fix-LightEngineThreaded-memory-leak.patch b/patches/server/0045-Fix-LightEngineThreaded-memory-leak.patch similarity index 83% rename from patches/server/0046-Fix-LightEngineThreaded-memory-leak.patch rename to patches/server/0045-Fix-LightEngineThreaded-memory-leak.patch index b7e3c56d..c1fb6d30 100644 --- a/patches/server/0046-Fix-LightEngineThreaded-memory-leak.patch +++ b/patches/server/0045-Fix-LightEngineThreaded-memory-leak.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix LightEngineThreaded memory leak diff --git a/src/main/java/net/minecraft/server/LightEngineThreaded.java b/src/main/java/net/minecraft/server/LightEngineThreaded.java -index ceaa92400678aef3bf436279dd807e4b38609dda..d9bbac17c5767df638fc4464e9795d5c842c3056 100644 +index fd0beefb900c064d3c35a3d2f79f5b7d9c1287bb..4d024a4849b7566c0faba131caab57b4ddf35e29 100644 --- a/src/main/java/net/minecraft/server/LightEngineThreaded.java +++ b/src/main/java/net/minecraft/server/LightEngineThreaded.java -@@ -114,6 +114,8 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -104,6 +104,8 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { } } @@ -18,7 +18,7 @@ index ceaa92400678aef3bf436279dd807e4b38609dda..d9bbac17c5767df638fc4464e9795d5c return this.size == 0 && this.pendingTasks.isEmpty(); } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 56d97496807373b00d8f213a1aa0f96f14dc4058..61aaa916b1a0e0ce9898b26381f4f22669730f57 100644 +index a21322ffd0bbb0c24b45cac9e2992c44d9c2977a..d53a9aa95c00b1ca7cf98fc88f49e3debff691a8 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -1815,6 +1815,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { diff --git a/patches/server/0045-Give-them-items-motion.patch b/patches/server/0045-Give-them-items-motion.patch deleted file mode 100644 index e9621e1b..00000000 --- a/patches/server/0045-Give-them-items-motion.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Ivan Pekov -Date: Thu, 10 Sep 2020 20:55:13 +0300 -Subject: [PATCH] Give them items motion - - -diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 71210cfb2079e92392323e9df945975fed0ac9d4..7981875bb6b56d3a0d085ee924f1e61269e111c6 100644 ---- a/src/main/java/net/minecraft/server/Entity.java -+++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1547,7 +1547,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - } - - public void setPositionRotation(double d0, double d1, double d2, float f, float f1) { -- this.mot = new Vec3D(0, 0, 0); // Paper - cancel entity velocity if teleported -+ if (this instanceof EntityPlayer) { this.mot = Vec3D.ORIGIN; } // Paper - cancel entity velocity if teleported // Yatopia - fix PaperMC-4292 - this.g(d0, d1, d2); - this.yaw = f; - this.pitch = f1; diff --git a/patches/server/0047-Respect-PlayerKickEvent-leaveMessage.patch b/patches/server/0046-Respect-PlayerKickEvent-leaveMessage.patch similarity index 100% rename from patches/server/0047-Respect-PlayerKickEvent-leaveMessage.patch rename to patches/server/0046-Respect-PlayerKickEvent-leaveMessage.patch diff --git a/patches/server/0048-Nuke-Bootstrap-thread-pool.patch b/patches/server/0047-Shutdown-Bootstrap-thread-pool.patch similarity index 66% rename from patches/server/0048-Nuke-Bootstrap-thread-pool.patch rename to patches/server/0047-Shutdown-Bootstrap-thread-pool.patch index 170e64f5..eadda11d 100644 --- a/patches/server/0048-Nuke-Bootstrap-thread-pool.patch +++ b/patches/server/0047-Shutdown-Bootstrap-thread-pool.patch @@ -1,15 +1,14 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: foss-mc <69294560+foss-mc@users.noreply.github.com> Date: Sat, 12 Sep 2020 11:12:23 +0800 -Subject: [PATCH] Nuke Bootstrap thread pool +Subject: [PATCH] Shutdown Bootstrap thread pool -Co-authored-by: Ivan Pekov diff --git a/src/main/java/net/minecraft/server/DataConverterRegistry.java b/src/main/java/net/minecraft/server/DataConverterRegistry.java -index 48e31e9142ffeb2725af6b1f483de67410e25694..1b5b06cad7771a7d351aca0a009d902f23f07d9d 100644 +index 48e31e9142ffeb2725af6b1f483de67410e25694..b149e32aac86ce2f7521958fa7394e4f5b852174 100644 --- a/src/main/java/net/minecraft/server/DataConverterRegistry.java +++ b/src/main/java/net/minecraft/server/DataConverterRegistry.java -@@ -15,14 +15,15 @@ public class DataConverterRegistry { +@@ -15,14 +15,16 @@ public class DataConverterRegistry { private static final BiFunction a = Schema::new; private static final BiFunction b = DataConverterSchemaNamed::new; @@ -23,14 +22,15 @@ index 48e31e9142ffeb2725af6b1f483de67410e25694..1b5b06cad7771a7d351aca0a009d902f a(datafixerbuilder); - return datafixerbuilder.build(SystemUtils.e()); -+ c = datafixerbuilder.build(SystemUtils.getMainExecutor()); ++ c = datafixerbuilder.build(SystemUtils.d); ++ SystemUtils.d.shutdown(); } + // Yatopia end public static DataFixer getDataFixer() { return a(); } // Paper - OBFHELPER public static DataFixer a() { diff --git a/src/main/java/net/minecraft/server/SystemUtils.java b/src/main/java/net/minecraft/server/SystemUtils.java -index 869dcf1545601358a273a5cfb47afa88fa13a11c..cbb5bcbeaac5487c99b6f2171a5ba28ea7fe171a 100644 +index 869dcf1545601358a273a5cfb47afa88fa13a11c..94fadd3d7ea7cdea07cb3fdc9e9bb1f92da0afcd 100644 --- a/src/main/java/net/minecraft/server/SystemUtils.java +++ b/src/main/java/net/minecraft/server/SystemUtils.java @@ -48,7 +48,7 @@ import org.apache.logging.log4j.Logger; @@ -38,21 +38,7 @@ index 869dcf1545601358a273a5cfb47afa88fa13a11c..cbb5bcbeaac5487c99b6f2171a5ba28e private static final AtomicInteger c = new AtomicInteger(1); - private static final ExecutorService d = a("Bootstrap", -2); // Paper - add -2 priority -+ //private static final ExecutorService d = a("Bootstrap", -2); // Paper - add -2 priority // Yatopia - nuke this shit ++ public static final ExecutorService d = a("Bootstrap", -2); // Paper - add -2 priority // Yatopia - private -> public private static final ExecutorService e = a("Main", -1); // Paper - add -1 priority private static final ExecutorService f = n(); public static LongSupplier a = System::nanoTime; -@@ -111,10 +111,13 @@ public class SystemUtils { - return (ExecutorService) object; - } - -+ /* // Yatopia start - ditch this - public static Executor e() { - return SystemUtils.d; - } -+ */ // Yatopia end - -+ public static Executor getMainExecutor() { return f(); } // Yatopia - OBFHELPER - public static Executor f() { - return SystemUtils.e; - } diff --git a/patches/server/0049-Optimize-Villagers.patch b/patches/server/0048-Optimize-Villagers.patch similarity index 100% rename from patches/server/0049-Optimize-Villagers.patch rename to patches/server/0048-Optimize-Villagers.patch diff --git a/patches/server/0050-Fix-villager-dupe.patch b/patches/server/0049-Fix-villager-dupe.patch similarity index 100% rename from patches/server/0050-Fix-villager-dupe.patch rename to patches/server/0049-Fix-villager-dupe.patch diff --git a/patches/server/0051-Improve-async-task-handler.patch b/patches/server/0050-Improve-async-task-handler.patch similarity index 100% rename from patches/server/0051-Improve-async-task-handler.patch rename to patches/server/0050-Improve-async-task-handler.patch From 6e3d09cf54f6b78f90de16ac6fb8acb710ea5b9e Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Sun, 20 Sep 2020 17:30:33 -0500 Subject: [PATCH 3/4] test old async stuff to fix load hang --- PATCHES.md | 2 +- .../0050-Improve-async-task-handler.patch | 82 ---------------- .../0050-Improve-task-performance.patch | 97 +++++++++++++++++++ 3 files changed, 98 insertions(+), 83 deletions(-) delete mode 100644 patches/server/0050-Improve-async-task-handler.patch create mode 100644 patches/server/0050-Improve-task-performance.patch diff --git a/PATCHES.md b/PATCHES.md index 6bb45f14..5ea8a430 100644 --- a/PATCHES.md +++ b/PATCHES.md @@ -64,7 +64,7 @@ # Patches | server | Implement bed explosion options | William Blake Galbreath | | | server | Implement respawn anchor explosion options | William Blake Galbreath | | | server | Improve Hopper Performance | Aikar | | -| server | Improve async task handler | ishland | | +| server | Improve task performance | ishland | | | server | Item stuck sleep config | tr7zw | | | api | Kill AnnotationTest | tr7zw | | | server | Lagging threshold | William Blake Galbreath | | diff --git a/patches/server/0050-Improve-async-task-handler.patch b/patches/server/0050-Improve-async-task-handler.patch deleted file mode 100644 index ebb87309..00000000 --- a/patches/server/0050-Improve-async-task-handler.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: ishland -Date: Sun, 20 Sep 2020 19:43:03 +0300 -Subject: [PATCH] Improve async task handler - -Replace ConcurrentLinkedQueue and LockSupport hacks to reduce execute times - -diff --git a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java -index 5df6be7e8d9b1295ed0700b3be90c3778fc7d77c..95aec7d4705a7a275fe7f5d6aec877dd7ad0f529 100644 ---- a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java -+++ b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java -@@ -13,8 +13,9 @@ public abstract class IAsyncTaskHandler implements Mailbox d = Queues.newConcurrentLinkedQueue(); -+ private final java.util.concurrent.LinkedBlockingDeque d = new java.util.concurrent.LinkedBlockingDeque<>(); // Yatopia - private int e; -+ private R next = null; // Yatopia - - protected IAsyncTaskHandler(String s) { - this.b = s; -@@ -79,7 +80,7 @@ public abstract class IAsyncTaskHandler implements Mailbox implements Mailbox public -+ /* // Yatopia start - replaced logic - while (this.executeNext()) { - ; - } -+ */ -+ while (!d.isEmpty()) { -+ if (next == null) queuePull(); -+ if (!executeNext()) break; -+ } -+ // Yatopia end - - } - - protected boolean executeNext() { -- R r0 = this.d.peek(); // Paper - decompile fix -+ R r0 = next; // Paper - decompile fix // Yatopia - temp storage -+ if (next == null || !d.isEmpty()) queuePull(); // Yatopia - attempt to get from queue - - if (r0 == null) { - return false; - } else if (this.e == 0 && !this.canExecute(r0)) { - return false; - } else { -- this.executeTask(this.d.remove()); // Paper - decompile fix -+ this.executeTask(r0); // Paper - decompile fix // Yatopia - replaced with r0 -+ next = null; // Yatopia - clear temp for next task - return true; - } - } -@@ -126,9 +136,17 @@ public abstract class IAsyncTaskHandler implements Mailbox +Date: Sun, 20 Sep 2020 00:05:44 +0800 +Subject: [PATCH] Improve task performance + +Replace ConcurrentLinkedQueue + LockSupport hack to reduce time +consumption of addTask(R)V + +diff --git a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java +index 5df6be7e8d9b1295ed0700b3be90c3778fc7d77c..7910d95bdd42ed97a5cab75c0da5bdacf030b92f 100644 +--- a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java ++++ b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java +@@ -1,11 +1,12 @@ + package net.minecraft.server; + + import com.google.common.collect.Queues; ++ + import java.util.Queue; +-import java.util.concurrent.CompletableFuture; +-import java.util.concurrent.Executor; ++import java.util.concurrent.*; + import java.util.concurrent.locks.LockSupport; + import java.util.function.BooleanSupplier; ++ + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + +@@ -13,9 +14,11 @@ public abstract class IAsyncTaskHandler implements Mailbox d = Queues.newConcurrentLinkedQueue(); ++ private final LinkedBlockingDeque d = new LinkedBlockingDeque<>(); // Yatopia - improve task performance + private int e; + ++ private R next = null; // Yatopia - improve task performance - temp storage for next object ++ + protected IAsyncTaskHandler(String s) { + this.b = s; + } +@@ -79,7 +82,7 @@ public abstract class IAsyncTaskHandler implements Mailbox implements Mailbox public +- while (this.executeNext()) { +- ; ++ // Yatopia start - replaced logic ++ while (!d.isEmpty()) { ++ if(next == null) bl(); ++ if(!executeNext()) break; + } ++ // Yatopia end + + } + + protected boolean executeNext() { +- R r0 = this.d.peek(); // Paper - decompile fix ++ R r0 = next; // Paper - decompile fix // Yatopia - replaced with temp storage ++ ++ if(next == null && !d.isEmpty()) bl(); // Yatopia - attempt to get from queue + + if (r0 == null) { + return false; + } else if (this.e == 0 && !this.canExecute(r0)) { + return false; + } else { +- this.executeTask(this.d.remove()); // Paper - decompile fix ++ this.executeTask(r0); // Paper - decompile fix // Yatopia - replaced with current r0 ++ next = null; // Yatopia - clear storage for next task + return true; + } + } +@@ -127,8 +136,13 @@ public abstract class IAsyncTaskHandler implements Mailbox Date: Sun, 20 Sep 2020 17:48:06 -0500 Subject: [PATCH 4/4] try removing async stuff --- .../0050-Improve-task-performance.patch | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 patches/server/0050-Improve-task-performance.patch diff --git a/patches/server/0050-Improve-task-performance.patch b/patches/server/0050-Improve-task-performance.patch deleted file mode 100644 index 2b73d705..00000000 --- a/patches/server/0050-Improve-task-performance.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: ishland -Date: Sun, 20 Sep 2020 00:05:44 +0800 -Subject: [PATCH] Improve task performance - -Replace ConcurrentLinkedQueue + LockSupport hack to reduce time -consumption of addTask(R)V - -diff --git a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java -index 5df6be7e8d9b1295ed0700b3be90c3778fc7d77c..7910d95bdd42ed97a5cab75c0da5bdacf030b92f 100644 ---- a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java -+++ b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java -@@ -1,11 +1,12 @@ - package net.minecraft.server; - - import com.google.common.collect.Queues; -+ - import java.util.Queue; --import java.util.concurrent.CompletableFuture; --import java.util.concurrent.Executor; -+import java.util.concurrent.*; - import java.util.concurrent.locks.LockSupport; - import java.util.function.BooleanSupplier; -+ - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; - -@@ -13,9 +14,11 @@ public abstract class IAsyncTaskHandler implements Mailbox d = Queues.newConcurrentLinkedQueue(); -+ private final LinkedBlockingDeque d = new LinkedBlockingDeque<>(); // Yatopia - improve task performance - private int e; - -+ private R next = null; // Yatopia - improve task performance - temp storage for next object -+ - protected IAsyncTaskHandler(String s) { - this.b = s; - } -@@ -79,7 +82,7 @@ public abstract class IAsyncTaskHandler implements Mailbox implements Mailbox public -- while (this.executeNext()) { -- ; -+ // Yatopia start - replaced logic -+ while (!d.isEmpty()) { -+ if(next == null) bl(); -+ if(!executeNext()) break; - } -+ // Yatopia end - - } - - protected boolean executeNext() { -- R r0 = this.d.peek(); // Paper - decompile fix -+ R r0 = next; // Paper - decompile fix // Yatopia - replaced with temp storage -+ -+ if(next == null && !d.isEmpty()) bl(); // Yatopia - attempt to get from queue - - if (r0 == null) { - return false; - } else if (this.e == 0 && !this.canExecute(r0)) { - return false; - } else { -- this.executeTask(this.d.remove()); // Paper - decompile fix -+ this.executeTask(r0); // Paper - decompile fix // Yatopia - replaced with current r0 -+ next = null; // Yatopia - clear storage for next task - return true; - } - } -@@ -127,8 +136,13 @@ public abstract class IAsyncTaskHandler implements Mailbox