geforkt von Mirrors/Paper
0708fa363b
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes:eb2e6578
SPIGOT-5116: Fix concurrent modification exception inside ChunkMapDistance989f9b3d
SPIGOT-4849: Fix server crash when accessing chunks during chunk load/unload/populate eventsf554183c
SPIGOT-5171: Don't fire PlayerTeleportEvent if not actually moving2349feb8
SPIGOT-5163: Cancelling PlayerBucketFillEvent visually removes the targeted block Spigot Changes: 9a643a6a Remove DataWatcher Locking
51 Zeilen
2.2 KiB
Diff
51 Zeilen
2.2 KiB
Diff
From acf788a1f3141b0189dcf5ea94646ccd98173f7a 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 8572eeba1..d72eacaec 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
|
|
|