From 37cb00b8e282cfdf87a14b4674df93ac0861e9dc Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Fri, 1 Aug 2025 23:10:37 +0500 Subject: [PATCH] Add isLocalChunkUseAllowed config value --- .../distanthorizons/core/config/Config.java | 9 +++++++++ .../core/level/DhClientLevel.java | 12 +++++++++++- .../core/multiplayer/config/SessionConfig.java | 16 +++++++++------- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java index 0ec97caea..b8c19ee49 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java @@ -1705,6 +1705,15 @@ public class Config // Common + public static ConfigEntry allowLocalChunkUse = new ConfigEntry.Builder() + .setChatCommandName("common.allowLocalChunkUse") + .setAppearance(EConfigEntryAppearance.ONLY_IN_FILE) + .set(true) + .comment("" + + "If true, clients will be able to update LODs using chunks they load." + + "") + .build(); + public static ConfigEntry maxDataTransferSpeed = new ConfigEntry.Builder() .setChatCommandName("common.maxDataTransferSpeed") .setMinDefaultMax(0, 500, 1000000 /* 1 GB/s */) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java index 5bf8501b9..ba291ce2a 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java @@ -340,7 +340,17 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel return true; } - return !this.networkState.sessionConfig.isRealTimeUpdatesEnabled() || this.loadedOnceChunks.add(chunkPos); + if (!this.networkState.sessionConfig.isLocalChunkUseAllowed()) + { + return false; + } + + if (this.networkState.sessionConfig.isRealTimeUpdatesEnabled()) + { + return this.loadedOnceChunks.add(chunkPos); + } + + return true; } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/config/SessionConfig.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/config/SessionConfig.java index 5fd59ccc4..5b09b6df3 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/config/SessionConfig.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/config/SessionConfig.java @@ -33,9 +33,9 @@ public class SessionConfig implements INetworkObject registerConfigEntry(Config.Common.WorldGenerator.enableDistantGeneration, Boolean::logicalAnd); registerConfigEntry(Config.Server.maxGenerationRequestDistance, Math::min); - registerConfigEntry(Config.Server.generationBoundsX, (x, y) -> y); - registerConfigEntry(Config.Server.generationBoundsZ, (x, y) -> y); - registerConfigEntry(Config.Server.generationBoundsRadius, (x, y) -> y); + registerConfigEntry(Config.Server.generationBoundsX, (clientValue, serverValue) -> serverValue); + registerConfigEntry(Config.Server.generationBoundsZ, (clientValue, serverValue) -> serverValue); + registerConfigEntry(Config.Server.generationBoundsRadius, (clientValue, serverValue) -> serverValue); registerConfigEntry(Config.Server.generationRequestRateLimit, Math::min); registerConfigEntry(Config.Server.enableRealTimeUpdates, Boolean::logicalAnd); @@ -45,15 +45,16 @@ public class SessionConfig implements INetworkObject registerConfigEntry(Config.Server.maxSyncOnLoadRequestDistance, Math::min); registerConfigEntry(Config.Server.syncOnLoadRateLimit, Math::min); - registerConfigEntry(Config.Server.maxDataTransferSpeed, (x, y) -> { - if (x == 0 && y == 0) + registerConfigEntry(Config.Server.allowLocalChunkUse, (clientValue, serverValue) -> serverValue); + registerConfigEntry(Config.Server.maxDataTransferSpeed, (clientValue, serverValue) -> { + if (clientValue == 0 && serverValue == 0) { return 0; } return Math.min( - x > 0 ? x : Integer.MAX_VALUE, - y > 0 ? y : Integer.MAX_VALUE + clientValue > 0 ? clientValue : Integer.MAX_VALUE, + serverValue > 0 ? serverValue : Integer.MAX_VALUE ); }); } @@ -80,6 +81,7 @@ public class SessionConfig implements INetworkObject public int getMaxSyncOnLoadDistance() { return this.getValue(Config.Server.maxSyncOnLoadRequestDistance); } public int getSyncOnLoginRateLimit() { return this.getValue(Config.Server.syncOnLoadRateLimit); } + public boolean isLocalChunkUseAllowed() { return this.getValue(Config.Server.allowLocalChunkUse); } public int getMaxDataTransferSpeed() { return this.getValue(Config.Server.maxDataTransferSpeed); }