Avoid duplicate poi entries from the first section (#9235)

This commit is contained in:
Lulu13022002 2023-06-09 04:14:30 +02:00 committed by GitHub
parent c9eb393d18
commit 21f2d158c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -32,10 +32,10 @@ had to be specifically modified.
diff --git a/src/main/java/io/papermc/paper/util/PoiAccess.java b/src/main/java/io/papermc/paper/util/PoiAccess.java diff --git a/src/main/java/io/papermc/paper/util/PoiAccess.java b/src/main/java/io/papermc/paper/util/PoiAccess.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..05640f5f70e81833530e8098d30c400fed7ba6e1 index 0000000000000000000000000000000000000000..69be1761b3b5ba7b496c1c10a4db897e6212d671
--- /dev/null --- /dev/null
+++ b/src/main/java/io/papermc/paper/util/PoiAccess.java +++ b/src/main/java/io/papermc/paper/util/PoiAccess.java
@@ -0,0 +1,800 @@ @@ -0,0 +1,804 @@
+package io.papermc.paper.util; +package io.papermc.paper.util;
+ +
+import com.mojang.datafixers.util.Pair; +import com.mojang.datafixers.util.Pair;
@ -258,10 +258,12 @@ index 0000000000000000000000000000000000000000..05640f5f70e81833530e8098d30c400f
+ final int centerX = sourcePosition.getX() >> 4; + final int centerX = sourcePosition.getX() >> 4;
+ final int centerY = Mth.clamp(sourcePosition.getY() >> 4, lowerY, upperY); + final int centerY = Mth.clamp(sourcePosition.getY() >> 4, lowerY, upperY);
+ final int centerZ = sourcePosition.getZ() >> 4; + final int centerZ = sourcePosition.getZ() >> 4;
+ final long centerKey = CoordinateUtils.getChunkSectionKey(centerX, centerY, centerZ);
+ +
+ final LongArrayFIFOQueue queue = new LongArrayFIFOQueue(); + final LongArrayFIFOQueue queue = new LongArrayFIFOQueue();
+ queue.enqueue(CoordinateUtils.getChunkSectionKey(centerX, centerY, centerZ));
+ final LongOpenHashSet seen = new LongOpenHashSet(); + final LongOpenHashSet seen = new LongOpenHashSet();
+ seen.add(centerKey);
+ queue.enqueue(centerKey);
+ +
+ while (!queue.isEmpty()) { + while (!queue.isEmpty()) {
+ final long key = queue.dequeueLong(); + final long key = queue.dequeueLong();
@ -315,7 +317,7 @@ index 0000000000000000000000000000000000000000..05640f5f70e81833530e8098d30c400f
+ continue; + continue;
+ } + }
+ +
+ final PoiSection poiSection = poiSectionOptional.orElse(null); + final PoiSection poiSection = poiSectionOptional.get();
+ +
+ final Map<Holder<PoiType>, Set<PoiRecord>> sectionData = poiSection.getData(); + final Map<Holder<PoiType>, Set<PoiRecord>> sectionData = poiSection.getData();
+ if (sectionData.isEmpty()) { + if (sectionData.isEmpty()) {
@ -499,10 +501,12 @@ index 0000000000000000000000000000000000000000..05640f5f70e81833530e8098d30c400f
+ final int centerX = sourcePosition.getX() >> 4; + final int centerX = sourcePosition.getX() >> 4;
+ final int centerY = Mth.clamp(sourcePosition.getY() >> 4, lowerY, upperY); + final int centerY = Mth.clamp(sourcePosition.getY() >> 4, lowerY, upperY);
+ final int centerZ = sourcePosition.getZ() >> 4; + final int centerZ = sourcePosition.getZ() >> 4;
+ final long centerKey = CoordinateUtils.getChunkSectionKey(centerX, centerY, centerZ);
+ +
+ final LongArrayFIFOQueue queue = new LongArrayFIFOQueue(); + final LongArrayFIFOQueue queue = new LongArrayFIFOQueue();
+ queue.enqueue(CoordinateUtils.getChunkSectionKey(centerX, centerY, centerZ));
+ final LongOpenHashSet seen = new LongOpenHashSet(); + final LongOpenHashSet seen = new LongOpenHashSet();
+ seen.add(centerKey);
+ queue.enqueue(centerKey);
+ +
+ while (!queue.isEmpty()) { + while (!queue.isEmpty()) {
+ final long key = queue.dequeueLong(); + final long key = queue.dequeueLong();
@ -557,7 +561,7 @@ index 0000000000000000000000000000000000000000..05640f5f70e81833530e8098d30c400f
+ continue; + continue;
+ } + }
+ +
+ final PoiSection poiSection = poiSectionOptional.orElse(null); + final PoiSection poiSection = poiSectionOptional.get();
+ +
+ final Map<Holder<PoiType>, Set<PoiRecord>> sectionData = poiSection.getData(); + final Map<Holder<PoiType>, Set<PoiRecord>> sectionData = poiSection.getData();
+ if (sectionData.isEmpty()) { + if (sectionData.isEmpty()) {