diff --git a/src/main/java/org/ultramine/server/chunk/ChunkGC.java b/src/main/java/org/ultramine/server/chunk/ChunkGC.java index 0cd3197..2653626 100644 --- a/src/main/java/org/ultramine/server/chunk/ChunkGC.java +++ b/src/main/java/org/ultramine/server/chunk/ChunkGC.java @@ -9,6 +9,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.Chunk; @@ -38,8 +39,7 @@ public void onTick() { int confCacheSize = world.getConfig().chunkLoading.chunkCacheSize; - int chunksPerPlayer = (int)Math.pow(world.getViewDistance()*2 + 1, 2); - int boundChunks = world.playerEntities.size()*chunksPerPlayer + world.getPersistentChunks().size(); + int boundChunks = countPlayerBoundChunks() + world.getPersistentChunks().size(); int chunkLimit = boundChunks + confCacheSize + MAX_CHUNKS_PER_OP; int curTime = world.func_73046_m().getTickCounter(); @@ -79,6 +79,17 @@ lastChunkCount = provider.chunkMap.size() - provider.unloadQueue.size(); } } + + private int countPlayerBoundChunks() + { + int boundChunks = 0; + for(Object player : world.playerEntities) + { + int vd = ((EntityPlayerMP)player).getChunkMgr().getViewDistance() * 2 + 1; + boundChunks += vd*vd; + } + return boundChunks; + } public void forceCollect() { diff --git a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java index 11a7fef..e99c1ea 100644 --- a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java +++ b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java @@ -70,7 +70,7 @@ this.player = player; } - private int getViewDistance() + public int getViewDistance() { return Math.min(manager == null ? 10 : manager.getWorldServer().getViewDistance(), player.getRenderDistance()); }