Skip to content

Commit 0cc7bd4

Browse files
committed
Use Player view distance for PlayerNaturallySpawnCreaturesEvent
The spigot view distance may not be correct, as the player may have a specific view distance configured.
1 parent 78fd8f9 commit 0cc7bd4

12 files changed

+64
-63
lines changed

patches/server/0009-MC-Utils.patch

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3311,7 +3311,7 @@ index 0000000000000000000000000000000000000000..4123edddc556c47f3f8d83523c125fd2
33113311
+}
33123312
diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java b/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java
33133313
new file mode 100644
3314-
index 0000000000000000000000000000000000000000..49fe9eed5d5d08abd6e9778fe0d0545f35552435
3314+
index 0000000000000000000000000000000000000000..f7cd0aa43d0b9249d0a317fab41fefa0d951bca0
33153315
--- /dev/null
33163316
+++ b/src/main/java/ca/spottedleaf/moonrise/common/util/ChunkSystem.java
33173317
@@ -0,0 +1,288 @@
@@ -3582,15 +3582,15 @@ index 0000000000000000000000000000000000000000..49fe9eed5d5d08abd6e9778fe0d0545f
35823582
+ }
35833583
+
35843584
+ public static int getSendViewDistance(final ServerPlayer player) {
3585-
+ return getLoadViewDistance(player);
3585+
+ return getLoadViewDistance(player) - 1;
35863586
+ }
35873587
+
35883588
+ public static int getLoadViewDistance(final ServerPlayer player) {
35893589
+ final ServerLevel level = player.serverLevel();
35903590
+ if (level == null) {
3591-
+ return org.bukkit.Bukkit.getViewDistance();
3591+
+ return org.bukkit.Bukkit.getViewDistance() + 1;
35923592
+ }
3593-
+ return level.chunkSource.chunkMap.getPlayerViewDistance(player);
3593+
+ return level.chunkSource.chunkMap.serverViewDistance + 1;
35943594
+ }
35953595
+
35963596
+ public static int getTickViewDistance(final ServerPlayer player) {
@@ -4695,7 +4695,7 @@ index 46cab7a8c7b87ab01b26074b04f5a02b3907cfc4..49019b4a9bc4e634d54a9b0acaf9229a
46954695
+ // Paper end
46964696
}
46974697
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
4698-
index 0ea9eba1367858dfa5284524a8dd2f79daf6fc69..18b64c00fa73e233bf41f519db54a1d43c2a8b1f 100644
4698+
index 87da4ff63294735bfcbfa8442fb8ae7196b0f197..2eb155d3df2e34c050fd28c5a64015e6e1232851 100644
46994699
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
47004700
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
47014701
@@ -215,7 +215,7 @@ public class GlobalConfiguration extends ConfigurationPart {

patches/server/0164-PlayerNaturallySpawnCreaturesEvent.patch

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,23 @@ from triggering monster spawns on a server.
99
Also a highly more effecient way to blanket block spawns in a world
1010

1111
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
12-
index 261943f1f188643793a72bd239dfc5fe604e3b99..985ba48a5ac027d3c3dcd9b710b53748508966fb 100644
12+
index 261943f1f188643793a72bd239dfc5fe604e3b99..ebe6c631d772cf41038701aafbe4e0bbb024f7f5 100644
1313
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1414
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
15-
@@ -1098,7 +1098,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
16-
chunkRange = (chunkRange > this.level.spigotConfig.viewDistance) ? (byte) this.level.spigotConfig.viewDistance : chunkRange;
17-
chunkRange = (chunkRange > 8) ? 8 : chunkRange;
15+
@@ -1094,11 +1094,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
16+
}
1817

18+
private boolean anyPlayerCloseEnoughForSpawningInternal(ChunkPos chunkcoordintpair, boolean reducedRange) {
19+
- int chunkRange = this.level.spigotConfig.mobSpawnRange;
20+
- chunkRange = (chunkRange > this.level.spigotConfig.viewDistance) ? (byte) this.level.spigotConfig.viewDistance : chunkRange;
21+
- chunkRange = (chunkRange > 8) ? 8 : chunkRange;
22+
-
1923
- double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D;
20-
+ final int finalChunkRange = chunkRange; // Paper for lambda below
21-
+ //double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D; // Paper - use from event
22-
+ double blockRange = 16384.0D; // Paper
24+
+ double blockRange; // Paper - use from event
2325
// Spigot end
2426
Iterator iterator = this.playerMap.getAllPlayers().iterator();
2527

26-
@@ -1110,6 +1112,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
28+
@@ -1110,6 +1106,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
2729
}
2830

2931
entityplayer = (ServerPlayer) iterator.next();
@@ -40,18 +42,17 @@ index 261943f1f188643793a72bd239dfc5fe604e3b99..985ba48a5ac027d3c3dcd9b710b53748
4042

4143
return true;
4244
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
43-
index 2e2976efcf99de269f67dec2c87cb910ff280562..5749698b0c9647295e0be6f7d532d39c18432539 100644
45+
index 2e2976efcf99de269f67dec2c87cb910ff280562..f4fa64ab18573cb9a22a9bfb79a351c388d1aaa5 100644
4446
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
4547
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
46-
@@ -501,6 +501,15 @@ public class ServerChunkCache extends ChunkSource {
48+
@@ -501,6 +501,14 @@ public class ServerChunkCache extends ChunkSource {
4749
List list1;
4850

4951
if (flag && (this.spawnEnemies || this.spawnFriendlies)) {
5052
+ // Paper start - PlayerNaturallySpawnCreaturesEvent
51-
+ int chunkRange = level.spigotConfig.mobSpawnRange;
52-
+ chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange;
53-
+ chunkRange = Math.min(chunkRange, 8);
5453
+ for (ServerPlayer entityPlayer : this.level.players()) {
54+
+ int chunkRange = Math.min(level.spigotConfig.mobSpawnRange, entityPlayer.getBukkitEntity().getViewDistance());
55+
+ chunkRange = Math.min(chunkRange, 8);
5556
+ entityPlayer.playerNaturallySpawnedEvent = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(entityPlayer.getBukkitEntity(), (byte) chunkRange);
5657
+ entityPlayer.playerNaturallySpawnedEvent.callEvent();
5758
+ }
@@ -60,7 +61,7 @@ index 2e2976efcf99de269f67dec2c87cb910ff280562..5749698b0c9647295e0be6f7d532d39c
6061

6162
list1 = NaturalSpawner.getFilteredSpawningCategories(spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1, this.level); // CraftBukkit
6263
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
63-
index b99bd43bf5185bed21fad7dac31baf1a30bdd1fe..98aeafcc51e23a7534c8d57e4db0eb58abb3f30b 100644
64+
index 0432304139fada99dff884ebf8d08dbf9afc45c7..8fd3802d8e293e35478666bd4e921d58e1ce5b41 100644
6465
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
6566
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
6667
@@ -314,6 +314,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {

patches/server/0306-Tracking-Range-Improvements.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ Sets tracking range of watermobs to animals instead of misc and simplifies code
88
Also ignores Enderdragon, defaulting it to Mojang's setting
99

1010
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
11-
index 985ba48a5ac027d3c3dcd9b710b53748508966fb..5f85d7f7ec57fc1b0375e62a8e8e3e8783f34193 100644
11+
index ebe6c631d772cf41038701aafbe4e0bbb024f7f5..bf9e2851bdc77339bde1fd15c1bad66b8f9e3193 100644
1212
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1313
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
14-
@@ -1598,6 +1598,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
14+
@@ -1592,6 +1592,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
1515
while (iterator.hasNext()) {
1616
Entity entity = (Entity) iterator.next();
1717
int j = entity.getType().clientTrackingRange() * 16;

patches/server/0328-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ Suspected case would be around the technique used in .stopRiding
77
Stack will identify any causer of this and warn instead of crashing.
88

99
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
10-
index 5f85d7f7ec57fc1b0375e62a8e8e3e8783f34193..396310a51480cf0d1ea4c0959d3f8e4ed77b99e3 100644
10+
index bf9e2851bdc77339bde1fd15c1bad66b8f9e3193..48e848e407e4e78e05c35a5cb2393bccc6de3a4f 100644
1111
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1212
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
13-
@@ -1298,6 +1298,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
13+
@@ -1292,6 +1292,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
1414

1515
public void addEntity(Entity entity) {
1616
org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot

patches/server/0339-Fire-PlayerJoinEvent-when-Player-is-actually-ready.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ delays anymore.
3131
public net.minecraft.server.level.ChunkMap addEntity(Lnet/minecraft/world/entity/Entity;)V
3232

3333
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
34-
index 396310a51480cf0d1ea4c0959d3f8e4ed77b99e3..0f8fc275af95750871aa6917aa12053f75c112f7 100644
34+
index 48e848e407e4e78e05c35a5cb2393bccc6de3a4f..2a216485522a63298e239074ef5bdfa1101fa9d6 100644
3535
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
3636
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
37-
@@ -1305,6 +1305,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
37+
@@ -1299,6 +1299,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
3838
return;
3939
}
4040
// Paper end - ignore and warn about illegal addEntity calls instead of crashing server
@@ -43,7 +43,7 @@ index 396310a51480cf0d1ea4c0959d3f8e4ed77b99e3..0f8fc275af95750871aa6917aa12053f
4343
EntityType<?> entitytypes = entity.getType();
4444
int i = entitytypes.clientTrackingRange() * 16;
4545
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
46-
index 9911e231ad021286f2da90057b06874f7b4e3b4d..807068fc6065f71961d34cb4f18b6eb39ae49637 100644
46+
index eebf44c7124c4f48b6d48562a00633b1e8ff9b00..8c80a852ed00c2bf79bb68da9d535af425893deb 100644
4747
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
4848
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
4949
@@ -317,6 +317,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {
@@ -55,7 +55,7 @@ index 9911e231ad021286f2da90057b06874f7b4e3b4d..807068fc6065f71961d34cb4f18b6eb3
5555
// CraftBukkit end
5656
public boolean isRealPlayer; // Paper
5757
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
58-
index ad4f5a4e00b9b517841acd0b4ff5088e45451bf4..4ff14dc6996634b0fcd365f76055023601ad2be0 100644
58+
index e137278f9dc02eefaaf7071a3219436a94cfcfac..ac5725230b04bc1a333863e251fe86580f909ea9 100644
5959
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
6060
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
6161
@@ -299,6 +299,13 @@ public abstract class PlayerList {

patches/server/0600-Oprimise-map-impl-for-tracked-players.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ Reference2BooleanOpenHashMap is going to have
77
better lookups than HashMap.
88

99
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
10-
index 0f8fc275af95750871aa6917aa12053f75c112f7..51a6735b35e73175680e61c2d67d4adbedf305c9 100644
10+
index 2a216485522a63298e239074ef5bdfa1101fa9d6..fde03e0e5cd42339e5bfbeb60670139af5f56e1c 100644
1111
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1212
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
13-
@@ -1514,7 +1514,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
13+
@@ -1508,7 +1508,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
1414
final Entity entity;
1515
private final int range;
1616
SectionPos lastSectionPos;

patches/server/0766-Player-Entity-Tracking-Events.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Subject: [PATCH] Player Entity Tracking Events
55

66

77
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
8-
index 51a6735b35e73175680e61c2d67d4adbedf305c9..8b5d11aceb77135c917c3581f4db792ef4b647ec 100644
8+
index fde03e0e5cd42339e5bfbeb60670139af5f56e1c..bf88c5de30e6cde87099dab546e5d1bd817134a2 100644
99
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1010
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
11-
@@ -1586,7 +1586,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
11+
@@ -1580,7 +1580,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
1212
// CraftBukkit end
1313
if (flag) {
1414
if (this.seenBy.add(player.connection)) {

patches/server/0852-Configurable-entity-tracking-range-by-Y-coordinate.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ Subject: [PATCH] Configurable entity tracking range by Y coordinate
66
Options to configure entity tracking by Y coordinate, also for each entity category.
77

88
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
9-
index 8b5d11aceb77135c917c3581f4db792ef4b647ec..5b993cb8a99c6a0257b9d3d93162f9b2fff552b0 100644
9+
index bf88c5de30e6cde87099dab546e5d1bd817134a2..51c52aeb3724c919443b7f5aa574d64983b57c49 100644
1010
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1111
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
12-
@@ -1577,7 +1577,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
12+
@@ -1571,7 +1571,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
1313
double d0 = (double) Math.min(this.getEffectiveRange(), i * 16);
1414
double d1 = vec3d.x * vec3d.x + vec3d.z * vec3d.z;
1515
double d2 = d0 * d0;

patches/server/0884-Don-t-check-if-we-can-see-non-visible-entities.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Subject: [PATCH] Don't check if we can see non-visible entities
55

66

77
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
8-
index 5b993cb8a99c6a0257b9d3d93162f9b2fff552b0..7483f9f2639c58a4f43e264211791f4377e1db64 100644
8+
index 51c52aeb3724c919443b7f5aa574d64983b57c49..a76b53c6f0640f2d3c73ee48d584ce747e010776 100644
99
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
1010
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
11-
@@ -1590,7 +1590,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
11+
@@ -1584,7 +1584,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
1212
// Paper end - Configurable entity tracking range by Y
1313

1414
// CraftBukkit start - respect vanish API

patches/server/0913-Reduce-allocation-of-Vec3D-by-entity-tracker.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ index a043ac10834562d357ef0b5aded2e916e2a0d056..74276c368016fcc4dbf9579b2ecbadc9
1818
@VisibleForTesting
1919
static long encode(double value) {
2020
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
21-
index 7483f9f2639c58a4f43e264211791f4377e1db64..7317c353edab8b11d9d94e257f968ac49284f47a 100644
21+
index a76b53c6f0640f2d3c73ee48d584ce747e010776..16e55cc94c8f6e204e4b7ab6ad8d32a6c443357f 100644
2222
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
2323
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
24-
@@ -1572,10 +1572,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
24+
@@ -1566,10 +1566,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
2525
public void updatePlayer(ServerPlayer player) {
2626
org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
2727
if (player != this.entity) {

0 commit comments

Comments
 (0)