13
0
geforkt von Mirrors/Paper
Paper/Spigot-Server-Patches/0401-Fix-MC-154214.patch
Shane Freeder 0708fa363b
Updated Upstream (CraftBukkit/Spigot)
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 ChunkMapDistance
989f9b3d SPIGOT-4849: Fix server crash when accessing chunks during chunk load/unload/populate events
f554183c SPIGOT-5171: Don't fire PlayerTeleportEvent if not actually moving
2349feb8 SPIGOT-5163: Cancelling PlayerBucketFillEvent visually removes the targeted block

Spigot Changes:
9a643a6a Remove DataWatcher Locking
2019-07-16 23:09:32 +01:00

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