mirror of
https://hub.spigotmc.org/stash/scm/spigot/spigot.git
synced 2025-08-31 21:49:13 +00:00
68 lines
3.4 KiB
Diff
68 lines
3.4 KiB
Diff
From 986b7bd53aee1a28617c4df059648da3b822ffc8 Mon Sep 17 00:00:00 2001
|
|
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.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
|
index d57a6b197..6e0d5e95e 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
|
@@ -435,7 +435,7 @@ public class ChunkProviderServer extends IChunkProvider {
|
|
|
|
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);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
|
index 68333dcac..fc7e26802 100644
|
|
--- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
|
@@ -914,10 +914,21 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.e {
|
|
}
|
|
|
|
boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair) {
|
|
+ // Spigot start
|
|
+ return isOutsideOfRange(chunkcoordintpair, false);
|
|
+ }
|
|
+
|
|
+ boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair, boolean reducedRange) {
|
|
+ int chunkRange = level.spigotConfig.mobSpawnRange;
|
|
+ chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange;
|
|
+ chunkRange = (chunkRange > 8) ? 8 : chunkRange;
|
|
+
|
|
+ double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D;
|
|
+ // Spigot end
|
|
long i = chunkcoordintpair.pair();
|
|
|
|
return !this.distanceManager.d(i) ? true : this.playerMap.a(i).noneMatch((entityplayer) -> {
|
|
- return !entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < 16384.0D;
|
|
+ return !entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < blockRange; // Spigot
|
|
});
|
|
}
|
|
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index 8db1bc203..e780cc473 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -161,4 +161,11 @@ public class SpigotWorldConfig
|
|
viewDistance = Math.max( Math.min( viewDistance, 32 ), 3 );
|
|
log( "View Distance: " + viewDistance );
|
|
}
|
|
+
|
|
+ public byte mobSpawnRange;
|
|
+ private void mobSpawnRange()
|
|
+ {
|
|
+ mobSpawnRange = (byte) getInt( "mob-spawn-range", 6 );
|
|
+ log( "Mob Spawn Range: " + mobSpawnRange );
|
|
+ }
|
|
}
|
|
--
|
|
2.25.1
|
|
|