mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-07 07:32:03 -07:00
use a Queue in ChunkMapDistance
An oversight in this patch may be to blame for several issues in certain cases, we'll opt to using a queue as this will fall in line with what is expected and may help some issues where chunks remain loaded or fail to load
This commit is contained in:
@@ -185,7 +185,7 @@ index 391726d99c..8db92edc36 100644
|
|||||||
* Ported from MinecraftForge - author: LexManos <LexManos@gmail.com> - License: LGPLv2.1
|
* Ported from MinecraftForge - author: LexManos <LexManos@gmail.com> - License: LGPLv2.1
|
||||||
*/
|
*/
|
||||||
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
index cd18150488..0c562a5f34 100644
|
index f72843119a..c1fdd7b7a4 100644
|
||||||
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
||||||
|
@@ -5,15 +5,23 @@ Subject: [PATCH] ChunkMapDistance CME
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
index ed4e8d69ca..cd18150488 100644
|
index ed4e8d69ca..f72843119a 100644
|
||||||
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
|
@@ -0,0 +0,0 @@ import it.unimi.dsi.fastutil.objects.ObjectSortedSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
+
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
||||||
private final ChunkMapDistance.a e = new ChunkMapDistance.a();
|
private final ChunkMapDistance.a e = new ChunkMapDistance.a();
|
||||||
private final ChunkMapDistance.b f = new ChunkMapDistance.b(8);
|
private final ChunkMapDistance.b f = new ChunkMapDistance.b(8);
|
||||||
private final ChunkMapDistance.c g = new ChunkMapDistance.c(33);
|
private final ChunkMapDistance.c g = new ChunkMapDistance.c(33);
|
||||||
- private final Set<PlayerChunk> h = Sets.newHashSet();
|
- private final Set<PlayerChunk> h = Sets.newHashSet();
|
||||||
+ private Set<PlayerChunk> h = Sets.newHashSet(); // Paper - -final
|
+ private java.util.Queue<PlayerChunk> h = new java.util.LinkedList<>(); // Paper - -final
|
||||||
private final PlayerChunk.c i;
|
private final PlayerChunk.c i;
|
||||||
private final Mailbox<ChunkTaskQueueSorter.a<Runnable>> j;
|
private final Mailbox<ChunkTaskQueueSorter.a<Runnable>> j;
|
||||||
private final Mailbox<ChunkTaskQueueSorter.b> k;
|
private final Mailbox<ChunkTaskQueueSorter.b> k;
|
||||||
@@ -21,15 +29,17 @@ index ed4e8d69ca..cd18150488 100644
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
- if (!this.h.isEmpty()) {
|
|
||||||
- this.h.forEach((playerchunk) -> {
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ Set<PlayerChunk> currentPending = this.h;
|
if (!this.h.isEmpty()) {
|
||||||
+ this.h = Sets.newHashSet();
|
- this.h.forEach((playerchunk) -> {
|
||||||
+ if (!currentPending.isEmpty()) {
|
- playerchunk.a(playerchunkmap);
|
||||||
+ currentPending.forEach((playerchunk) -> {
|
- });
|
||||||
+ // Paper end
|
- this.h.clear();
|
||||||
playerchunk.a(playerchunkmap);
|
+ while(!this.h.isEmpty()) {
|
||||||
});
|
+ this.h.remove().a(playerchunkmap);
|
||||||
this.h.clear();
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
if (!this.l.isEmpty()) {
|
||||||
--
|
--
|
@@ -6,7 +6,7 @@ Subject: [PATCH] Fix MC-154214
|
|||||||
Avoid adding player tickets when they're out of range of the closest player
|
Avoid adding player tickets when they're out of range of the closest player
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
index 0c562a5f34..7a76db08fc 100644
|
index c1fdd7b7a4..1a6fe87cd8 100644
|
||||||
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
||||||
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
||||||
|
Reference in New Issue
Block a user