36c4831619
I was not correctly checking if the status was even cached. Actually fix it this time Do not forget about the async chunk placeholder Actually fix it this time I hope No plugin tickets for getChunkAtGen(x, z, boolean) Change ChunkStatus ABI This is required for asynchronous IO. async io will require calls to getChunkStatusIfCached to return the chunk status for a chunk currently queued to save - this cannot be reasonably done with current ABI
51 Zeilen
2.2 KiB
Diff
51 Zeilen
2.2 KiB
Diff
From af0d14664907ee01ca8462ecf282c3c46d8941ef Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Sun, 16 Jun 2019 23:30:25 -0700
|
|
Subject: [PATCH] Fix MC-154214
|
|
|
|
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
|
|
index 99c7537ef2..757b505eaf 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
|
@@ -359,12 +359,18 @@ public abstract class ChunkMapDistance {
|
|
}
|
|
|
|
private void a(long i, int j, boolean flag, boolean flag1) {
|
|
+ final long chunkPosition = i; // Paper - conflict on variable change
|
|
if (flag != flag1) {
|
|
Ticket<?> ticket = new Ticket<>(TicketType.PLAYER, ChunkMapDistance.b, new ChunkCoordIntPair(i), ChunkMapDistance.this.currentTick);
|
|
|
|
if (flag1) {
|
|
ChunkMapDistance.this.j.a(ChunkTaskQueueSorter.a(() -> { // Craftbukkit - decompile error
|
|
ChunkMapDistance.this.m.execute(() -> {
|
|
+ // Paper start - Fix MC-154214
|
|
+ if (!this.inRange(this.getNearestDistanceFromPlayerMap().get(chunkPosition))) {
|
|
+ return;
|
|
+ }
|
|
+ // Paper end
|
|
ChunkMapDistance.this.a(i, ticket);
|
|
ChunkMapDistance.this.l.add(i);
|
|
});
|
|
@@ -408,6 +414,7 @@ public abstract class ChunkMapDistance {
|
|
|
|
}
|
|
|
|
+ private final boolean inRange(int distance) { return this.c(distance); } // Paper - OBFHELPER
|
|
private boolean c(int i) {
|
|
return i <= this.e - 2;
|
|
}
|
|
@@ -415,7 +422,7 @@ public abstract class ChunkMapDistance {
|
|
|
|
class b extends ChunkMap {
|
|
|
|
- protected final Long2ByteMap a = new Long2ByteOpenHashMap();
|
|
+ protected final Long2ByteMap a = new Long2ByteOpenHashMap(); protected final Long2ByteMap getNearestDistanceFromPlayerMap() { return this.a; } // Paper - OBFHELPER
|
|
protected final int b;
|
|
|
|
protected b(int i) {
|
|
--
|
|
2.22.0
|
|
|