aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PlayerChunkMap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Client/PlayerChunkMap.cpp')
-rw-r--r--Minecraft.Client/PlayerChunkMap.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/Minecraft.Client/PlayerChunkMap.cpp b/Minecraft.Client/PlayerChunkMap.cpp
index bcc3f6ba..ddf2bae2 100644
--- a/Minecraft.Client/PlayerChunkMap.cpp
+++ b/Minecraft.Client/PlayerChunkMap.cpp
@@ -792,6 +792,14 @@ void PlayerChunkMap::setRadius(int newRadius)
int xc = static_cast<int>(player->x) >> 4;
int zc = static_cast<int>(player->z) >> 4;
+ for (auto it = addRequests.begin(); it != addRequests.end(); )
+ {
+ if (it->player == player)
+ it = addRequests.erase(it);
+ else
+ ++it;
+ }
+
for (int x = xc - newRadius; x <= xc + newRadius; x++)
for (int z = zc - newRadius; z <= zc + newRadius; z++)
{
@@ -801,9 +809,26 @@ void PlayerChunkMap::setRadius(int newRadius)
getChunkAndAddPlayer(x, z, player);
}
}
+
+ // Remove chunks that are outside the new radius
+ for (int x = xc - radius; x <= xc + radius; x++)
+ {
+ for (int z = zc - radius; z <= zc + radius; z++)
+ {
+ if (x < xc - newRadius || x > xc + newRadius || z < zc - newRadius || z > zc + newRadius)
+ {
+ getChunkAndRemovePlayer(x, z, player);
+ }
+ }
+ }
}
}
+ if (newRadius < radius)
+ {
+ level->cache->dropAll();
+ }
+
assert(radius <= MAX_VIEW_DISTANCE);
assert(radius >= MIN_VIEW_DISTANCE);
this->radius = newRadius;