Change naming of rate limit related items
This commit is contained in:
@@ -165,7 +165,7 @@ public class Config
|
||||
.setMinDefaultMax(32, 128, 4096)
|
||||
.comment("" +
|
||||
"The radius of the mod's render distance. (measured in chunks)\n" +
|
||||
"On server changes the distance players will receive real time updates for, if enabled." +
|
||||
"On server changes the distance players will receive real-time updates for, if enabled." +
|
||||
"\n" +
|
||||
"Note for servers:\n" +
|
||||
"This setting does not prevent players from generating farther out.\n" +
|
||||
@@ -1013,11 +1013,12 @@ public class Config
|
||||
|
||||
|
||||
public static ConfigUIComment generationSectionNote = new ConfigUIComment();
|
||||
public static ConfigEntry<Integer> generationRequestRCLimit = new ConfigEntry.Builder<Integer>()
|
||||
.setServersideShortName("generationRequestRCLimit")
|
||||
public static ConfigEntry<Integer> generationRequestRateLimit = new ConfigEntry.Builder<Integer>()
|
||||
.setServersideShortName("generationRequestRateLimit")
|
||||
.setMinDefaultMax(1, 20, 100)
|
||||
.comment(""
|
||||
+ "Limits the amount of generation requests the server will handle."
|
||||
+ "How many LOD generation requests per second should a client send? \n"
|
||||
+ "Also limits the amount of player's requests allowed to stay in the server's queue."
|
||||
+ "")
|
||||
.build();
|
||||
|
||||
@@ -1032,20 +1033,21 @@ public class Config
|
||||
.build();
|
||||
|
||||
|
||||
public static ConfigUIComment loginDataSyncSectionNote = new ConfigUIComment();
|
||||
public static ConfigEntry<Boolean> enableLoginDataSync = new ConfigEntry.Builder<Boolean>()
|
||||
.setServersideShortName("enableLoginDataSync")
|
||||
public static ConfigUIComment syncOnLoginSectionNote = new ConfigUIComment();
|
||||
public static ConfigEntry<Boolean> synchronizeOnLogin = new ConfigEntry.Builder<Boolean>()
|
||||
.setServersideShortName("synchronizeOnLogin")
|
||||
.set(false)
|
||||
.comment(""
|
||||
+ "If true, clients will receive updated LODs on join if any changes occured since last join."
|
||||
+ "If true, clients will receive updated LODs on join if any changes occurred since last join."
|
||||
+ "")
|
||||
.build();
|
||||
|
||||
public static ConfigEntry<Integer> loginDataSyncRCLimit = new ConfigEntry.Builder<Integer>()
|
||||
.setServersideShortName("loginDataSyncRCLimit")
|
||||
public static ConfigEntry<Integer> syncOnLoginRateLimit = new ConfigEntry.Builder<Integer>()
|
||||
.setServersideShortName("syncOnLoginRateLimit")
|
||||
.setMinDefaultMax(1, 50, 100)
|
||||
.comment(""
|
||||
+ "Limits the amount of sent/processed LOD *update* requests concurrently, per player."
|
||||
+ "How many LOD sync requests per second should a client send? \n"
|
||||
+ "Also limits the amount of player's requests allowed to stay in the server's queue."
|
||||
+ "")
|
||||
.build();
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ public class WorldRemoteGenerationQueue extends AbstractFullDataRequestQueue imp
|
||||
|
||||
|
||||
@Override
|
||||
protected int getRequestConcurrencyLimit() { return this.networkState.config.fullDataRequestConcurrencyLimit; }
|
||||
protected int getRequestRateLimit() { return this.networkState.config.generationRequestRateLimit; }
|
||||
|
||||
@Override
|
||||
protected String getQueueName() { return "World Remote Generation Queue"; }
|
||||
|
||||
@@ -117,7 +117,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rateLimiterSet.fullDataRequestConcurrencyLimiter.tryAcquire(msg))
|
||||
if (!rateLimiterSet.generationRequestRateLimiter.tryAcquire(msg))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -149,13 +149,13 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel
|
||||
{
|
||||
// Sync only
|
||||
|
||||
if (!serverPlayerState.config.isLoginDataSyncEnabled())
|
||||
if (!serverPlayerState.config.getSynchronizeOnLogin())
|
||||
{
|
||||
msg.sendResponse(new RequestRejectedException("Operation is disabled from config."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rateLimiterSet.loginDataSyncRCLimiter.tryAcquire(msg))
|
||||
if (!rateLimiterSet.syncOnLoginRateLimiter.tryAcquire(msg))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -163,7 +163,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel
|
||||
Long serverTimestamp = this.serverside.fullDataFileHandler.getTimestampForPos(msg.sectionPos);
|
||||
if (serverTimestamp == null || serverTimestamp <= msg.clientTimestamp)
|
||||
{
|
||||
rateLimiterSet.loginDataSyncRCLimiter.release();
|
||||
rateLimiterSet.syncOnLoginRateLimiter.release();
|
||||
msg.sendResponse(new FullDataSourceResponseMessage(null));
|
||||
return;
|
||||
}
|
||||
@@ -176,7 +176,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel
|
||||
}
|
||||
this.serverside.fullDataFileHandler.getAsync(msg.sectionPos).thenAcceptAsync(fullDataSource ->
|
||||
{
|
||||
rateLimiterSet.loginDataSyncRCLimiter.release();
|
||||
rateLimiterSet.syncOnLoginRateLimiter.release();
|
||||
|
||||
FullDataPayload payload = new FullDataPayload(fullDataSource);
|
||||
payload.acceptInChunkMessages(FULL_DATA_CHUNK_SIZE, msg.getSession()::sendMessage);
|
||||
@@ -200,7 +200,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel
|
||||
requestGroup.requestAddSemaphore.acquireUninterruptibly(Short.MAX_VALUE);
|
||||
requestGroup.requestRemoveSemaphore.release();
|
||||
|
||||
serverPlayerState.getRateLimiterSet(this).fullDataRequestConcurrencyLimiter.release();
|
||||
serverPlayerState.getRateLimiterSet(this).generationRequestRateLimiter.release();
|
||||
|
||||
FullDataSourceRequestMessage requestMessage = requestGroup.requestMessages.remove(msg.futureId);
|
||||
if (requestGroup.requestMessages.isEmpty())
|
||||
@@ -305,7 +305,7 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel
|
||||
continue;
|
||||
}
|
||||
|
||||
serverPlayerState.getRateLimiterSet(this).fullDataRequestConcurrencyLimiter.release();
|
||||
serverPlayerState.getRateLimiterSet(this).generationRequestRateLimiter.release();
|
||||
payload.acceptInChunkMessages(FULL_DATA_CHUNK_SIZE, msg.getSession()::sendMessage);
|
||||
msg.sendResponse(new FullDataSourceResponseMessage(payload));
|
||||
}
|
||||
|
||||
+4
-4
@@ -54,7 +54,7 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable,
|
||||
private final AtomicInteger failedRequests = new AtomicInteger();
|
||||
private final ConfigEntry<Boolean> showDebugWireframeConfig;
|
||||
|
||||
private final SupplierBasedRateLimiter<Void> rateLimiter = new SupplierBasedRateLimiter<>(this::getRequestConcurrencyLimit);
|
||||
private final SupplierBasedRateLimiter<Void> rateLimiter = new SupplierBasedRateLimiter<>(this::getRequestRateLimit);
|
||||
|
||||
private final ScheduledExecutorService taskFinishScheduler = Executors.newScheduledThreadPool(1);
|
||||
|
||||
@@ -62,7 +62,7 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable,
|
||||
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||
protected boolean showInDebug() { return true; }
|
||||
|
||||
protected abstract int getRequestConcurrencyLimit();
|
||||
protected abstract int getRequestRateLimit();
|
||||
|
||||
protected abstract String getQueueName();
|
||||
|
||||
@@ -104,7 +104,7 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable,
|
||||
}
|
||||
|
||||
while (this.getWaitingTaskCount() > this.getInProgressTaskCount()
|
||||
&& this.getInProgressTaskCount() < this.getRequestConcurrencyLimit()
|
||||
&& this.getInProgressTaskCount() < this.getRequestRateLimit()
|
||||
&& this.pendingTasksSemaphore.tryAcquire())
|
||||
{
|
||||
if (!this.rateLimiter.tryAcquire())
|
||||
@@ -244,7 +244,7 @@ public abstract class AbstractFullDataRequestQueue implements IDebugRenderable,
|
||||
}
|
||||
|
||||
messageList.add(this.getQueueName() + " [" + this.level.getClientLevelWrapper().getDimensionName() + "]");
|
||||
messageList.add("Requests: " + this.finishedRequests + " / " + (this.getWaitingTaskCount() + this.finishedRequests.get()) + " (failed: " + this.failedRequests + ", rate limit: " + this.getRequestConcurrencyLimit() + ")");
|
||||
messageList.add("Requests: " + this.finishedRequests + " / " + (this.getWaitingTaskCount() + this.finishedRequests.get()) + " (failed: " + this.failedRequests + ", rate limit: " + this.getRequestRateLimit() + ")");
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -12,10 +12,10 @@ public class FullDataRefreshQueue extends AbstractFullDataRequestQueue
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean showInDebug() { return this.networkState.config.loginDataSyncEnabled; }
|
||||
protected boolean showInDebug() { return this.networkState.config.synchronizeOnLogin; }
|
||||
|
||||
@Override
|
||||
protected int getRequestConcurrencyLimit() { return this.networkState.config.loginDataSyncRCLimit; }
|
||||
protected int getRequestRateLimit() { return this.networkState.config.syncOnLoginRateLimit; }
|
||||
|
||||
@Override
|
||||
protected String getQueueName() { return "Data Refresh Queue"; }
|
||||
@@ -23,7 +23,7 @@ public class FullDataRefreshQueue extends AbstractFullDataRequestQueue
|
||||
@Override
|
||||
public boolean tick(DhBlockPos2D targetPos)
|
||||
{
|
||||
if (!this.networkState.config.loginDataSyncEnabled)
|
||||
if (!this.networkState.config.synchronizeOnLogin)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
+9
-9
@@ -8,20 +8,20 @@ public abstract class AbstractMultiplayerConfig implements INetworkObject
|
||||
{
|
||||
public abstract int getRenderDistanceRadius();
|
||||
public abstract boolean isDistantGenerationEnabled();
|
||||
public abstract int getFullDataRequestConcurrencyLimit();
|
||||
public abstract int getGenerationRequestRateLimit();
|
||||
public abstract boolean isRealTimeUpdatesEnabled();
|
||||
public abstract boolean isLoginDataSyncEnabled();
|
||||
public abstract int getLoginDataSyncRCLimit();
|
||||
public abstract boolean getSynchronizeOnLogin();
|
||||
public abstract int getSyncOnLoginRateLimit();
|
||||
|
||||
@Override
|
||||
public void encode(ByteBuf out)
|
||||
{
|
||||
out.writeInt(this.getRenderDistanceRadius());
|
||||
out.writeBoolean(this.isDistantGenerationEnabled());
|
||||
out.writeInt(this.getFullDataRequestConcurrencyLimit());
|
||||
out.writeInt(this.getGenerationRequestRateLimit());
|
||||
out.writeBoolean(this.isRealTimeUpdatesEnabled());
|
||||
out.writeBoolean(this.isLoginDataSyncEnabled());
|
||||
out.writeInt(this.getLoginDataSyncRCLimit());
|
||||
out.writeBoolean(this.getSynchronizeOnLogin());
|
||||
out.writeInt(this.getSyncOnLoginRateLimit());
|
||||
}
|
||||
|
||||
|
||||
@@ -31,10 +31,10 @@ public abstract class AbstractMultiplayerConfig implements INetworkObject
|
||||
return MoreObjects.toStringHelper(this)
|
||||
.add("renderDistanceRadius", this.getRenderDistanceRadius())
|
||||
.add("distantGenerationEnabled", this.isDistantGenerationEnabled())
|
||||
.add("fullDataRequestConcurrencyLimit", this.getFullDataRequestConcurrencyLimit())
|
||||
.add("generationRequestRateLimit", this.getGenerationRequestRateLimit())
|
||||
.add("realTimeUpdatesEnabled", this.isRealTimeUpdatesEnabled())
|
||||
.add("loginDataSyncEnabled", this.isLoginDataSyncEnabled())
|
||||
.add("loginDataSyncRCLimit", this.getLoginDataSyncRCLimit())
|
||||
.add("synchronizeOnLogin", this.getSynchronizeOnLogin())
|
||||
.add("syncOnLoginRateLimit", this.getSyncOnLoginRateLimit())
|
||||
.toString();
|
||||
}
|
||||
|
||||
|
||||
+9
-9
@@ -13,17 +13,17 @@ public class MultiplayerConfig extends AbstractMultiplayerConfig
|
||||
public boolean distantGenerationEnabled = Config.Client.Advanced.WorldGenerator.enableDistantGeneration.get();
|
||||
@Override public boolean isDistantGenerationEnabled() { return this.distantGenerationEnabled; }
|
||||
|
||||
public int fullDataRequestConcurrencyLimit = Config.Client.Advanced.Multiplayer.ServerNetworking.generationRequestRCLimit.get();
|
||||
@Override public int getFullDataRequestConcurrencyLimit() { return this.fullDataRequestConcurrencyLimit; }
|
||||
public int generationRequestRateLimit = Config.Client.Advanced.Multiplayer.ServerNetworking.generationRequestRateLimit.get();
|
||||
@Override public int getGenerationRequestRateLimit() { return this.generationRequestRateLimit; }
|
||||
|
||||
public boolean realTimeUpdatesEnabled = Config.Client.Advanced.Multiplayer.ServerNetworking.enableRealTimeUpdates.get();
|
||||
@Override public boolean isRealTimeUpdatesEnabled() { return this.realTimeUpdatesEnabled; }
|
||||
|
||||
public boolean loginDataSyncEnabled = Config.Client.Advanced.Multiplayer.ServerNetworking.enableLoginDataSync.get();
|
||||
@Override public boolean isLoginDataSyncEnabled() { return this.loginDataSyncEnabled; }
|
||||
public boolean synchronizeOnLogin = Config.Client.Advanced.Multiplayer.ServerNetworking.synchronizeOnLogin.get();
|
||||
@Override public boolean getSynchronizeOnLogin() { return this.synchronizeOnLogin; }
|
||||
|
||||
public int loginDataSyncRCLimit = Config.Client.Advanced.Multiplayer.ServerNetworking.loginDataSyncRCLimit.get();
|
||||
@Override public int getLoginDataSyncRCLimit() { return this.loginDataSyncRCLimit; }
|
||||
public int syncOnLoginRateLimit = Config.Client.Advanced.Multiplayer.ServerNetworking.syncOnLoginRateLimit.get();
|
||||
@Override public int getSyncOnLoginRateLimit() { return this.syncOnLoginRateLimit; }
|
||||
|
||||
|
||||
@Override
|
||||
@@ -31,10 +31,10 @@ public class MultiplayerConfig extends AbstractMultiplayerConfig
|
||||
{
|
||||
this.renderDistanceRadius = in.readInt();
|
||||
this.distantGenerationEnabled = in.readBoolean();
|
||||
this.fullDataRequestConcurrencyLimit = in.readInt();
|
||||
this.generationRequestRateLimit = in.readInt();
|
||||
this.realTimeUpdatesEnabled = in.readBoolean();
|
||||
this.loginDataSyncEnabled = in.readBoolean();
|
||||
this.loginDataSyncRCLimit = in.readInt();
|
||||
this.synchronizeOnLogin = in.readBoolean();
|
||||
this.syncOnLoginRateLimit = in.readInt();
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -13,10 +13,10 @@ public class MultiplayerConfigChangeListener implements Closeable
|
||||
private static final ConfigEntry[] CONFIG_ENTRIES = new ConfigEntry[] {
|
||||
Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius,
|
||||
Config.Client.Advanced.WorldGenerator.enableDistantGeneration,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.generationRequestRCLimit,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.generationRequestRateLimit,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.enableRealTimeUpdates,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.enableLoginDataSync,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.loginDataSyncRCLimit,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.synchronizeOnLogin,
|
||||
Config.Client.Advanced.Multiplayer.ServerNetworking.syncOnLoginRateLimit,
|
||||
};
|
||||
|
||||
private final ArrayList<ConfigChangeListener> changeListeners;
|
||||
|
||||
+6
-6
@@ -25,9 +25,9 @@ public class ConstrainedMultiplayerConfig extends AbstractMultiplayerConfig
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFullDataRequestConcurrencyLimit()
|
||||
public int getGenerationRequestRateLimit()
|
||||
{
|
||||
return Math.min(this.clientConfig.fullDataRequestConcurrencyLimit, Config.Client.Advanced.Multiplayer.ServerNetworking.generationRequestRCLimit.get());
|
||||
return Math.min(this.clientConfig.generationRequestRateLimit, Config.Client.Advanced.Multiplayer.ServerNetworking.generationRequestRateLimit.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,15 +37,15 @@ public class ConstrainedMultiplayerConfig extends AbstractMultiplayerConfig
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLoginDataSyncEnabled()
|
||||
public boolean getSynchronizeOnLogin()
|
||||
{
|
||||
return this.clientConfig.loginDataSyncEnabled && Config.Client.Advanced.Multiplayer.ServerNetworking.enableLoginDataSync.get();
|
||||
return this.clientConfig.synchronizeOnLogin && Config.Client.Advanced.Multiplayer.ServerNetworking.synchronizeOnLogin.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLoginDataSyncRCLimit()
|
||||
public int getSyncOnLoginRateLimit()
|
||||
{
|
||||
return Math.min(this.clientConfig.loginDataSyncRCLimit, Config.Client.Advanced.Multiplayer.ServerNetworking.loginDataSyncRCLimit.get());
|
||||
return Math.min(this.clientConfig.syncOnLoginRateLimit, Config.Client.Advanced.Multiplayer.ServerNetworking.syncOnLoginRateLimit.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+6
-6
@@ -88,17 +88,17 @@ public class ServerPlayerState
|
||||
|
||||
public class RateLimiterSet
|
||||
{
|
||||
public final SupplierBasedRateAndConcurrencyLimiter<FullDataSourceRequestMessage> fullDataRequestConcurrencyLimiter = new SupplierBasedRateAndConcurrencyLimiter<>(
|
||||
() -> ServerNetworking.generationRequestRCLimit.get(),
|
||||
public final SupplierBasedRateAndConcurrencyLimiter<FullDataSourceRequestMessage> generationRequestRateLimiter = new SupplierBasedRateAndConcurrencyLimiter<>(
|
||||
() -> ServerNetworking.generationRequestRateLimit.get(),
|
||||
msg -> {
|
||||
msg.sendResponse(new RateLimitedException("Full data request rate/concurrency limit: " + ServerPlayerState.this.config.getFullDataRequestConcurrencyLimit()));
|
||||
msg.sendResponse(new RateLimitedException("Full data request rate/concurrency limit: " + ServerPlayerState.this.config.getGenerationRequestRateLimit()));
|
||||
}
|
||||
);
|
||||
|
||||
public final SupplierBasedRateAndConcurrencyLimiter<FullDataSourceRequestMessage> loginDataSyncRCLimiter = new SupplierBasedRateAndConcurrencyLimiter<>(
|
||||
() -> ServerNetworking.loginDataSyncRCLimit.get(),
|
||||
public final SupplierBasedRateAndConcurrencyLimiter<FullDataSourceRequestMessage> syncOnLoginRateLimiter = new SupplierBasedRateAndConcurrencyLimiter<>(
|
||||
() -> ServerNetworking.syncOnLoginRateLimit.get(),
|
||||
msg -> {
|
||||
msg.sendResponse(new RateLimitedException("Data sync rate/concurrency limit: " + ServerPlayerState.this.config.getLoginDataSyncRCLimit()));
|
||||
msg.sendResponse(new RateLimitedException("Data sync rate/concurrency limit: " + ServerPlayerState.this.config.getSyncOnLoginRateLimit()));
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -395,24 +395,17 @@
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generalSectionNote": " \u25cf General",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableServerNetworking": "Enable Server Networking",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableServerNetworking.@tooltip": "§6Attention:§r this feature is not fully implemented. \n\nIf true Distant Horizons will attempt to communicate with the connected \nserver in order to load LODs outside your vanilla render distance. \n\nNote: This requires DH to be installed on the server in order to function.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.maxThreadPoolTasks": "Max Thread Pool Tasks",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.maxThreadPoolTasks.@tooltip": "Pauses the generation if amount of thread pool tasks is too high. \nDecrease this value if LODs don't show up for too long.\nIncrease this value if thread pool tasks often get drained completely.\nSetting this value to 0 will allow thread pool tasks to build up indefinitely.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationSectionNote": " \u25cf Generation",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationRequestRCLimit": "Gen Task Rate/Concurrency Limit",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationRequestRCLimit.@tooltip": "Limits the amount of generation requests sent by client and processed by server.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationRequestBeginDelay": "Generation Request Begin Delay",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationRequestBeginDelay.@tooltip": "Adds a delay in seconds before sending LOD requests, when generation is enabled. \nIncrease this value if initial generation starts too far away.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.realTimeUpdatesSectionNote": " \u25cf Real Time Updates",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableRealTimeUpdates": "Enable Real Time Updates",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableRealTimeUpdates.@tooltip": "Enables real time updates from server.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.loginDataSyncSectionNote": " \u25cf Login Data Sync",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableLoginDataSync": "Synchronize LODs on Login",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableLoginDataSync.@tooltip": "Enables updating of saved LODs after login.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.loginDataSyncRCLimit": "Login Sync Rate/Concurrency Limit",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.loginDataSyncRCLimit.@tooltip": "Limits the amount of sent/processed LOD *update* requests concurrently, per player.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.immersivePortalsSectionNote": " \u25cf Immersive Portals",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generateMultipleDimensions": "Generate Multiple Dimensions",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generateMultipleDimensions.@tooltip": "Controls whether the players should be allowed to generate in multiple dimensions at once. \n\nFor server owners: \nAll dimensions share the same thread pool. This means that empty dimensions (i.e. without players in them) \nmay slow down the generation of non-empty ones.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationRequestRateLimit": "Rate Limit for Generation Requests",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.generationRequestRateLimit.@tooltip": "How many LOD generation requests per second should a client send? \nAlso limits the amount of player's requests allowed to stay in the server's queue.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.realTimeUpdatesSectionNote": " \u25cf Real-time Updates",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableRealTimeUpdates": "Enable Real-time Updates",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.enableRealTimeUpdates.@tooltip": "If true, the client will receive real-time LOD updates for chunks outside the client's render distance.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.syncOnLoginSectionNote": " \u25cf Synchronization on Login",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.synchronizeOnLogin": "Synchronize LODs on Login",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.synchronizeOnLogin.@tooltip": "If true, clients will receive updated LODs on join if any changes occurred since last join.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.syncOnLoginRateLimit": "Rate Limit for Sync on Login",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverNetworking.syncOnLoginRateLimit.@tooltip": "How many LOD sync requests per second should a client send? \nAlso limits the amount of player's requests allowed to stay in the server's queue.",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverFolderNameMode":
|
||||
"Server Folder Mode",
|
||||
"distanthorizons.config.client.advanced.multiplayer.serverFolderNameMode.@tooltip":
|
||||
|
||||
Reference in New Issue
Block a user