mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-26 12:36:07 +01:00
Protect the visible chunk map from plugins touching it, trim Timing Errors
Blow up if a plugin tries to mutate visibleChunks directly and prevent them from doing so. Also provide a safe get call if any plugins directly call get on it so that it uses the special logic to check pending. Also restores ABI for the visibleChunks field back to what it was too. Additionally, remove the stack trace from Timings Stack Corruption for any error thrown on Minecraft Timings, and tell them to get the error ABOVE this instead, so people stop giving us useless error reports. Also fixes a memory leak when the source map down sizes but dest map didn't, which resulted in lingering references to old chunk holders. Fixes #3414
This commit is contained in:
parent
18c686576b
commit
edd6b6a2ba
@ -476,10 +476,10 @@ index 0000000000000000000000000000000000000000..a5d13a1e44edb861f45c83a9b4309fbf
|
|||||||
+}
|
+}
|
||||||
diff --git a/src/main/java/co/aikar/timings/TimingHandler.java b/src/main/java/co/aikar/timings/TimingHandler.java
|
diff --git a/src/main/java/co/aikar/timings/TimingHandler.java b/src/main/java/co/aikar/timings/TimingHandler.java
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..cc0390c061fc367b80063c6de7e45e1be67c0e07
|
index 0000000000000000000000000000000000000000..199789d56d22fcb1b77ebd56805cc28aa5a5ab0a
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/co/aikar/timings/TimingHandler.java
|
+++ b/src/main/java/co/aikar/timings/TimingHandler.java
|
||||||
@@ -0,0 +1,227 @@
|
@@ -0,0 +1,226 @@
|
||||||
+/*
|
+/*
|
||||||
+ * This file is licensed under the MIT License (MIT).
|
+ * This file is licensed under the MIT License (MIT).
|
||||||
+ *
|
+ *
|
||||||
@ -608,13 +608,12 @@ index 0000000000000000000000000000000000000000..cc0390c061fc367b80063c6de7e45e1b
|
|||||||
+ TimingHandler last;
|
+ TimingHandler last;
|
||||||
+ while ((last = TIMING_STACK.removeLast()) != this) {
|
+ while ((last = TIMING_STACK.removeLast()) != this) {
|
||||||
+ last.timingDepth = 0;
|
+ last.timingDepth = 0;
|
||||||
+ String reportTo;
|
|
||||||
+ if ("Minecraft".equalsIgnoreCase(last.identifier.group)) {
|
+ if ("Minecraft".equalsIgnoreCase(last.identifier.group)) {
|
||||||
+ reportTo = "Paper! This is a potential bug in Paper";
|
+ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Look above this for any errors and report this to Paper unless it has a plugin in the stack trace (" + last.identifier + " did not stopTiming)");
|
||||||
+ } else {
|
+ } else {
|
||||||
+ reportTo = "the plugin " + last.identifier.group + "(Look for errors above this in the logs)";
|
+ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Report this to the plugin " + last.identifier.group + " (Look for errors above this in the logs) (" + last.identifier + " did not stopTiming)", new Throwable());
|
||||||
+ }
|
+ }
|
||||||
+ Logger.getGlobal().log(Level.SEVERE, "TIMING_STACK_CORRUPTION - Report this to " + reportTo + " (" + last.identifier + " did not stopTiming)", new Throwable());
|
+
|
||||||
+ boolean found = TIMING_STACK.contains(this);
|
+ boolean found = TIMING_STACK.contains(this);
|
||||||
+ if (!found) {
|
+ if (!found) {
|
||||||
+ // We aren't even in the stack... Don't pop everything
|
+ // We aren't even in the stack... Don't pop everything
|
||||||
|
@ -13,10 +13,10 @@ This should result in siginificant memory use reduction and improved GC behavior
|
|||||||
|
|
||||||
diff --git a/src/main/java/com/destroystokyo/paper/util/map/Long2ObjectLinkedOpenHashMapFastCopy.java b/src/main/java/com/destroystokyo/paper/util/map/Long2ObjectLinkedOpenHashMapFastCopy.java
|
diff --git a/src/main/java/com/destroystokyo/paper/util/map/Long2ObjectLinkedOpenHashMapFastCopy.java b/src/main/java/com/destroystokyo/paper/util/map/Long2ObjectLinkedOpenHashMapFastCopy.java
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..e0ad725b2e63ffd329fc4725d15290cbf494b790
|
index 0000000000000000000000000000000000000000..f6ff4d8132a95895680f5bc81f8f873e78f0bbdb
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/com/destroystokyo/paper/util/map/Long2ObjectLinkedOpenHashMapFastCopy.java
|
+++ b/src/main/java/com/destroystokyo/paper/util/map/Long2ObjectLinkedOpenHashMapFastCopy.java
|
||||||
@@ -0,0 +1,32 @@
|
@@ -0,0 +1,39 @@
|
||||||
+package com.destroystokyo.paper.util.map;
|
+package com.destroystokyo.paper.util.map;
|
||||||
+
|
+
|
||||||
+import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap;
|
+import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap;
|
||||||
@ -24,16 +24,16 @@ index 0000000000000000000000000000000000000000..e0ad725b2e63ffd329fc4725d15290cb
|
|||||||
+public class Long2ObjectLinkedOpenHashMapFastCopy<V> extends Long2ObjectLinkedOpenHashMap<V> {
|
+public class Long2ObjectLinkedOpenHashMapFastCopy<V> extends Long2ObjectLinkedOpenHashMap<V> {
|
||||||
+
|
+
|
||||||
+ public void copyFrom(Long2ObjectLinkedOpenHashMapFastCopy<V> map) {
|
+ public void copyFrom(Long2ObjectLinkedOpenHashMapFastCopy<V> map) {
|
||||||
+ if (key.length < map.key.length) {
|
+ if (key.length != map.key.length) {
|
||||||
+ key = null;
|
+ key = null;
|
||||||
+ key = new long[map.key.length];
|
+ key = new long[map.key.length];
|
||||||
+ }
|
+ }
|
||||||
+ if (value.length < map.value.length) {
|
+ if (value.length != map.value.length) {
|
||||||
+ value = null;
|
+ value = null;
|
||||||
+ //noinspection unchecked
|
+ //noinspection unchecked
|
||||||
+ value = (V[]) new Object[map.value.length];
|
+ value = (V[]) new Object[map.value.length];
|
||||||
+ }
|
+ }
|
||||||
+ if (link.length < map.link.length) {
|
+ if (link.length != map.link.length) {
|
||||||
+ link = null;
|
+ link = null;
|
||||||
+ link = new long[map.link.length];
|
+ link = new long[map.link.length];
|
||||||
+ }
|
+ }
|
||||||
@ -48,6 +48,13 @@ index 0000000000000000000000000000000000000000..e0ad725b2e63ffd329fc4725d15290cb
|
|||||||
+ this.maxFill = map.maxFill;
|
+ this.maxFill = map.maxFill;
|
||||||
+ this.containsNullKey = map.containsNullKey;
|
+ this.containsNullKey = map.containsNullKey;
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public Long2ObjectLinkedOpenHashMapFastCopy<V> clone() {
|
||||||
|
+ Long2ObjectLinkedOpenHashMapFastCopy<V> clone = (Long2ObjectLinkedOpenHashMapFastCopy<V>) super.clone();
|
||||||
|
+ clone.copyFrom(this);
|
||||||
|
+ return clone;
|
||||||
|
+ }
|
||||||
+}
|
+}
|
||||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||||
index fd998e4fb1534690a2ef8c1bca55e0ae9fe855f9..8f849d83d08b39f1cd9184f484a2089a7a3124ef 100644
|
index fd998e4fb1534690a2ef8c1bca55e0ae9fe855f9..8f849d83d08b39f1cd9184f484a2089a7a3124ef 100644
|
||||||
@ -76,23 +83,46 @@ index 0e01e5c2c008823355e370d0c9ced79130e5fb92..d129c7f54d9f65fff6f512d8ff5f1c38
|
|||||||
List<PlayerChunk> allChunks = new ArrayList<>(visibleChunks.values());
|
List<PlayerChunk> allChunks = new ArrayList<>(visibleChunks.values());
|
||||||
List<EntityPlayer> players = world.players;
|
List<EntityPlayer> players = world.players;
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349ef28dd7e 100644
|
index 4beae504c875767ff00e26461fe7240498750e27..75906f794205f5b7fe894163e1b13bfd85c2b419 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -55,8 +55,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -55,8 +55,33 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
public static final int GOLDEN_TICKET = 33 + ChunkStatus.b();
|
public static final int GOLDEN_TICKET = 33 + ChunkStatus.b();
|
||||||
- public final Long2ObjectLinkedOpenHashMap<PlayerChunk> updatingChunks = new Long2ObjectLinkedOpenHashMap();
|
- public final Long2ObjectLinkedOpenHashMap<PlayerChunk> updatingChunks = new Long2ObjectLinkedOpenHashMap();
|
||||||
- public volatile Long2ObjectLinkedOpenHashMap<PlayerChunk> visibleChunks;
|
- public volatile Long2ObjectLinkedOpenHashMap<PlayerChunk> visibleChunks;
|
||||||
+ public final com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk> updatingChunks = new com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<>(); // Paper - faster copying
|
+ // Paper start - faster copying
|
||||||
+ public final com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk> visibleChunks = new com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<>(); // Paper - faster copying
|
+ public final Long2ObjectLinkedOpenHashMap<PlayerChunk> updatingChunks = new com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<>(); // Paper - faster copying
|
||||||
+ public final com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk> pendingVisibleChunks = new com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<>(); // Paper - this is used if the visible chunks is updated while iterating only
|
+ public final Long2ObjectLinkedOpenHashMap<PlayerChunk> visibleChunks = new ProtectedVisibleChunksMap(); // Paper - faster copying
|
||||||
+ public transient Long2ObjectLinkedOpenHashMap<PlayerChunk> visibleChunksClone; // Paper - used for async access of visible chunks, clone and cache only when needed
|
+
|
||||||
|
+ private class ProtectedVisibleChunksMap extends com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk> {
|
||||||
|
+ @Override
|
||||||
|
+ public PlayerChunk put(long k, PlayerChunk playerChunk) {
|
||||||
|
+ throw new UnsupportedOperationException("Updating visible Chunks");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public PlayerChunk remove(long k) {
|
||||||
|
+ throw new UnsupportedOperationException("Removing visible Chunks");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public PlayerChunk get(long k) {
|
||||||
|
+ return PlayerChunkMap.this.getVisibleChunk(k);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public PlayerChunk safeGet(long k) {
|
||||||
|
+ return super.get(k);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
+ public final com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk> pendingVisibleChunks = new com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk>(); // Paper - this is used if the visible chunks is updated while iterating only
|
||||||
|
+ public transient com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk> visibleChunksClone; // Paper - used for async access of visible chunks, clone and cache only when needed
|
||||||
private final Long2ObjectLinkedOpenHashMap<PlayerChunk> pendingUnload;
|
private final Long2ObjectLinkedOpenHashMap<PlayerChunk> pendingUnload;
|
||||||
final LongSet loadedChunks; // Paper - private -> package
|
final LongSet loadedChunks; // Paper - private -> package
|
||||||
public final WorldServer world;
|
public final WorldServer world;
|
||||||
@@ -130,7 +132,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -130,7 +155,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
public PlayerChunkMap(WorldServer worldserver, File file, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, IAsyncTaskHandler<Runnable> iasynctaskhandler, ILightAccess ilightaccess, ChunkGenerator<?> chunkgenerator, WorldLoadListener worldloadlistener, Supplier<WorldPersistentData> supplier, int i) {
|
public PlayerChunkMap(WorldServer worldserver, File file, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, IAsyncTaskHandler<Runnable> iasynctaskhandler, ILightAccess ilightaccess, ChunkGenerator<?> chunkgenerator, WorldLoadListener worldloadlistener, Supplier<WorldPersistentData> supplier, int i) {
|
||||||
super(new File(worldserver.getWorldProvider().getDimensionManager().a(file), "region"), datafixer);
|
super(new File(worldserver.getWorldProvider().getDimensionManager().a(file), "region"), datafixer);
|
||||||
@ -101,7 +131,7 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
this.pendingUnload = new Long2ObjectLinkedOpenHashMap();
|
this.pendingUnload = new Long2ObjectLinkedOpenHashMap();
|
||||||
this.loadedChunks = new LongOpenHashSet();
|
this.loadedChunks = new LongOpenHashSet();
|
||||||
this.unloadQueue = new LongOpenHashSet();
|
this.unloadQueue = new LongOpenHashSet();
|
||||||
@@ -221,9 +223,52 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -221,9 +246,52 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
return (PlayerChunk) this.updatingChunks.get(i);
|
return (PlayerChunk) this.updatingChunks.get(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +150,7 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
+ } finally {
|
+ } finally {
|
||||||
+ this.isIterating = prev;
|
+ this.isIterating = prev;
|
||||||
+ if (!this.isIterating && this.hasPendingVisibleUpdate) {
|
+ if (!this.isIterating && this.hasPendingVisibleUpdate) {
|
||||||
+ this.visibleChunks.copyFrom(this.pendingVisibleChunks);
|
+ ((ProtectedVisibleChunksMap)this.visibleChunks).copyFrom(this.pendingVisibleChunks);
|
||||||
+ this.pendingVisibleChunks.clear();
|
+ this.pendingVisibleChunks.clear();
|
||||||
+ this.hasPendingVisibleUpdate = false;
|
+ this.hasPendingVisibleUpdate = false;
|
||||||
+ }
|
+ }
|
||||||
@ -133,7 +163,7 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
+ synchronized (this.visibleChunks) {
|
+ synchronized (this.visibleChunks) {
|
||||||
+ if (DEBUG_ASYNC_VISIBLE_CHUNKS) new Throwable("Async getVisibleChunks").printStackTrace();
|
+ if (DEBUG_ASYNC_VISIBLE_CHUNKS) new Throwable("Async getVisibleChunks").printStackTrace();
|
||||||
+ if (this.visibleChunksClone == null) {
|
+ if (this.visibleChunksClone == null) {
|
||||||
+ this.visibleChunksClone = this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.clone() : this.visibleChunks.clone();
|
+ this.visibleChunksClone = this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.clone() : ((ProtectedVisibleChunksMap)this.visibleChunks).clone();
|
||||||
+ }
|
+ }
|
||||||
+ return this.visibleChunksClone;
|
+ return this.visibleChunksClone;
|
||||||
+ }
|
+ }
|
||||||
@ -147,15 +177,15 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
+ // Paper start - mt safe get
|
+ // Paper start - mt safe get
|
||||||
+ if (Thread.currentThread() != this.world.serverThread) {
|
+ if (Thread.currentThread() != this.world.serverThread) {
|
||||||
+ synchronized (this.visibleChunks) {
|
+ synchronized (this.visibleChunks) {
|
||||||
+ return (PlayerChunk) (this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.get(i) : this.visibleChunks.get(i));
|
+ return (PlayerChunk) (this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.get(i) : ((ProtectedVisibleChunksMap)this.visibleChunks).safeGet(i));
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ return (PlayerChunk) (this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.get(i) : this.visibleChunks.get(i));
|
+ return (PlayerChunk) (this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.get(i) : ((ProtectedVisibleChunksMap)this.visibleChunks).safeGet(i));
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IntSupplier c(long i) {
|
protected IntSupplier c(long i) {
|
||||||
@@ -411,8 +456,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -411,8 +479,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
// Paper end
|
// Paper end
|
||||||
|
|
||||||
protected void save(boolean flag) {
|
protected void save(boolean flag) {
|
||||||
@ -166,7 +196,7 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
MutableBoolean mutableboolean = new MutableBoolean();
|
MutableBoolean mutableboolean = new MutableBoolean();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@@ -440,7 +486,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -440,7 +509,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
// this.i(); // Paper - nuke IOWorker
|
// this.i(); // Paper - nuke IOWorker
|
||||||
PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.w.getName());
|
PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.w.getName());
|
||||||
} else {
|
} else {
|
||||||
@ -175,7 +205,7 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
IChunkAccess ichunkaccess = (IChunkAccess) playerchunk.getChunkSave().getNow(null); // CraftBukkit - decompile error
|
IChunkAccess ichunkaccess = (IChunkAccess) playerchunk.getChunkSave().getNow(null); // CraftBukkit - decompile error
|
||||||
|
|
||||||
if (ichunkaccess instanceof ProtoChunkExtension || ichunkaccess instanceof Chunk) {
|
if (ichunkaccess instanceof ProtoChunkExtension || ichunkaccess instanceof Chunk) {
|
||||||
@@ -610,7 +656,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -610,7 +679,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
if (!this.updatingChunksModified) {
|
if (!this.updatingChunksModified) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@ -184,11 +214,11 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
+ synchronized (this.visibleChunks) {
|
+ synchronized (this.visibleChunks) {
|
||||||
+ if (isIterating) {
|
+ if (isIterating) {
|
||||||
+ hasPendingVisibleUpdate = true;
|
+ hasPendingVisibleUpdate = true;
|
||||||
+ this.pendingVisibleChunks.copyFrom(this.updatingChunks);
|
+ this.pendingVisibleChunks.copyFrom((com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk>)this.updatingChunks);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ hasPendingVisibleUpdate = false;
|
+ hasPendingVisibleUpdate = false;
|
||||||
+ this.pendingVisibleChunks.clear();
|
+ this.pendingVisibleChunks.clear();
|
||||||
+ this.visibleChunks.copyFrom(this.updatingChunks);
|
+ ((ProtectedVisibleChunksMap)this.visibleChunks).copyFrom((com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy<PlayerChunk>)this.updatingChunks);
|
||||||
+ this.visibleChunksClone = null;
|
+ this.visibleChunksClone = null;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
@ -197,7 +227,7 @@ index 4beae504c875767ff00e26461fe7240498750e27..00f26ae23da65453073fc06ffec8a349
|
|||||||
this.updatingChunksModified = false;
|
this.updatingChunksModified = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1076,12 +1135,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1076,12 +1158,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Iterable<PlayerChunk> f() {
|
protected Iterable<PlayerChunk> f() {
|
||||||
|
@ -37,10 +37,10 @@ index 9afbec260a1d586152073b2adda32959453ab8c9..e89683b4f1e3cac60b88a5c7317e525c
|
|||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 00f26ae23da65453073fc06ffec8a349ef28dd7e..350ce63eb19b8e999c2da00d8235e1760dc948fc 100644
|
index 75906f794205f5b7fe894163e1b13bfd85c2b419..9adb858f0f86dbe9defb2247dc9e6a4795fe640f 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -108,6 +108,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -131,6 +131,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
};
|
};
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ index 00f26ae23da65453073fc06ffec8a349ef28dd7e..350ce63eb19b8e999c2da00d8235e176
|
|||||||
// Paper start - distance maps
|
// Paper start - distance maps
|
||||||
private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets<EntityPlayer> pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>();
|
private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets<EntityPlayer> pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>();
|
||||||
|
|
||||||
@@ -962,7 +964,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -985,7 +987,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
return Either.left(chunk);
|
return Either.left(chunk);
|
||||||
});
|
});
|
||||||
}, (runnable) -> {
|
}, (runnable) -> {
|
||||||
|
@ -40,10 +40,10 @@ index 64e00275edf38739fe6e2d79dbcb93243e765678..a87aa07b17205b52e85f7d082fa4d516
|
|||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 350ce63eb19b8e999c2da00d8235e1760dc948fc..047d6ccdc85363b27f9c7d78c4281fdf4ade1087 100644
|
index 9adb858f0f86dbe9defb2247dc9e6a4795fe640f..030c980b522c4cada800e5d8ca47f0b8733bf5b6 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -1514,6 +1514,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1537,6 +1537,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
.printStackTrace();
|
.printStackTrace();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -14,10 +14,10 @@ Use an ArrayDeque to store this Queue
|
|||||||
We make sure to also implement a pattern that is recursion safe too.
|
We make sure to also implement a pattern that is recursion safe too.
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 047d6ccdc85363b27f9c7d78c4281fdf4ade1087..f81eeb7e86018d47312170bda1b4b76697943d69 100644
|
index 030c980b522c4cada800e5d8ca47f0b8733bf5b6..4d591d620262e8c4ed0508b01e26ef7355e75e88 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -87,24 +87,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -110,24 +110,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
public final CallbackExecutor callbackExecutor = new CallbackExecutor();
|
public final CallbackExecutor callbackExecutor = new CallbackExecutor();
|
||||||
public static final class CallbackExecutor implements java.util.concurrent.Executor, Runnable {
|
public static final class CallbackExecutor implements java.util.concurrent.Executor, Runnable {
|
||||||
|
|
||||||
|
@ -44,10 +44,10 @@ index 3a88c9a67062eb73ad8257ea786efca7e7e99f65..6d3b34ead9cc95dcc1152dffa8c6c4a8
|
|||||||
List<Entity> list = this.tracker.getPassengers();
|
List<Entity> list = this.tracker.getPassengers();
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f46532427227e67 100644
|
index 4d591d620262e8c4ed0508b01e26ef7355e75e88..9a25874a97f9d3f516e074a7ec32c833408f1fdc 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -120,21 +120,51 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -143,21 +143,51 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
// Paper start - distance maps
|
// Paper start - distance maps
|
||||||
private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets<EntityPlayer> pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>();
|
private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets<EntityPlayer> pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>();
|
||||||
@ -100,7 +100,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -172,6 +202,44 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -195,6 +225,44 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.m = new VillagePlace(new File(this.w, "poi"), datafixer, this.world); // Paper
|
this.m = new VillagePlace(new File(this.w, "poi"), datafixer, this.world); // Paper
|
||||||
this.setViewDistance(i);
|
this.setViewDistance(i);
|
||||||
this.playerMobDistanceMap = this.world.paperConfig.perPlayerMobSpawns ? new com.destroystokyo.paper.util.PlayerMobDistanceMap() : null; // Paper
|
this.playerMobDistanceMap = this.world.paperConfig.perPlayerMobSpawns ? new com.destroystokyo.paper.util.PlayerMobDistanceMap() : null; // Paper
|
||||||
@ -145,7 +145,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updatePlayerMobTypeMap(Entity entity) {
|
public void updatePlayerMobTypeMap(Entity entity) {
|
||||||
@@ -1411,17 +1479,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1434,17 +1502,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void movePlayer(EntityPlayer entityplayer) {
|
public void movePlayer(EntityPlayer entityplayer) {
|
||||||
@ -164,7 +164,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
|
|
||||||
int i = MathHelper.floor(entityplayer.locX()) >> 4;
|
int i = MathHelper.floor(entityplayer.locX()) >> 4;
|
||||||
int j = MathHelper.floor(entityplayer.locZ()) >> 4;
|
int j = MathHelper.floor(entityplayer.locZ()) >> 4;
|
||||||
@@ -1538,7 +1596,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1561,7 +1619,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
entity.tracker = playerchunkmap_entitytracker; // Paper - Fast access to tracker
|
entity.tracker = playerchunkmap_entitytracker; // Paper - Fast access to tracker
|
||||||
this.trackedEntities.put(entity.getId(), playerchunkmap_entitytracker);
|
this.trackedEntities.put(entity.getId(), playerchunkmap_entitytracker);
|
||||||
@ -173,7 +173,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
if (entity instanceof EntityPlayer) {
|
if (entity instanceof EntityPlayer) {
|
||||||
EntityPlayer entityplayer = (EntityPlayer) entity;
|
EntityPlayer entityplayer = (EntityPlayer) entity;
|
||||||
|
|
||||||
@@ -1582,7 +1640,37 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1605,7 +1663,37 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
entity.tracker = null; // Paper - We're no longer tracked
|
entity.tracker = null; // Paper - We're no longer tracked
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
List<EntityPlayer> list = Lists.newArrayList();
|
List<EntityPlayer> list = Lists.newArrayList();
|
||||||
List<EntityPlayer> list1 = this.world.getPlayers();
|
List<EntityPlayer> list1 = this.world.getPlayers();
|
||||||
|
|
||||||
@@ -1650,23 +1738,31 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1673,23 +1761,31 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
PacketDebug.a(this.world, chunk.getPos());
|
PacketDebug.a(this.world, chunk.getPos());
|
||||||
List<Entity> list = Lists.newArrayList();
|
List<Entity> list = Lists.newArrayList();
|
||||||
List<Entity> list1 = Lists.newArrayList();
|
List<Entity> list1 = Lists.newArrayList();
|
||||||
@ -255,7 +255,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
|
|
||||||
Iterator iterator;
|
Iterator iterator;
|
||||||
Entity entity1;
|
Entity entity1;
|
||||||
@@ -1704,7 +1800,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1727,7 +1823,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
public class EntityTracker {
|
public class EntityTracker {
|
||||||
|
|
||||||
@ -264,7 +264,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
private final Entity tracker;
|
private final Entity tracker;
|
||||||
private final int trackingDistance;
|
private final int trackingDistance;
|
||||||
private SectionPosition e;
|
private SectionPosition e;
|
||||||
@@ -1721,6 +1817,42 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1744,6 +1840,42 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.e = SectionPosition.a(entity);
|
this.e = SectionPosition.a(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +307,7 @@ index f81eeb7e86018d47312170bda1b4b76697943d69..c02e127b1e98a8603d426cfb7f465324
|
|||||||
public boolean equals(Object object) {
|
public boolean equals(Object object) {
|
||||||
return object instanceof PlayerChunkMap.EntityTracker ? ((PlayerChunkMap.EntityTracker) object).tracker.getId() == this.tracker.getId() : false;
|
return object instanceof PlayerChunkMap.EntityTracker ? ((PlayerChunkMap.EntityTracker) object).tracker.getId() == this.tracker.getId() : false;
|
||||||
}
|
}
|
||||||
@@ -1817,7 +1949,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1840,7 +1972,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
int j = entity.getEntityType().getChunkRange() * 16;
|
int j = entity.getEntityType().getChunkRange() * 16;
|
||||||
j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper
|
j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper
|
||||||
|
|
||||||
|
@ -192,10 +192,10 @@ index afc92dd031cdaf725b85c0b301d5a5a21da54720..6980d19f36c18cdbed6679dbdf04afd6
|
|||||||
|
|
||||||
// Paper start
|
// Paper start
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71 100644
|
index 9a25874a97f9d3f516e074a7ec32c833408f1fdc..dcf4b04e811f9591ee147a0b34493db9d992bcbd 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -130,6 +130,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -153,6 +153,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
final com.destroystokyo.paper.util.misc.PlayerAreaMap[] playerEntityTrackerTrackMaps;
|
final com.destroystokyo.paper.util.misc.PlayerAreaMap[] playerEntityTrackerTrackMaps;
|
||||||
final int[] entityTrackerTrackRanges;
|
final int[] entityTrackerTrackRanges;
|
||||||
// Paper end - use distance map to optimise tracker
|
// Paper end - use distance map to optimise tracker
|
||||||
@ -213,7 +213,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
|
|
||||||
void addPlayerToDistanceMaps(EntityPlayer player) {
|
void addPlayerToDistanceMaps(EntityPlayer player) {
|
||||||
int chunkX = MCUtil.getChunkCoordinate(player.locX());
|
int chunkX = MCUtil.getChunkCoordinate(player.locX());
|
||||||
@@ -143,6 +154,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -166,6 +177,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
trackMap.add(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance()));
|
trackMap.add(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance()));
|
||||||
}
|
}
|
||||||
// Paper end - use distance map to optimise entity tracker
|
// Paper end - use distance map to optimise entity tracker
|
||||||
@ -223,7 +223,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
}
|
}
|
||||||
|
|
||||||
void removePlayerFromDistanceMaps(EntityPlayer player) {
|
void removePlayerFromDistanceMaps(EntityPlayer player) {
|
||||||
@@ -151,6 +165,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -174,6 +188,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.playerEntityTrackerTrackMaps[i].remove(player);
|
this.playerEntityTrackerTrackMaps[i].remove(player);
|
||||||
}
|
}
|
||||||
// Paper end - use distance map to optimise tracker
|
// Paper end - use distance map to optimise tracker
|
||||||
@ -234,7 +234,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateMaps(EntityPlayer player) {
|
void updateMaps(EntityPlayer player) {
|
||||||
@@ -165,6 +183,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -188,6 +206,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance()));
|
trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance()));
|
||||||
}
|
}
|
||||||
// Paper end - use distance map to optimise entity tracker
|
// Paper end - use distance map to optimise entity tracker
|
||||||
@ -244,7 +244,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -197,7 +218,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -220,7 +241,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.mailboxWorldGen = this.p.a(threadedmailbox, false);
|
this.mailboxWorldGen = this.p.a(threadedmailbox, false);
|
||||||
this.mailboxMain = this.p.a(mailbox, false);
|
this.mailboxMain = this.p.a(mailbox, false);
|
||||||
this.lightEngine = new LightEngineThreaded(ilightaccess, this, this.world.getWorldProvider().f(), threadedmailbox1, this.p.a(threadedmailbox1, false));
|
this.lightEngine = new LightEngineThreaded(ilightaccess, this, this.world.getWorldProvider().f(), threadedmailbox1, this.p.a(threadedmailbox1, false));
|
||||||
@ -253,7 +253,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
this.l = supplier;
|
this.l = supplier;
|
||||||
this.m = new VillagePlace(new File(this.w, "poi"), datafixer, this.world); // Paper
|
this.m = new VillagePlace(new File(this.w, "poi"), datafixer, this.world); // Paper
|
||||||
this.setViewDistance(i);
|
this.setViewDistance(i);
|
||||||
@@ -240,6 +261,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -263,6 +284,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.playerEntityTrackerTrackMaps[ordinal] = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets);
|
this.playerEntityTrackerTrackMaps[ordinal] = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets);
|
||||||
}
|
}
|
||||||
// Paper end - use distance map to optimise entity tracker
|
// Paper end - use distance map to optimise entity tracker
|
||||||
@ -292,7 +292,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updatePlayerMobTypeMap(Entity entity) {
|
public void updatePlayerMobTypeMap(Entity entity) {
|
||||||
@@ -259,6 +312,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -282,6 +335,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
return entityPlayer.mobCounts[enumCreatureType.ordinal()];
|
return entityPlayer.mobCounts[enumCreatureType.ordinal()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +300,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
private static double a(ChunkCoordIntPair chunkcoordintpair, Entity entity) {
|
private static double a(ChunkCoordIntPair chunkcoordintpair, Entity entity) {
|
||||||
double d0 = (double) (chunkcoordintpair.x * 16 + 8);
|
double d0 = (double) (chunkcoordintpair.x * 16 + 8);
|
||||||
double d1 = (double) (chunkcoordintpair.z * 16 + 8);
|
double d1 = (double) (chunkcoordintpair.z * 16 + 8);
|
||||||
@@ -437,6 +491,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -460,6 +514,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
} else {
|
} else {
|
||||||
if (playerchunk != null) {
|
if (playerchunk != null) {
|
||||||
playerchunk.a(j);
|
playerchunk.a(j);
|
||||||
@ -308,7 +308,7 @@ index c02e127b1e98a8603d426cfb7f46532427227e67..9d414b6bbdda2a4d5a4ecdad6abb7d53
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (playerchunk != null) {
|
if (playerchunk != null) {
|
||||||
@@ -1408,30 +1463,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1431,30 +1486,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
return isOutsideOfRange(chunkcoordintpair, false);
|
return isOutsideOfRange(chunkcoordintpair, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,10 +207,10 @@ index 6980d19f36c18cdbed6679dbdf04afd694e078b6..03fb688fe4bdc19b4bc36b1f1d5b40c6
|
|||||||
|
|
||||||
public CompletableFuture<Either<IChunkAccess, PlayerChunk.Failure>> a(ChunkStatus chunkstatus, PlayerChunkMap playerchunkmap) {
|
public CompletableFuture<Either<IChunkAccess, PlayerChunk.Failure>> a(ChunkStatus chunkstatus, PlayerChunkMap playerchunkmap) {
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb247478384e2f 100644
|
index dcf4b04e811f9591ee147a0b34493db9d992bcbd..3b72b2c88575d19ec51f46226ddcc8a15c169721 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -71,7 +71,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -94,7 +94,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
private boolean updatingChunksModified;
|
private boolean updatingChunksModified;
|
||||||
private final ChunkTaskQueueSorter p;
|
private final ChunkTaskQueueSorter p;
|
||||||
private final Mailbox<ChunkTaskQueueSorter.a<Runnable>> mailboxWorldGen;
|
private final Mailbox<ChunkTaskQueueSorter.a<Runnable>> mailboxWorldGen;
|
||||||
@ -219,7 +219,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
public final WorldLoadListener worldLoadListener;
|
public final WorldLoadListener worldLoadListener;
|
||||||
public final PlayerChunkMap.a chunkDistanceManager; public final PlayerChunkMap.a getChunkMapDistanceManager() { return this.chunkDistanceManager; } // Paper - OBFHELPER
|
public final PlayerChunkMap.a chunkDistanceManager; public final PlayerChunkMap.a getChunkMapDistanceManager() { return this.chunkDistanceManager; } // Paper - OBFHELPER
|
||||||
private final AtomicInteger u;
|
private final AtomicInteger u;
|
||||||
@@ -141,6 +141,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -164,6 +164,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap; // this map is absent from updateMaps since it's controlled at the start of the chunkproviderserver tick
|
public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap; // this map is absent from updateMaps since it's controlled at the start of the chunkproviderserver tick
|
||||||
public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerChunkTickRangeMap;
|
public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerChunkTickRangeMap;
|
||||||
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
||||||
@ -242,7 +242,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
|
|
||||||
void addPlayerToDistanceMaps(EntityPlayer player) {
|
void addPlayerToDistanceMaps(EntityPlayer player) {
|
||||||
int chunkX = MCUtil.getChunkCoordinate(player.locX());
|
int chunkX = MCUtil.getChunkCoordinate(player.locX());
|
||||||
@@ -157,6 +173,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -180,6 +196,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
// Paper start - optimise PlayerChunkMap#isOutsideRange
|
// Paper start - optimise PlayerChunkMap#isOutsideRange
|
||||||
this.playerChunkTickRangeMap.add(player, chunkX, chunkZ, ChunkMapDistance.MOB_SPAWN_RANGE);
|
this.playerChunkTickRangeMap.add(player, chunkX, chunkZ, ChunkMapDistance.MOB_SPAWN_RANGE);
|
||||||
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
||||||
@ -262,7 +262,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
}
|
}
|
||||||
|
|
||||||
void removePlayerFromDistanceMaps(EntityPlayer player) {
|
void removePlayerFromDistanceMaps(EntityPlayer player) {
|
||||||
@@ -169,6 +198,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -192,6 +221,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.playerMobSpawnMap.remove(player);
|
this.playerMobSpawnMap.remove(player);
|
||||||
this.playerChunkTickRangeMap.remove(player);
|
this.playerChunkTickRangeMap.remove(player);
|
||||||
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
||||||
@ -274,7 +274,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateMaps(EntityPlayer player) {
|
void updateMaps(EntityPlayer player) {
|
||||||
@@ -186,6 +220,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -209,6 +243,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
// Paper start - optimise PlayerChunkMap#isOutsideRange
|
// Paper start - optimise PlayerChunkMap#isOutsideRange
|
||||||
this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, ChunkMapDistance.MOB_SPAWN_RANGE);
|
this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, ChunkMapDistance.MOB_SPAWN_RANGE);
|
||||||
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
||||||
@ -294,7 +294,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -293,6 +340,45 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -316,6 +363,45 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
// Paper end - optimise PlayerChunkMap#isOutsideRange
|
||||||
@ -340,7 +340,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updatePlayerMobTypeMap(Entity entity) {
|
public void updatePlayerMobTypeMap(Entity entity) {
|
||||||
@@ -1101,15 +1187,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1124,15 +1210,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
completablefuture1.thenAcceptAsync((either) -> {
|
completablefuture1.thenAcceptAsync((either) -> {
|
||||||
either.mapLeft((chunk) -> {
|
either.mapLeft((chunk) -> {
|
||||||
this.u.getAndIncrement();
|
this.u.getAndIncrement();
|
||||||
@ -358,7 +358,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
});
|
});
|
||||||
return completablefuture1;
|
return completablefuture1;
|
||||||
}
|
}
|
||||||
@@ -1209,32 +1291,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1232,32 +1314,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
} // Paper
|
} // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +412,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
|
|
||||||
protected void sendChunk(EntityPlayer entityplayer, ChunkCoordIntPair chunkcoordintpair, Packet<?>[] apacket, boolean flag, boolean flag1) {
|
protected void sendChunk(EntityPlayer entityplayer, ChunkCoordIntPair chunkcoordintpair, Packet<?>[] apacket, boolean flag, boolean flag1) {
|
||||||
if (entityplayer.world == this.world) {
|
if (entityplayer.world == this.world) {
|
||||||
@@ -1242,7 +1330,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1265,7 +1353,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
PlayerChunk playerchunk = this.getVisibleChunk(chunkcoordintpair.pair());
|
PlayerChunk playerchunk = this.getVisibleChunk(chunkcoordintpair.pair());
|
||||||
|
|
||||||
if (playerchunk != null) {
|
if (playerchunk != null) {
|
||||||
@ -421,7 +421,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
|
|
||||||
if (chunk != null) {
|
if (chunk != null) {
|
||||||
this.a(entityplayer, apacket, chunk);
|
this.a(entityplayer, apacket, chunk);
|
||||||
@@ -1511,6 +1599,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1534,6 +1622,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
}
|
}
|
||||||
// Paper end - optimise isOutsideOfRange
|
// Paper end - optimise isOutsideOfRange
|
||||||
|
|
||||||
@ -429,7 +429,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
private boolean b(EntityPlayer entityplayer) {
|
private boolean b(EntityPlayer entityplayer) {
|
||||||
return entityplayer.isSpectator() && !this.world.getGameRules().getBoolean(GameRules.SPECTATORS_GENERATE_CHUNKS);
|
return entityplayer.isSpectator() && !this.world.getGameRules().getBoolean(GameRules.SPECTATORS_GENERATE_CHUNKS);
|
||||||
}
|
}
|
||||||
@@ -1538,13 +1627,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1561,13 +1650,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.removePlayerFromDistanceMaps(entityplayer); // Paper - distance maps
|
this.removePlayerFromDistanceMaps(entityplayer); // Paper - distance maps
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,7 +444,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1552,7 +1635,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1575,7 +1658,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
SectionPosition sectionposition = SectionPosition.a((Entity) entityplayer);
|
SectionPosition sectionposition = SectionPosition.a((Entity) entityplayer);
|
||||||
|
|
||||||
entityplayer.a(sectionposition);
|
entityplayer.a(sectionposition);
|
||||||
@ -453,7 +453,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
return sectionposition;
|
return sectionposition;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1597,6 +1680,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1620,6 +1703,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
int k1;
|
int k1;
|
||||||
int l1;
|
int l1;
|
||||||
|
|
||||||
@ -461,7 +461,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
if (Math.abs(i1 - i) <= this.viewDistance * 2 && Math.abs(j1 - j) <= this.viewDistance * 2) {
|
if (Math.abs(i1 - i) <= this.viewDistance * 2 && Math.abs(j1 - j) <= this.viewDistance * 2) {
|
||||||
k1 = Math.min(i, i1) - this.viewDistance;
|
k1 = Math.min(i, i1) - this.viewDistance;
|
||||||
l1 = Math.min(j, j1) - this.viewDistance;
|
l1 = Math.min(j, j1) - this.viewDistance;
|
||||||
@@ -1634,7 +1718,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1657,7 +1741,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.sendChunk(entityplayer, chunkcoordintpair1, new Packet[2], false, true);
|
this.sendChunk(entityplayer, chunkcoordintpair1, new Packet[2], false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -470,7 +470,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
|
|
||||||
this.updateMaps(entityplayer); // Paper - distance maps
|
this.updateMaps(entityplayer); // Paper - distance maps
|
||||||
|
|
||||||
@@ -1642,11 +1726,46 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1665,11 +1749,46 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<EntityPlayer> a(ChunkCoordIntPair chunkcoordintpair, boolean flag) {
|
public Stream<EntityPlayer> a(ChunkCoordIntPair chunkcoordintpair, boolean flag) {
|
||||||
@ -521,7 +521,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void addEntity(Entity entity) {
|
protected void addEntity(Entity entity) {
|
||||||
@@ -1806,6 +1925,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1829,6 +1948,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,7 +529,7 @@ index 9d414b6bbdda2a4d5a4ecdad6abb7d53860e7e71..abfe75750ea564cd56b53d3f09eb2474
|
|||||||
private void a(EntityPlayer entityplayer, Packet<?>[] apacket, Chunk chunk) {
|
private void a(EntityPlayer entityplayer, Packet<?>[] apacket, Chunk chunk) {
|
||||||
if (apacket[0] == null) {
|
if (apacket[0] == null) {
|
||||||
apacket[0] = new PacketPlayOutMapChunk(chunk, 65535);
|
apacket[0] = new PacketPlayOutMapChunk(chunk, 65535);
|
||||||
@@ -1991,7 +2111,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -2014,7 +2134,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(this.tracker.chunkX, this.tracker.chunkZ);
|
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(this.tracker.chunkX, this.tracker.chunkZ);
|
||||||
PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair.pair());
|
PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair.pair());
|
||||||
|
|
||||||
|
@ -134,10 +134,10 @@ index 03fb688fe4bdc19b4bc36b1f1d5b40c61e7bef9b..aeca6b2b9d5d73aeb6dc639b5cad2f25
|
|||||||
// Paper start - per player view distance
|
// Paper start - per player view distance
|
||||||
// there can be potential desync with player's last mapped section and the view distance map, so use the
|
// there can be potential desync with player's last mapped section and the view distance map, so use the
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index abfe75750ea564cd56b53d3f09eb247478384e2f..430273c306be19d7b5af171f392236f9f0d835a8 100644
|
index 3b72b2c88575d19ec51f46226ddcc8a15c169721..a280f4af4f997f29e81a877455a2765d6751e842 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -72,6 +72,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -95,6 +95,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
private final ChunkTaskQueueSorter p;
|
private final ChunkTaskQueueSorter p;
|
||||||
private final Mailbox<ChunkTaskQueueSorter.a<Runnable>> mailboxWorldGen;
|
private final Mailbox<ChunkTaskQueueSorter.a<Runnable>> mailboxWorldGen;
|
||||||
final Mailbox<ChunkTaskQueueSorter.a<Runnable>> mailboxMain; // Paper - private -> package private
|
final Mailbox<ChunkTaskQueueSorter.a<Runnable>> mailboxMain; // Paper - private -> package private
|
||||||
@ -150,7 +150,7 @@ index abfe75750ea564cd56b53d3f09eb247478384e2f..430273c306be19d7b5af171f392236f9
|
|||||||
public final WorldLoadListener worldLoadListener;
|
public final WorldLoadListener worldLoadListener;
|
||||||
public final PlayerChunkMap.a chunkDistanceManager; public final PlayerChunkMap.a getChunkMapDistanceManager() { return this.chunkDistanceManager; } // Paper - OBFHELPER
|
public final PlayerChunkMap.a chunkDistanceManager; public final PlayerChunkMap.a getChunkMapDistanceManager() { return this.chunkDistanceManager; } // Paper - OBFHELPER
|
||||||
private final AtomicInteger u;
|
private final AtomicInteger u;
|
||||||
@@ -259,11 +265,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -282,11 +288,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
Mailbox<Runnable> mailbox = Mailbox.a("main", iasynctaskhandler::a);
|
Mailbox<Runnable> mailbox = Mailbox.a("main", iasynctaskhandler::a);
|
||||||
|
|
||||||
this.worldLoadListener = worldloadlistener;
|
this.worldLoadListener = worldloadlistener;
|
||||||
|
@ -39,10 +39,10 @@ index 6d3b34ead9cc95dcc1152dffa8c6c4a8c7f1d58b..5cc89c0cf9e9e632212a9653391437cb
|
|||||||
|
|
||||||
if (!flag4 && this.o <= 400 && !this.q && this.r == this.tracker.onGround) {
|
if (!flag4 && this.o <= 400 && !this.q && this.r == this.tracker.onGround) {
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 430273c306be19d7b5af171f392236f9f0d835a8..71547b675bfe23c4c4a8acd75f0e26b6023bf132 100644
|
index a280f4af4f997f29e81a877455a2765d6751e842..f9252f7e9fbb8785487acf6b332f80bc43bbdfdd 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -2107,9 +2107,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -2130,9 +2130,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
public void updatePlayer(EntityPlayer entityplayer) {
|
public void updatePlayer(EntityPlayer entityplayer) {
|
||||||
org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
|
org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
|
||||||
if (entityplayer != this.tracker) {
|
if (entityplayer != this.tracker) {
|
||||||
|
@ -37,10 +37,10 @@ index b7b06e082e59f8518be2036637385c7710d524ea..71da9f00b8a969e84414066fb1852cec
|
|||||||
return chunksection == Chunk.a || chunksection.c();
|
return chunksection == Chunk.a || chunksection.c();
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index 71547b675bfe23c4c4a8acd75f0e26b6023bf132..e772095e1c44842f743661a326c2a9a8a677ab02 100644
|
index f9252f7e9fbb8785487acf6b332f80bc43bbdfdd..f1c3cb3ff8961bc688a1d38cd79b999e539cf866 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -379,7 +379,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -402,7 +402,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
player.needsChunkCenterUpdate = false;
|
player.needsChunkCenterUpdate = false;
|
||||||
player.playerConnection.sendPacket(new PacketPlayOutViewCentre(currPosX, currPosZ));
|
player.playerConnection.sendPacket(new PacketPlayOutViewCentre(currPosX, currPosZ));
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ index 71547b675bfe23c4c4a8acd75f0e26b6023bf132..e772095e1c44842f743661a326c2a9a8
|
|||||||
},
|
},
|
||||||
(EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
|
(EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
|
||||||
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newState) -> {
|
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newState) -> {
|
||||||
@@ -1932,12 +1932,112 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1955,12 +1955,112 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,10 +428,10 @@ index aeca6b2b9d5d73aeb6dc639b5cad2f2533a2de44..46462298c7d02fcf31bb8da502a3ee5d
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a164cd1530 100644
|
index f1c3cb3ff8961bc688a1d38cd79b999e539cf866..8f1bb2048f271f6a873b683b0be4b0a6f71a7ee1 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||||
@@ -352,6 +352,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -375,6 +375,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
this.playerViewDistanceTickMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets,
|
this.playerViewDistanceTickMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets,
|
||||||
(EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
|
(EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
|
||||||
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newState) -> {
|
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newState) -> {
|
||||||
@ -439,7 +439,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
if (newState.size() != 1) {
|
if (newState.size() != 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -370,7 +371,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -393,7 +394,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
}
|
}
|
||||||
ChunkCoordIntPair chunkPos = new ChunkCoordIntPair(rangeX, rangeZ);
|
ChunkCoordIntPair chunkPos = new ChunkCoordIntPair(rangeX, rangeZ);
|
||||||
PlayerChunkMap.this.world.getChunkProvider().removeTicketAtLevel(TicketType.PLAYER, chunkPos, 31, chunkPos); // entity ticking level, TODO check on update
|
PlayerChunkMap.this.world.getChunkProvider().removeTicketAtLevel(TicketType.PLAYER, chunkPos, 31, chunkPos); // entity ticking level, TODO check on update
|
||||||
@ -449,7 +449,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
this.playerViewDistanceNoTickMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets);
|
this.playerViewDistanceNoTickMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets);
|
||||||
this.playerViewDistanceBroadcastMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets,
|
this.playerViewDistanceBroadcastMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets,
|
||||||
(EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
|
(EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
|
||||||
@@ -387,6 +389,62 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -410,6 +412,62 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
});
|
});
|
||||||
// Paper end - no-tick view distance
|
// Paper end - no-tick view distance
|
||||||
}
|
}
|
||||||
@ -512,7 +512,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
|
|
||||||
public void updatePlayerMobTypeMap(Entity entity) {
|
public void updatePlayerMobTypeMap(Entity entity) {
|
||||||
if (!this.world.paperConfig.perPlayerMobSpawns) {
|
if (!this.world.paperConfig.perPlayerMobSpawns) {
|
||||||
@@ -516,6 +574,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -539,6 +597,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
List<CompletableFuture<Either<IChunkAccess, PlayerChunk.Failure>>> list = Lists.newArrayList();
|
List<CompletableFuture<Either<IChunkAccess, PlayerChunk.Failure>>> list = Lists.newArrayList();
|
||||||
int j = chunkcoordintpair.x;
|
int j = chunkcoordintpair.x;
|
||||||
int k = chunkcoordintpair.z;
|
int k = chunkcoordintpair.z;
|
||||||
@ -520,7 +520,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
|
|
||||||
for (int l = -i; l <= i; ++l) {
|
for (int l = -i; l <= i; ++l) {
|
||||||
for (int i1 = -i; i1 <= i; ++i1) {
|
for (int i1 = -i; i1 <= i; ++i1) {
|
||||||
@@ -533,6 +592,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -556,6 +615,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
}
|
}
|
||||||
|
|
||||||
ChunkStatus chunkstatus = (ChunkStatus) intfunction.apply(j1);
|
ChunkStatus chunkstatus = (ChunkStatus) intfunction.apply(j1);
|
||||||
@ -528,7 +528,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
CompletableFuture<Either<IChunkAccess, PlayerChunk.Failure>> completablefuture = playerchunk.a(chunkstatus, this);
|
CompletableFuture<Either<IChunkAccess, PlayerChunk.Failure>> completablefuture = playerchunk.a(chunkstatus, this);
|
||||||
|
|
||||||
list.add(completablefuture);
|
list.add(completablefuture);
|
||||||
@@ -997,14 +1057,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1020,14 +1080,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
};
|
};
|
||||||
|
|
||||||
CompletableFuture<NBTTagCompound> chunkSaveFuture = this.world.asyncChunkTaskManager.getChunkSaveFuture(chunkcoordintpair.x, chunkcoordintpair.z);
|
CompletableFuture<NBTTagCompound> chunkSaveFuture = this.world.asyncChunkTaskManager.getChunkSaveFuture(chunkcoordintpair.x, chunkcoordintpair.z);
|
||||||
@ -556,7 +556,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
return ret;
|
return ret;
|
||||||
// Paper end
|
// Paper end
|
||||||
}
|
}
|
||||||
@@ -1041,6 +1109,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1064,6 +1132,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
return CompletableFuture.completedFuture(Either.right(playerchunk_failure));
|
return CompletableFuture.completedFuture(Either.right(playerchunk_failure));
|
||||||
});
|
});
|
||||||
}, (runnable) -> {
|
}, (runnable) -> {
|
||||||
@ -564,7 +564,7 @@ index e772095e1c44842f743661a326c2a9a8a677ab02..5621416660d2722f26582fcecd5b61a1
|
|||||||
this.mailboxWorldGen.a(ChunkTaskQueueSorter.a(playerchunk, runnable)); // CraftBukkit - decompile error
|
this.mailboxWorldGen.a(ChunkTaskQueueSorter.a(playerchunk, runnable)); // CraftBukkit - decompile error
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1133,7 +1202,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
@@ -1156,7 +1225,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
||||||
long i = playerchunk.i().pair();
|
long i = playerchunk.i().pair();
|
||||||
|
|
||||||
playerchunk.getClass();
|
playerchunk.getClass();
|
||||||
|
Loading…
Reference in New Issue
Block a user