mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Upstream has released updates that appears to apply and compile correctly Paper Changes: 5ce1dd48 Add hand to BlockMultiPlaceEvent (fixes #2997) (#2998) 3ad47bcf Reduce chunk range timers 793bae0d Updated Upstream (CraftBukkit)
138 lines
8.3 KiB
Diff
138 lines
8.3 KiB
Diff
From 349a2932baf2172b796df1b0956629a11286c9b8 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
Date: Sun, 1 Mar 2020 20:07:54 -0600
|
|
Subject: [PATCH] Optimize PlayerChunkMap
|
|
|
|
---
|
|
.../net/minecraft/server/ChunkMapDistance.java | 12 ++++++++++--
|
|
.../minecraft/server/ChunkProviderServer.java | 17 +++++------------
|
|
.../net/minecraft/server/PlayerChunkMap.java | 17 ++++++-----------
|
|
3 files changed, 21 insertions(+), 25 deletions(-)
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
|
index 73d1570765..78735ba56e 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java
|
|
@@ -31,7 +31,7 @@ public abstract class ChunkMapDistance {
|
|
private final Long2ObjectMap<ObjectSet<EntityPlayer>> c = new Long2ObjectOpenHashMap();
|
|
public final Long2ObjectOpenHashMap<ArraySetSorted<Ticket<?>>> tickets = new Long2ObjectOpenHashMap();
|
|
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 ChunkMapDistance.b getPlayerDistanceChunkMap() { return f; } // Purpur - OBFHELPER
|
|
private final ChunkMapDistance.c g = new ChunkMapDistance.c(33);
|
|
private final java.util.Queue<PlayerChunk> pendingChunkUpdates = new java.util.LinkedList<>(); // PAIL pendingChunkUpdates // Paper - use a queue
|
|
private final ChunkTaskQueueSorter i;
|
|
@@ -258,6 +258,13 @@ public abstract class ChunkMapDistance {
|
|
return this.f.a.size();
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ public boolean hasPlayersNearby(long chunk, boolean update) {
|
|
+ if (update) getPlayerDistanceChunkMap().update();
|
|
+ return getPlayerDistanceChunkMap().getChunks().containsKey(chunk);
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
public boolean d(long i) {
|
|
this.f.a();
|
|
return this.f.a.containsKey(i);
|
|
@@ -425,7 +432,7 @@ public abstract class ChunkMapDistance {
|
|
|
|
class b extends ChunkMap {
|
|
|
|
- protected final Long2ByteMap a = new Long2ByteOpenHashMap();
|
|
+ protected final Long2ByteMap a = new Long2ByteOpenHashMap(); protected Long2ByteMap getChunks() { return a; } // Purpur - OBFHELPER
|
|
protected final int b;
|
|
|
|
protected b(int i) {
|
|
@@ -465,6 +472,7 @@ public abstract class ChunkMapDistance {
|
|
return objectset != null && !objectset.isEmpty();
|
|
}
|
|
|
|
+ public void update() { a(); } // Purpur - OBFHELPER
|
|
public void a() {
|
|
this.b(Integer.MAX_VALUE);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index 76c7f4a50f..dff40c04cd 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -648,19 +648,17 @@ public class ChunkProviderServer extends IChunkProvider {
|
|
this.world.timings.countNaturalMobs.stopTiming(); // Paper - timings
|
|
this.world.getMethodProfiler().exit();
|
|
//Paper start - call player naturally spawn event
|
|
- int chunkRange = world.spigotConfig.mobSpawnRange;
|
|
- chunkRange = (chunkRange > world.spigotConfig.viewDistance) ? (byte) world.spigotConfig.viewDistance : chunkRange;
|
|
- chunkRange = Math.min(chunkRange, 8);
|
|
+ byte chunkRange = (byte) Math.min(Math.min(world.spigotConfig.mobSpawnRange, world.spigotConfig.viewDistance), 8); // Purpur
|
|
for (EntityPlayer entityPlayer : this.world.players) {
|
|
- entityPlayer.playerNaturallySpawnedEvent = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(entityPlayer.getBukkitEntity(), (byte) chunkRange);
|
|
+ entityPlayer.playerNaturallySpawnedEvent = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(entityPlayer.getBukkitEntity(), chunkRange); // Purpur - remove pointless cast
|
|
entityPlayer.playerNaturallySpawnedEvent.callEvent();
|
|
};
|
|
// Paper end
|
|
this.playerChunkMap.f().forEach((playerchunk) -> {
|
|
- Optional<Chunk> optional = ((Either) playerchunk.b().getNow(PlayerChunk.UNLOADED_CHUNK)).left();
|
|
+ Optional<Chunk> optional = playerchunk.b().getNow(PlayerChunk.UNLOADED_CHUNK).left(); // Purpur - remove pointless cast
|
|
|
|
if (optional.isPresent()) {
|
|
- Chunk chunk = (Chunk) optional.get();
|
|
+ Chunk chunk = optional.get(); // Purpur - remove pointless cast
|
|
|
|
this.world.getMethodProfiler().enter("broadcast");
|
|
this.world.timings.broadcastChunkUpdates.startTiming(); // Paper - timings
|
|
@@ -676,12 +674,7 @@ public class ChunkProviderServer extends IChunkProvider {
|
|
if (flag1 && (this.allowMonsters || this.allowAnimals) && this.world.getWorldBorder().isInBounds(chunk.getPos()) && !this.playerChunkMap.isOutsideOfRange(chunkcoordintpair, true)) { // Spigot
|
|
this.world.getMethodProfiler().enter("spawner");
|
|
this.world.timings.mobSpawn.startTiming(); // Spigot
|
|
- EnumCreatureType[] aenumcreaturetype1 = aenumcreaturetype;
|
|
- int i1 = aenumcreaturetype.length;
|
|
-
|
|
- for (int j1 = 0; j1 < i1; ++j1) {
|
|
- EnumCreatureType enumcreaturetype = aenumcreaturetype1[j1];
|
|
-
|
|
+ for (EnumCreatureType enumcreaturetype : aenumcreaturetype) { // Purpur
|
|
// CraftBukkit start - Use per-world spawn limits
|
|
int limit = enumcreaturetype.b();
|
|
switch (enumcreaturetype) {
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
index 57bea926a6..44c2ca1184 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
@@ -1266,26 +1266,21 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
|
}
|
|
|
|
boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair, boolean reducedRange) {
|
|
- int chunkRange = world.spigotConfig.mobSpawnRange;
|
|
- chunkRange = (chunkRange > world.spigotConfig.viewDistance) ? (byte) world.spigotConfig.viewDistance : chunkRange;
|
|
- chunkRange = (chunkRange > 8) ? 8 : chunkRange;
|
|
-
|
|
- final int finalChunkRange = chunkRange; // Paper for lambda below
|
|
- //double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D; // Paper - use from event
|
|
+ // Purpur - removed a bunch of crap not used anymore
|
|
// Spigot end
|
|
long i = chunkcoordintpair.pair();
|
|
|
|
- return !this.chunkDistanceManager.d(i) ? true : this.playerMap.a(i).noneMatch((entityplayer) -> {
|
|
+ return !this.chunkDistanceManager.hasPlayersNearby(i, !reducedRange) || this.playerMap.a(i).noneMatch((entityplayer) -> { // Purpur
|
|
// Paper start -
|
|
- com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event;
|
|
+ // com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event // Purpur - moved down
|
|
double blockRange = 16384.0D;
|
|
if (reducedRange) {
|
|
- event = entityplayer.playerNaturallySpawnedEvent;
|
|
+ com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event = entityplayer.playerNaturallySpawnedEvent; // Purpur
|
|
if (event == null || event.isCancelled()) return false;
|
|
- blockRange = (double) ((event.getSpawnRadius() << 4) * (event.getSpawnRadius() << 4));
|
|
+ blockRange = (event.getSpawnRadius() << 4) * (event.getSpawnRadius() << 4); // Purpur - removed pointless cast
|
|
}
|
|
|
|
- return (!entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < blockRange); // Spigot
|
|
+ return !entityplayer.isSpectator() && a(chunkcoordintpair, entityplayer) < blockRange; // Spigot // Purpur - remove pointless cast
|
|
// Paper end
|
|
});
|
|
}
|
|
--
|
|
2.24.0
|
|
|