From 56c09f5f5cf8e05b1731d7a75a6ea885131563f8 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Tue, 7 Jan 2025 01:25:31 +0500 Subject: [PATCH] Add a config option to force server to always send only the highest detail --- .../com/seibel/distanthorizons/core/config/Config.java | 8 ++++++++ .../distanthorizons/core/level/AbstractDhServerLevel.java | 8 ++++++++ 2 files changed, 16 insertions(+) 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 826266377..3d80d0800 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 @@ -1533,6 +1533,14 @@ public class Config .setPerformance(EConfigEntryPerformance.HIGH) .build(); + public static ConfigEntry generateOnlyInHighestDetail = new ConfigEntry.Builder() + .setChatCommandName("generation.highestDetailOnly") + .set(false) + .comment("" + + "Makes the server reject all generation requests for detail levels below the highest one.\n" + + "") + .build(); + // Real-time updates public static ConfigEntry enableRealTimeUpdates = new ConfigEntry.Builder() diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java index 33aac5e3b..19814f132 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java @@ -11,6 +11,7 @@ import com.seibel.distanthorizons.core.multiplayer.server.ServerPlayerState; import com.seibel.distanthorizons.core.multiplayer.server.ServerPlayerStateManager; import com.seibel.distanthorizons.core.network.exceptions.RequestOutOfRangeException; import com.seibel.distanthorizons.core.network.exceptions.RequestRejectedException; +import com.seibel.distanthorizons.core.network.exceptions.SectionRequiresSplittingException; import com.seibel.distanthorizons.core.network.messages.AbstractNetworkMessage; import com.seibel.distanthorizons.core.network.messages.AbstractTrackableMessage; import com.seibel.distanthorizons.core.network.messages.ILevelRelatedMessage; @@ -149,6 +150,13 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I message.sendResponse(new RequestOutOfRangeException("Distance too large: " + distanceFromPlayer + " > " + Config.Server.maxGenerationRequestDistance.get())); return; } + + if (Config.Server.generateOnlyInHighestDetail.get() && DhSectionPos.getDetailLevel(message.sectionPos) != DhSectionPos.SECTION_MINIMUM_DETAIL_LEVEL) + { + message.sendResponse(new SectionRequiresSplittingException("Only highest-detail sections are allowed")); + return; + } + this.requestHandler.queueWorldGenForRequestMessage(serverPlayerState, message, rateLimiterSet); } else