aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0477-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0477-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch')
-rw-r--r--Spigot-Server-Patches/0477-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0477-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch b/Spigot-Server-Patches/0477-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch
new file mode 100644
index 0000000000..9bd9a6f1eb
--- /dev/null
+++ b/Spigot-Server-Patches/0477-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch
@@ -0,0 +1,62 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Spottedleaf <[email protected]>
+Date: Thu, 16 Apr 2020 16:13:59 -0700
+Subject: [PATCH] Optimize ChunkProviderServer's chunk level checking helper
+ methods
+
+These can be hot functions (i.e entity ticking and block ticking),
+so inline where possible, and avoid the abstraction of the
+Either class.
+
+diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
+index b6146330a55665a0365ff7474f1843766e0c0ce1..695d12e1942018be6a9e8c999ba6071b9f778568 100644
+--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
+@@ -617,27 +617,37 @@ public class ChunkProviderServer extends IChunkProvider {
+
+ public final boolean isInEntityTickingChunk(Entity entity) { return this.a(entity); } // Paper - OBFHELPER
+ @Override public boolean a(Entity entity) {
+- long i = ChunkCoordIntPair.pair(MathHelper.floor(entity.locX()) >> 4, MathHelper.floor(entity.locZ()) >> 4);
+-
+- return this.a(i, PlayerChunk::b);
++ // Paper start - optimize is ticking ready type functions
++ // entity ticking
++ PlayerChunk playerChunk = this.getChunk(MCUtil.getCoordinateKey(entity));
++ return playerChunk != null && playerChunk.isEntityTickingReady();
++ // Paper end - optimize is ticking ready type functions
+ }
+
+ public final boolean isEntityTickingChunk(ChunkCoordIntPair chunkcoordintpair) { return this.a(chunkcoordintpair); } // Paper - OBFHELPER
+ @Override public boolean a(ChunkCoordIntPair chunkcoordintpair) {
+- return this.a(chunkcoordintpair.pair(), PlayerChunk::b);
++ // Paper start - optimize is ticking ready type functions
++ // is entity ticking ready
++ PlayerChunk playerChunk = this.getChunk(MCUtil.getCoordinateKey(chunkcoordintpair));
++ return playerChunk != null && playerChunk.isEntityTickingReady();
++ // Paper end - optimize is ticking ready type functions
+ }
+
+ @Override
+ public boolean a(BlockPosition blockposition) {
+- long i = ChunkCoordIntPair.pair(blockposition.getX() >> 4, blockposition.getZ() >> 4);
+-
+- return this.a(i, PlayerChunk::a);
++ // Paper start - optimize is ticking ready type functions
++ // is ticking ready
++ PlayerChunk playerChunk = this.getChunk(MCUtil.getCoordinateKey(blockposition));
++ return playerChunk != null && playerChunk.isTickingReady();
++ // Paper end - optimize is ticking ready type functions
+ }
+
+ public boolean b(Entity entity) {
+- long i = ChunkCoordIntPair.pair(MathHelper.floor(entity.locX()) >> 4, MathHelper.floor(entity.locZ()) >> 4);
+-
+- return this.a(i, PlayerChunk::c);
++ // Paper start - optimize is ticking ready type functions
++ // is full chunk ready
++ PlayerChunk playerChunk = this.getChunk(MCUtil.getCoordinateKey(entity));
++ return playerChunk != null && playerChunk.isFullChunkReady();
++ // Paper end - optimize is ticking ready type functions
+ }
+
+ private boolean a(long i, Function<PlayerChunk, CompletableFuture<Either<Chunk, PlayerChunk.Failure>>> function) {