Add a config to delay generation requests, for cases when gen tasks are not filled properly yet
This commit is contained in:
@@ -915,6 +915,14 @@ public class Config
|
||||
+ "")
|
||||
.build();
|
||||
|
||||
public static ConfigEntry<Integer> fullDataRequestBeginDelay = new ConfigEntry.Builder<Integer>()
|
||||
.setMinDefaultMax(0, 3, 10)
|
||||
.comment(""
|
||||
+ "Adds a delay in seconds before sending LOD requests, when generation is enabled. \n"
|
||||
+ "Increase this value if initial generation starts too far away. \n"
|
||||
+ "")
|
||||
.build();
|
||||
|
||||
/**
|
||||
* Intentionally disabled.
|
||||
* @see #enablePostRelogUpdate
|
||||
|
||||
+8
@@ -2,6 +2,7 @@ package com.seibel.distanthorizons.core.generation;
|
||||
|
||||
import com.google.common.base.Stopwatch;
|
||||
import com.seibel.distanthorizons.core.config.Config;
|
||||
import com.seibel.distanthorizons.core.config.types.ConfigEntry;
|
||||
import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.ChunkSizedFullDataAccessor;
|
||||
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFullDataSource;
|
||||
import com.seibel.distanthorizons.core.generation.tasks.IWorldGenTaskTracker;
|
||||
@@ -26,6 +27,7 @@ import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.annotation.CheckForNull;
|
||||
import java.awt.*;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.*;
|
||||
@@ -42,6 +44,11 @@ public class WorldRemoteGenerationQueue implements IWorldGenerationQueue, IDebug
|
||||
private final ClientNetworkState networkState;
|
||||
private final IDhClientLevel level;
|
||||
|
||||
// Used to prevent requests for section very far away, as result of request list not completely filled.
|
||||
// Kinda a hack, since queue is not notified when file handler is done with feeding sections to generate
|
||||
private static final ConfigEntry<Integer> REQUEST_BEGIN_DELAY = Config.Client.Advanced.Multiplayer.ServerNetworking.fullDataRequestBeginDelay;
|
||||
private final Stopwatch requestBeginStopwatch = Stopwatch.createStarted();
|
||||
|
||||
private volatile CompletableFuture<Void> generatorClosingFuture = null;
|
||||
|
||||
private final ConcurrentMap<DhSectionPos, WorldGenQueueEntry> waitingTasks = new ConcurrentHashMap<>();
|
||||
@@ -103,6 +110,7 @@ public class WorldRemoteGenerationQueue implements IWorldGenerationQueue, IDebug
|
||||
public void startGenerationQueueAndSetTargetPos(DhBlockPos2D targetPos)
|
||||
{
|
||||
if (generatorClosingFuture != null || !networkState.getClient().isReady()) return;
|
||||
if (requestBeginStopwatch.elapsed(TimeUnit.SECONDS) < REQUEST_BEGIN_DELAY.get()) return;
|
||||
|
||||
while (getWaitingTaskCount() > getInProgressTaskCount()
|
||||
&& getInProgressTaskCount() < this.networkState.config.fullDataRequestConcurrencyLimit
|
||||
|
||||
@@ -348,7 +348,8 @@
|
||||
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableServerNetworking": "Enable Server Networking",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.fullDataRequestConcurrencyLimit": "Sections - request concurrency limit",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.genTaskPriorityRequestRateLimit": "Generation task priority - request rate limit",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.genTaskPriorityRequestRateLimit": "Generation task priority - request rate limit",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.fullDataRequestBeginDelay": "Generation request begin delay",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableRealTimeUpdates": "Enable Real Time Updates",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enablePostRelogUpdates": "Enable Post Relog Updates",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.serverPort": "Server Port",
|
||||
|
||||
Reference in New Issue
Block a user