Ensure Chunk.getEntitySlices is not used in code

Use Chunk.getAsSlices instead to save some cpu time.
getEntitySlices needs to be kept like that to ensure some plugins working properly, otherwise we'd have server owners crying
This commit is contained in:
Ivan Pekov 2020-10-18 19:30:29 +03:00
parent ab272cc991
commit 22da8648e3
No known key found for this signature in database
GPG Key ID: BC975C392D9CA3A3
2 changed files with 31 additions and 4 deletions

View File

@ -848,6 +848,24 @@ index 018972007c7c36f96102ff22423dc7c45369eaa0..450d5fabba6cbcc3443f049b2e980b31
@Override
public NBTTagCompound i(BlockPosition blockposition) {
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
index 1bc8b11d999e9af16a44fe1cb62f5785afa82462..30d4589c9cdad11809fc09cb51235d6da8e03195 100644
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
@@ -503,8 +503,11 @@ public class ChunkRegionLoader {
chunk.d(false);
- for (int j = 0; j < chunk.getEntitySlices().length; ++j) {
- Iterator iterator1 = chunk.getEntitySlices()[j].iterator();
+ // Yatopia start
+ EntitySlice<Entity>[] entitySlices = chunk.getAsSlices();
+ for (int j = 0; j < entitySlices.length; ++j) {
+ Iterator iterator1 = entitySlices[j].iterator();
+ // Yatopia end
while (iterator1.hasNext()) {
Entity entity = (Entity) iterator1.next();
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index e0381ed6945f734f8802d07b8cbd6b27852db449..220d5273543ea0b143cf9c894c89cabea25c29d6 100644
--- a/src/main/java/net/minecraft/server/Entity.java
@ -1029,7 +1047,7 @@ index 882b82d8952d34f6e3c639404d1a1521dedf1bb0..ccf1416000354b78ccef78b072062ce0
default EntityHuman findNearbyPlayer(Entity entity, double d0, @Nullable Predicate<Entity> 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 1f7a8694f69345288c53df0f3a1845f2721f6c7b..2c5c224e90f85d0c5a99daf4fcf5a49d5abcc299 100644
index 1f7a8694f69345288c53df0f3a1845f2721f6c7b..841dd0cbd771d878d53292adbd590a1ecffc367e 100644
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -1334,11 +1334,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@ -1046,6 +1064,15 @@ index 1f7a8694f69345288c53df0f3a1845f2721f6c7b..2c5c224e90f85d0c5a99daf4fcf5a49d
Iterator iterator = entityslice.iterator();
while (iterator.hasNext()) {
@@ -1619,7 +1619,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) -> {
- return Stream.of(chunk.getEntitySlices()).mapToInt(List::size).sum(); // Spigot
+ return Stream.of(chunk.getAsSlices()).mapToInt(EntitySlice::size).sum(); // Spigot // Yatopia
}).orElse(0), optional1.map((chunk) -> {
return chunk.getTileEntities().size();
}).orElse(0));
diff --git a/src/main/java/net/minecraft/server/VoxelShapes.java b/src/main/java/net/minecraft/server/VoxelShapes.java
index 4bdadffee07c54f6f538ba09db72d562d05cb337..eb358d4453fce1de7f15f38b32e594fa63e4deb5 100644
--- a/src/main/java/net/minecraft/server/VoxelShapes.java

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Replace some hot streams
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
index 1bc8b11d999e9af16a44fe1cb62f5785afa82462..257745d56e54cc8442be97b475d84e7f3991ebf5 100644
index 30d4589c9cdad11809fc09cb51235d6da8e03195..bf7d5394a59186aa516497e8eaae8e5000db6a62 100644
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
@@ -430,9 +430,20 @@ public class ChunkRegionLoader {
@ -29,7 +29,7 @@ index 1bc8b11d999e9af16a44fe1cb62f5785afa82462..257745d56e54cc8442be97b475d84e7f
// Paper start - async chunk save for unload
NibbleArray nibblearray; // block light
NibbleArray nibblearray1; // sky light
@@ -725,6 +736,8 @@ public class ChunkRegionLoader {
@@ -728,6 +739,8 @@ public class ChunkRegionLoader {
while (iterator.hasNext()) {
String s = (String) iterator.next();
@ -38,7 +38,7 @@ index 1bc8b11d999e9af16a44fe1cb62f5785afa82462..257745d56e54cc8442be97b475d84e7f
map.put(StructureGenerator.a.get(s.toLowerCase(Locale.ROOT)), new LongOpenHashSet(Arrays.stream(nbttagcompound1.getLongArray(s)).filter((i) -> {
ChunkCoordIntPair chunkcoordintpair1 = new ChunkCoordIntPair(i);
@@ -735,6 +748,22 @@ public class ChunkRegionLoader {
@@ -738,6 +751,22 @@ public class ChunkRegionLoader {
return true;
}
}).toArray()));