spigot/CraftBukkit-Patches/0009-Fix-Mob-Spawning-Relative-to-View-Distance.patch

69 lines
3.4 KiB
Diff
Raw Normal View History

2021-07-07 00:00:00 +10:00
From d1b37ea8c6311a440dd07946df88762e3d7d5579 Mon Sep 17 00:00:00 2001
2018-07-15 10:00:00 +10:00
From: md_5 <md_5@live.com.au>
Date: Fri, 21 Jun 2013 17:29:54 +1000
Subject: [PATCH] Fix Mob Spawning Relative to View Distance
Changes the mob spawning algorithm to properly account for view distance and the range around players.
Needs better documentation.
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
2021-07-07 00:00:00 +10:00
index 99e5bd084..a2c6f56a0 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
2021-07-07 00:00:00 +10:00
@@ -431,7 +431,7 @@ public class ChunkProviderServer extends IChunkProvider {
2020-06-25 10:00:00 +10:00
2021-06-11 15:00:00 +10:00
if (this.level.a(chunkcoordintpair) && !this.chunkMap.isOutsideOfRange(chunkcoordintpair)) {
chunk.setInhabitedTime(chunk.getInhabitedTime() + j);
- if (flag1 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isInBounds(chunkcoordintpair)) {
+ if (flag1 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isInBounds(chunk.getPos()) && !this.chunkMap.isOutsideOfRange(chunkcoordintpair, true)) { // Spigot
SpawnerCreature.a(this.level, chunk, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag2);
}
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
2021-07-07 00:00:00 +10:00
index 87aa223a3..b8f605a4b 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
2021-07-07 00:00:00 +10:00
@@ -915,10 +915,21 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.e {
2019-04-23 12:00:00 +10:00
}
2018-07-15 10:00:00 +10:00
2019-07-20 09:00:00 +10:00
boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair) {
+ // Spigot start
+ return isOutsideOfRange(chunkcoordintpair, false);
+ }
+
2019-06-02 19:56:20 +10:00
+ boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair, boolean reducedRange) {
2021-06-11 15:00:00 +10:00
+ int chunkRange = level.spigotConfig.mobSpawnRange;
+ chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange;
2019-04-23 12:00:00 +10:00
+ chunkRange = (chunkRange > 8) ? 8 : chunkRange;
+
+ double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D;
2019-04-23 12:00:00 +10:00
+ // Spigot end
2019-06-21 20:00:00 +10:00
long i = chunkcoordintpair.pair();
2021-06-11 15:00:00 +10:00
return !this.distanceManager.d(i) ? true : this.playerMap.a(i).noneMatch((entityplayer) -> {
2019-04-23 12:00:00 +10:00
- return !entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < 16384.0D;
+ return !entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < blockRange; // Spigot
});
}
2018-07-15 10:00:00 +10:00
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
2021-01-31 10:08:46 +11:00
index 8db1bc203..e780cc473 100644
2018-07-15 10:00:00 +10:00
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
@@ -161,4 +161,11 @@ public class SpigotWorldConfig
2021-01-31 10:08:46 +11:00
viewDistance = Math.max( Math.min( viewDistance, 32 ), 3 );
2018-07-15 10:00:00 +10:00
log( "View Distance: " + viewDistance );
}
+
+ public byte mobSpawnRange;
+ private void mobSpawnRange()
+ {
2018-08-06 10:32:15 +10:00
+ mobSpawnRange = (byte) getInt( "mob-spawn-range", 6 );
2018-07-15 10:00:00 +10:00
+ log( "Mob Spawn Range: " + mobSpawnRange );
+ }
}
--
2.25.1
2018-07-15 10:00:00 +10:00