From fef487f69877d6574a3e505a8f91d06e1cf5b55a Mon Sep 17 00:00:00 2001 From: coolGi Date: Sat, 11 Jun 2022 22:27:15 +0930 Subject: [PATCH] Removed most cases of LodConfigWrapperSingleton --- .../lod/core/api/internal/ClientApi.java | 27 +++++----- .../lod/core/api/internal/EventApi.java | 11 ++-- .../core/builders/lodBuilding/LodBuilder.java | 15 +++--- .../LodBufferBuilderFactory.java | 15 +++--- .../bufferBuilding/LodQuadBuilder.java | 4 -- .../worldGeneration/BatchGenerator.java | 13 +++-- .../com/seibel/lod/core/config/Config.java | 5 +- .../core/config/file/ConfigFileHandling.java | 5 +- .../handlers/LodDimensionFileHandler.java | 6 +-- .../lod/core/handlers/LodDimensionFinder.java | 7 ++- .../dimensionFinder/SubDimCompare.java | 8 +-- .../seibel/lod/core/objects/a7/DHLevel.java | 5 +- .../core/objects/a7/io/DHFolderHandler.java | 7 ++- .../objects/a7/io/LevelToFileMatcher.java | 7 ++- .../lod/core/objects/lod/LodDimension.java | 9 ++-- .../lod/core/objects/lod/LodRegion.java | 22 +++++++- .../lod/core/objects/opengl/RenderRegion.java | 9 ++-- .../objects/opengl/SimpleRenderBuffer.java | 8 ++- .../com/seibel/lod/core/render/GLProxy.java | 9 ++-- .../seibel/lod/core/render/LodFogConfig.java | 3 +- .../seibel/lod/core/render/LodRenderer.java | 51 +++++++++---------- .../lod/core/util/DetailDistanceUtil.java | 29 +++++------ .../com/seibel/lod/core/util/LodUtil.java | 9 ++-- .../config/ILodConfigWrapperSingleton.java | 26 +++++----- 24 files changed, 150 insertions(+), 160 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java b/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java index 2d85fef23..74d8b2c07 100644 --- a/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java +++ b/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java @@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.rendering.ERendererType; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.logging.ConfigBasedSpamLogger; @@ -47,7 +48,6 @@ import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.logging.SpamReducedLogger; import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper; @@ -75,7 +75,6 @@ public class ClientApi private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); private static final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.get(IMinecraftRenderWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); private static final EventApi EVENT_API = EventApi.INSTANCE; @@ -174,8 +173,8 @@ public class ClientApi ConfigBasedLogger.updateAll(); ConfigBasedSpamLogger.updateAll(doFlush); - if (InternalApiShared.previousVertQual != CONFIG.client().graphics().quality().getVerticalQuality()) { - InternalApiShared.previousVertQual = CONFIG.client().graphics().quality().getVerticalQuality(); + if (InternalApiShared.previousVertQual != Config.Client.Graphics.Quality.verticalQuality.get()) { + InternalApiShared.previousVertQual = Config.Client.Graphics.Quality.verticalQuality.get(); EventApi.INSTANCE.worldUnloadEvent(MC.getWrappedServerWorld()); EventApi.INSTANCE.worldLoadEvent(MC.getWrappedClientWorld()); return; @@ -264,7 +263,7 @@ public class ClientApi - if (CONFIG.client().advanced().debugging().getRendererType() == ERendererType.DEFAULT) + if (Config.Client.Advanced.Debugging.rendererType.get() == ERendererType.DEFAULT) { // Note to self: // if "unspecified" shows up in the pie chart, it is @@ -290,7 +289,7 @@ public class ClientApi } profiler.pop(); // end LOD profiler.push("terrain"); // go back into "terrain" - } else if (CONFIG.client().advanced().debugging().getRendererType() == ERendererType.DEBUG) { + } else if (Config.Client.Advanced.Debugging.rendererType.get() == ERendererType.DEBUG) { IProfilerWrapper profiler = MC.getProfiler(); profiler.pop(); // get out of "terrain" profiler.push("LODTestRendering"); @@ -302,7 +301,7 @@ public class ClientApi // these can't be set until after the buffers are built (in renderer.drawLODs) // otherwise the buffers may be set to the wrong size, or not changed at all InternalApiShared.previousChunkRenderDistance = MC_RENDER.getRenderDistance(); - InternalApiShared.previousLodRenderDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance(); + InternalApiShared.previousLodRenderDistance = Config.Client.Graphics.Quality.lodChunkRenderDistance.get(); } catch (Exception e) { @@ -346,21 +345,21 @@ public class ClientApi // Trigger once on key press, with CLIENT PLAYER. public void keyPressedEvent(int glfwKey) { - if (!CONFIG.client().advanced().debugging().getDebugKeybindingsEnabled()) + if (!Config.Client.Advanced.Debugging.enableDebugKeybindings.get()) return; if (glfwKey == GLFW.GLFW_KEY_F8) { - CONFIG.client().advanced().debugging() - .setDebugMode(CONFIG.client().advanced().debugging().getDebugMode().getNext()); - MC.sendChatMessage("F8: Set debug mode to " + CONFIG.client().advanced().debugging().getDebugMode()); + Config.Client.Advanced.Debugging + .debugMode.set(Config.Client.Advanced.Debugging.debugMode.get().getNext()); + MC.sendChatMessage("F8: Set debug mode to " + Config.Client.Advanced.Debugging.debugMode.get()); } if (glfwKey == GLFW.GLFW_KEY_F6) { - CONFIG.client().advanced().debugging() - .setRendererType(ERendererType.next(CONFIG.client().advanced().debugging().getRendererType())); - MC.sendChatMessage("F6: Set rendering to " + CONFIG.client().advanced().debugging().getRendererType()); + Config.Client.Advanced.Debugging + .rendererType.set(ERendererType.next(Config.Client.Advanced.Debugging.rendererType.get())); + MC.sendChatMessage("F6: Set rendering to " + Config.Client.Advanced.Debugging.rendererType.get()); } if (glfwKey == GLFW.GLFW_KEY_P) diff --git a/src/main/java/com/seibel/lod/core/api/internal/EventApi.java b/src/main/java/com/seibel/lod/core/api/internal/EventApi.java index af5fe3e22..972585174 100644 --- a/src/main/java/com/seibel/lod/core/api/internal/EventApi.java +++ b/src/main/java/com/seibel/lod/core/api/internal/EventApi.java @@ -21,6 +21,7 @@ package com.seibel.lod.core.api.internal; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.builders.worldGeneration.BatchGenerator; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.EWorldType; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.logging.DhLoggerBuilder; @@ -33,7 +34,6 @@ import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.IVersionConstants; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; @@ -56,7 +56,6 @@ public class EventApi private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IVersionConstants VERSION_CONSTANTS = SingletonHandler.get(IVersionConstants.class); /** @@ -91,7 +90,7 @@ public class EventApi if (InternalApiShared.isShuttingDown) return; - if (CONFIG.client().worldGenerator().getEnableDistantGeneration()) + if (Config.Client.WorldGenerator.enableDistantGeneration.get()) { if (lastWorldGenTickDelta <= 0) { lastWorldGenTickDelta = 20; // 20 ticks is 1 second. We don't need to refresh world gen status every tick. @@ -154,7 +153,7 @@ public class EventApi // make sure the correct LODs are being rendered // (if this isn't done the previous world's LODs may be drawn) ClientApi.renderer.regenerateLODsNextFrame(); - InternalApiShared.previousVertQual = CONFIG.client().graphics().quality().getVerticalQuality(); + InternalApiShared.previousVertQual = Config.Client.Graphics.Quality.verticalQuality.get(); } /** This is also called when the user disconnects from a server+ */ @@ -235,10 +234,10 @@ public class EventApi // calculate how wide the dimension(s) should be in regions int chunksWide; if (MC.getWrappedClientWorld().getDimensionType().hasCeiling()) - chunksWide = Math.min(CONFIG.client().graphics().quality().getLodChunkRenderDistance(), + chunksWide = Math.min(Config.Client.Graphics.Quality.lodChunkRenderDistance.get(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * 2 + 1; else - chunksWide = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * 2 + 1; + chunksWide = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() * 2 + 1; int newWidth = (int) Math.ceil(chunksWide / (float) LodUtil.REGION_WIDTH_IN_CHUNKS); // make sure we have an odd number of regions diff --git a/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java b/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java index 12d3883fc..8ed1efc2f 100644 --- a/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java +++ b/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java @@ -23,6 +23,7 @@ import java.util.ConcurrentModificationException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.ELodDirection; import com.seibel.lod.core.enums.config.EBlocksToAvoid; import com.seibel.lod.core.enums.config.EDistanceGenerationMode; @@ -40,7 +41,6 @@ import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import com.seibel.lod.core.wrapperInterfaces.block.IBlockDetailWrapper; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; @@ -59,10 +59,9 @@ public class LodBuilder { private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); - private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); public static final ConfigBasedLogger EVENT_LOGGER = new ConfigBasedLogger(LogManager.getLogger(LodBuilder.class), - () -> config.client().advanced().debugging().debugSwitch().getLogLodBuilderEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logLodBuilderEvent.get()); /** This cannot be final! Different world have different height, and in menu, this causes Null Exceptions*/ //public static final short MIN_WORLD_HEIGHT = MC.getWrappedClientWorld().getMinHeight(); @@ -337,7 +336,7 @@ public class LodBuilder boolean topBlock = true; if (y < chunk.getMinBuildHeight()) dataToMerge[0] = DataPointUtil.createVoidDataPoint(generation); - int maxConnectedLods = LodBuilder.config.client().graphics().quality().getVerticalQuality().maxVerticalData[0]; + int maxConnectedLods = Config.Client.Graphics.Quality.verticalQuality.get().maxVerticalData[0]; while (y >= chunk.getMinBuildHeight()) { int height = determineHeightPointFrom(chunk, config, x, y, z); // If the lod is at the default height, it must be void data @@ -394,7 +393,7 @@ public class LodBuilder if (strictEdge) { IBlockDetailWrapper blockAbove = chunk.getBlockDetail(xAbs, yAbs + 1, zAbs); - if (blockAbove != null && config.client().worldGenerator().getTintWithAvoidedBlocks() && !blockAbove.shouldRender(config.client().worldGenerator().getBlocksToAvoid())) + if (blockAbove != null && Config.Client.WorldGenerator.tintWithAvoidedBlocks.get() && !blockAbove.shouldRender(Config.Client.WorldGenerator.blocksToAvoid.get())) { // The above block is skipped. Lets use its skipped color for current block currentBlockDetail = blockAbove; } @@ -458,7 +457,7 @@ public class LodBuilder colorInt = 0; if (chunk.blockPosInsideChunk(x, y+1, z)) { IBlockDetailWrapper blockAbove = chunk.getBlockDetail(x, y+1, z); - if (blockAbove != null && config.client().worldGenerator().getTintWithAvoidedBlocks() && !blockAbove.shouldRender(config.client().worldGenerator().getBlocksToAvoid())) + if (blockAbove != null && Config.Client.WorldGenerator.tintWithAvoidedBlocks.get() && !blockAbove.shouldRender(Config.Client.WorldGenerator.blocksToAvoid.get())) { // The above block is skipped. Lets use its skipped color for current block colorInt = blockAbove.getAndResolveFaceColor(null, chunk, new DHBlockPos(x, y+1, z)); } @@ -555,14 +554,14 @@ public class LodBuilder /** Is the block at the given blockPos a valid LOD point? */ private boolean isLayerValidLodPoint(IBlockDetailWrapper blockDetail) { - EBlocksToAvoid avoid = config.client().worldGenerator().getBlocksToAvoid(); + EBlocksToAvoid avoid = Config.Client.WorldGenerator.blocksToAvoid.get(); return blockDetail != null && blockDetail.shouldRender(avoid); } /** Is the block at the given blockPos a valid LOD point? */ private boolean isLayerValidLodPoint(IChunkWrapper chunk, int x, int y, int z) { - EBlocksToAvoid avoid = config.client().worldGenerator().getBlocksToAvoid(); + EBlocksToAvoid avoid = Config.Client.WorldGenerator.blocksToAvoid.get(); IBlockDetailWrapper block = chunk.getBlockDetail(x, y, z); return block != null && block.shouldRender(avoid); } diff --git a/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java b/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java index 0d46d63e5..291b9780d 100644 --- a/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java +++ b/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java @@ -24,6 +24,7 @@ import java.time.Duration; import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.logging.SpamReducedLogger; @@ -35,7 +36,6 @@ import com.seibel.lod.core.render.LodRenderer; import com.seibel.lod.core.render.objects.GLBuffer; import com.seibel.lod.core.util.*; import com.seibel.lod.core.util.gridList.MovableGridRingList; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import org.apache.logging.log4j.Logger; @@ -69,8 +69,7 @@ public class LodBufferBuilderFactory { } } } - - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); + private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); @@ -82,7 +81,7 @@ public class LodBufferBuilderFactory { /** The threads used to generate buffers. */ private static LodThreadFactory bufferBuilderThreadFactory = new LodThreadFactory("BufferBuilder", Thread.NORM_PRIORITY - 2); - private static int previousBufferBuilderThreads = CONFIG.client().advanced().threading().getNumberOfBufferBuilderThreads(); + private static int previousBufferBuilderThreads = Config.Client.Advanced.Threading.numberOfBufferBuilderThreads.get(); public static ExecutorService bufferBuilderThreads = Executors.newFixedThreadPool(previousBufferBuilderThreads, bufferBuilderThreadFactory); /** The thread used to upload buffers. */ @@ -173,7 +172,7 @@ public class LodBufferBuilderFactory { } bufferBuilderThreads.shutdownNow(); bufferUploadThread.shutdownNow(); - previousBufferBuilderThreads = CONFIG.client().advanced().threading().getNumberOfBufferBuilderThreads(); + previousBufferBuilderThreads = Config.Client.Advanced.Threading.numberOfBufferBuilderThreads.get(); bufferBuilderThreadFactory = new LodThreadFactory("BufferBuilder", Thread.NORM_PRIORITY - 2); bufferBuilderThreads = Executors.newFixedThreadPool(previousBufferBuilderThreads, bufferBuilderThreadFactory); @@ -187,7 +186,7 @@ public class LodBufferBuilderFactory { int playerZ, boolean fullRegen) { //ArrayList regionsToCleanup = new ArrayList(); try { - if (previousBufferBuilderThreads != CONFIG.client().advanced().threading().getNumberOfBufferBuilderThreads()) + if (previousBufferBuilderThreads != Config.Client.Advanced.Threading.numberOfBufferBuilderThreads.get()) resetThreadPools(false); regionsListLock.lockInterruptibly(); if (ENABLE_EVENT_LOGGING) @@ -195,10 +194,10 @@ public class LodBufferBuilderFactory { lodDim, renderRegions==null ? "NULL" : renderRegions.toString()); long startTime = System.currentTimeMillis(); - boolean doCaveCulling = CONFIG.client().graphics().advancedGraphics().getEnableCaveCulling(); + boolean doCaveCulling = Config.Client.Graphics.AdvancedGraphics.enableCaveCulling.get(); doCaveCulling &= !lodDim.dimension.hasCeiling(); doCaveCulling &= lodDim.dimension.hasSkyLight(); - doCaveCulling &= playerY > CONFIG.client().graphics().advancedGraphics().getCaveCullingHeight() + 5; + doCaveCulling &= playerY > Config.Client.Graphics.AdvancedGraphics.caveCullingHeight.get() + 5; int playerSkylight = MC.getPlayerSkylight(); // if fail returns -1. doCaveCulling &= playerSkylight > 7; diff --git a/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodQuadBuilder.java b/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodQuadBuilder.java index 9e7228679..dcd9f01a5 100644 --- a/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodQuadBuilder.java +++ b/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodQuadBuilder.java @@ -29,12 +29,10 @@ import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.enums.ELodDirection; import com.seibel.lod.core.enums.ELodDirection.Axis; import com.seibel.lod.core.enums.config.EGpuUploadMethod; -import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.render.LodRenderer; import com.seibel.lod.core.render.objects.GLVertexBuffer; import com.seibel.lod.core.util.ColorUtil; import com.seibel.lod.core.util.LodUtil; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import static com.seibel.lod.core.render.LodRenderer.EVENT_LOGGER; @@ -45,8 +43,6 @@ import static com.seibel.lod.core.render.LodRenderer.EVENT_LOGGER; */ public class LodQuadBuilder { - static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); - public final boolean skipQuadsWithZeroSkylight; public final short skyLightCullingBelow; diff --git a/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java b/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java index d8bbda3a8..18d526890 100644 --- a/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java +++ b/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java @@ -20,6 +20,7 @@ package com.seibel.lod.core.builders.worldGeneration; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EDistanceGenerationMode; import com.seibel.lod.core.enums.config.EGenerationPriority; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; @@ -29,7 +30,6 @@ import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; import com.seibel.lod.core.wrapperInterfaces.worldGeneration.AbstractBatchGenerationEnvionmentWrapper; @@ -43,12 +43,11 @@ public class BatchGenerator public static final boolean ENABLE_GENERATOR_STATS_LOGGING = false; private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); public AbstractBatchGenerationEnvionmentWrapper generationGroup; public LodDimension targetLodDim; public static final int generationGroupSize = 4; - public static int previousThreadCount = CONFIG.client().advanced().threading()._getWorldGenerationThreadPoolSize(); + public static int previousThreadCount = Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()<1 ? 1 : (int) Math.ceil(Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()); private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); private int estimatedSampleNeeded = 128; @@ -72,8 +71,8 @@ public class BatchGenerator LOGGER.info("1.18 Experimental Chunk Generator reinitialized"); } - EDistanceGenerationMode mode = CONFIG.client().worldGenerator().getDistanceGenerationMode(); - int newThreadCount = CONFIG.client().advanced().threading()._getWorldGenerationThreadPoolSize(); + EDistanceGenerationMode mode = Config.Client.WorldGenerator.distanceGenerationMode.get(); + int newThreadCount = Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()<1 ? 1 : (int) Math.ceil(Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()); if (newThreadCount != previousThreadCount) { generationGroup.resizeThreadPool(newThreadCount); previousThreadCount = newThreadCount; @@ -81,7 +80,7 @@ public class BatchGenerator if (estimatedPointsToQueue < newThreadCount) estimatedPointsToQueue = newThreadCount; - EGenerationPriority priority = CONFIG.client().worldGenerator().getGenerationPriority(); + EGenerationPriority priority = Config.Client.WorldGenerator.generationPriority.get(); if (priority == EGenerationPriority.AUTO) priority = MC.hasSinglePlayerServer() ? EGenerationPriority.FAR_FIRST : EGenerationPriority.NEAR_FIRST; @@ -106,7 +105,7 @@ public class BatchGenerator // round the player's block position down to the nearest chunk BlockPos int playerPosX = MC.getPlayerBlockPos().getX(); int playerPosZ = MC.getPlayerBlockPos().getZ(); - double runTimeRatio = CONFIG.client().advanced().threading()._getWorldGenerationPartialRunTime(); + double runTimeRatio = Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()>1 ? 1.0 : Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get(); PosToGenerateContainer posToGenerate = lodDim.getPosToGenerate(estimatedSampleNeeded, playerPosX, playerPosZ, priority, mode); diff --git a/src/main/java/com/seibel/lod/core/config/Config.java b/src/main/java/com/seibel/lod/core/config/Config.java index 94125b618..40ca15d53 100644 --- a/src/main/java/com/seibel/lod/core/config/Config.java +++ b/src/main/java/com/seibel/lod/core/config/Config.java @@ -215,6 +215,7 @@ public class Config public static class AdvancedFog { + // TODO: Make some of the option here floats rather than doubles (the ClassicConfigGUI dosnt support floats) private static final Double FOG_RANGE_MIN = 0.0; private static final Double FOG_RANGE_MAX = Math.sqrt(2.0); @@ -421,7 +422,7 @@ public class Config + "This setting shouldn't affect performance.") .build(); - public static ConfigEntry brightnessMultiplier = new ConfigEntry.Builder() + public static ConfigEntry brightnessMultiplier = new ConfigEntry.Builder() // TODO: Make this a float (the ClassicConfigGUI dosnt support floats) .set(1.0) .comment("" + "How bright fake chunk colors are. \n" @@ -431,7 +432,7 @@ public class Config + " 2 = near white") .build(); - public static ConfigEntry saturationMultiplier = new ConfigEntry.Builder() + public static ConfigEntry saturationMultiplier = new ConfigEntry.Builder() // TODO: Make this a float (the ClassicConfigGUI dosnt support floats) .set(1.0) .comment("" + "How saturated fake chunk colors are. \n" diff --git a/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java b/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java index 0d04be801..a9a1a6aef 100644 --- a/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java +++ b/src/main/java/com/seibel/lod/core/config/file/ConfigFileHandling.java @@ -160,9 +160,8 @@ public class ConfigFileHandling { } catch (Exception e) { System.out.println("Loading file failed because of this expectation:\n"+e); try { // Now try remaking the file and loading it - Path configFilePath = ConfigPath.getParent(); - if (!configFilePath.toFile().exists()) - Files.createDirectory(configFilePath); + if (!ConfigPath.getParent().toFile().exists()) + Files.createDirectory(ConfigPath.getParent()); else Files.deleteIfExists(ConfigPath); Files.createFile(ConfigPath); diff --git a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java index 20c0c79c7..eec76c56d 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java @@ -33,9 +33,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; -import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.logging.ConfigBasedLogger; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.api.internal.ClientApi; import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream; @@ -65,9 +64,8 @@ import org.apache.logging.log4j.LogManager; */ public class LodDimensionFileHandler { - private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); public static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(LodDimensionFileHandler.class), - () -> config.client().advanced().debugging().debugSwitch().getLogFileReadWriteEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logFileReadWriteEvent.get()); public static final boolean ENABLE_SAVE_THREAD_LOGGING = true; public static final boolean ENABLE_SAVE_REGION_LOGGING = false; diff --git a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java index 20d83c11a..1ee4497c3 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java @@ -22,6 +22,7 @@ package com.seibel.lod.core.handlers; import com.electronwill.nightconfig.core.file.CommentedFileConfig; import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.handlers.dimensionFinder.PlayerData; import com.seibel.lod.core.handlers.dimensionFinder.SubDimCompare; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; @@ -38,7 +39,6 @@ import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; @@ -60,10 +60,9 @@ import java.util.concurrent.atomic.AtomicBoolean; public class LodDimensionFinder { private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); public static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(LodDimensionFinder.class), - () -> CONFIG.client().advanced().debugging().debugSwitch().getLogFileSubDimEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logFileSubDimEvent.get()); /** Increasing this will increase accuracy but increase calculation time */ private static final EVerticalQuality VERTICAL_QUALITY_TO_TEST_WITH = EVerticalQuality.LOW; @@ -119,7 +118,7 @@ public class LodDimensionFinder { // attempt to get the file handler File saveDir; - if (CONFIG.client().multiplayer().getMultiDimensionRequiredSimilarity() == 0) + if (Config.Client.Multiplayer.multiDimensionRequiredSimilarity.get() == 0) { // only allow 1 sub dimension per world saveDir = getDefaultSubDimensionFolder(dimensionTypeWrapper); diff --git a/src/main/java/com/seibel/lod/core/handlers/dimensionFinder/SubDimCompare.java b/src/main/java/com/seibel/lod/core/handlers/dimensionFinder/SubDimCompare.java index 3e8fc7de2..518c55c84 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dimensionFinder/SubDimCompare.java +++ b/src/main/java/com/seibel/lod/core/handlers/dimensionFinder/SubDimCompare.java @@ -19,8 +19,7 @@ package com.seibel.lod.core.handlers.dimensionFinder; -import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; +import com.seibel.lod.core.config.Config; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -36,9 +35,6 @@ import java.io.File; */ public class SubDimCompare implements Comparable { - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); - - public int equalDataPoints = 0; public int totalDataPoints = 0; public int playerPosDist = 0; @@ -79,7 +75,7 @@ public class SubDimCompare implements Comparable /** Returns true if this sub dimension is close enough to be considered a valid sub dimension */ public boolean isValidSubDim() { - double minimumSimilarityRequired = CONFIG.client().multiplayer().getMultiDimensionRequiredSimilarity(); + double minimumSimilarityRequired = Config.Client.Multiplayer.multiDimensionRequiredSimilarity.get(); return this.getPercentEqual() >= minimumSimilarityRequired || this.playerPosDist <= 3; } } diff --git a/src/main/java/com/seibel/lod/core/objects/a7/DHLevel.java b/src/main/java/com/seibel/lod/core/objects/a7/DHLevel.java index c111a125a..f7a1fa12b 100644 --- a/src/main/java/com/seibel/lod/core/objects/a7/DHLevel.java +++ b/src/main/java/com/seibel/lod/core/objects/a7/DHLevel.java @@ -2,6 +2,7 @@ package com.seibel.lod.core.objects.a7; import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.api.internal.a7.ClientApi; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.objects.a7.data.DataFileHandler; import com.seibel.lod.core.objects.a7.pos.DhBlockPos2D; @@ -11,7 +12,6 @@ import com.seibel.lod.core.render.a7LodRenderer; import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.EventLoop; import com.seibel.lod.core.util.LodUtil; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; @@ -22,7 +22,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; public class DHLevel extends LodQuadTree implements Closeable { - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); public final File saveFolder; // Could be null, for no saving public final DataFileHandler dataFileHandler; // Could be null, for no saving @@ -36,7 +35,7 @@ public class DHLevel extends LodQuadTree implements Closeable { public EventLoop eventLoop; public DHLevel(DHWorld world, File saveFolder, IWorldWrapper level) { - super(CONFIG.client().graphics().quality().getLodChunkRenderDistance()*16, + super(Config.Client.Graphics.Quality.lodChunkRenderDistance.get()*16, MC.getPlayerBlockPos().x, MC.getPlayerBlockPos().z); this.world = world; diff --git a/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java b/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java index a8982b49f..6679ce459 100644 --- a/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java +++ b/src/main/java/com/seibel/lod/core/objects/a7/io/DHFolderHandler.java @@ -1,11 +1,11 @@ package com.seibel.lod.core.objects.a7.io; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EServerFolderNameMode; import com.seibel.lod.core.handlers.LodDimensionFinder; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.objects.ParsedIp; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import org.apache.logging.log4j.LogManager; @@ -19,9 +19,8 @@ public class DHFolderHandler { */ public static final String INVALID_FILE_CHARACTERS_REGEX = "[\\\\/:*?\"<>|]"; private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); public static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(LodDimensionFinder.class), - () -> CONFIG.client().advanced().debugging().debugSwitch().getLogFileSubDimEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logFileSubDimEvent.get()); public static File getCurrentWorldFolder() { File dimensionFolder; @@ -80,7 +79,7 @@ public class DHFolderHandler { // determine the format of the folder name - EServerFolderNameMode folderNameMode = CONFIG.client().multiplayer().getServerFolderNameMode(); + EServerFolderNameMode folderNameMode = Config.Client.Multiplayer.serverFolderNameMode.get(); if (folderNameMode == EServerFolderNameMode.AUTO) { if (parsedIp.isLan()) diff --git a/src/main/java/com/seibel/lod/core/objects/a7/io/LevelToFileMatcher.java b/src/main/java/com/seibel/lod/core/objects/a7/io/LevelToFileMatcher.java index fa4c3b5f7..f6dee64c6 100644 --- a/src/main/java/com/seibel/lod/core/objects/a7/io/LevelToFileMatcher.java +++ b/src/main/java/com/seibel/lod/core/objects/a7/io/LevelToFileMatcher.java @@ -3,6 +3,7 @@ package com.seibel.lod.core.objects.a7.io; import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.builders.lodBuilding.LodBuilderConfig; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EDistanceGenerationMode; import com.seibel.lod.core.enums.config.EVerticalQuality; import com.seibel.lod.core.handlers.LodDimensionFileHandler; @@ -20,7 +21,6 @@ import com.seibel.lod.core.objects.lod.LodRegion; import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; import org.apache.logging.log4j.LogManager; @@ -33,9 +33,8 @@ import java.util.concurrent.atomic.AtomicBoolean; public class LevelToFileMatcher { private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); public static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(LodDimensionFinder.class), - () -> CONFIG.client().advanced().debugging().debugSwitch().getLogFileSubDimEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logFileSubDimEvent.get()); /** Increasing this will increase accuracy but increase calculation time */ private static final EVerticalQuality VERTICAL_QUALITY_TO_TEST_WITH = EVerticalQuality.LOW; @@ -73,7 +72,7 @@ public class LevelToFileMatcher { private void tick() { // prevent multiple threads running at the same time - if (CONFIG.client().multiplayer().getMultiDimensionRequiredSimilarity() == 0 || MC.hasSinglePlayerServer()) { + if (Config.Client.Multiplayer.multiDimensionRequiredSimilarity.get() == 0 || MC.hasSinglePlayerServer()) { File saveDir = getLevelFolderWithoutSimilarityMatching(); foundLevel = new DHLevel(dhWorld, saveDir, currentWorld); } else { diff --git a/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java b/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java index 1f596c845..f075b7490 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java @@ -20,6 +20,7 @@ package com.seibel.lod.core.objects.lod; import com.seibel.lod.core.api.internal.ClientApi; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EDistanceGenerationMode; import com.seibel.lod.core.enums.config.EDropoffQuality; import com.seibel.lod.core.enums.config.EGenerationPriority; @@ -33,7 +34,6 @@ import com.seibel.lod.core.objects.PosToGenerateContainer; import com.seibel.lod.core.objects.DHRegionPos; import com.seibel.lod.core.util.*; import com.seibel.lod.core.util.gridList.MovableGridRingList; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; import org.apache.logging.log4j.Logger; @@ -62,7 +62,6 @@ import java.util.concurrent.TimeUnit; */ public class LodDimension { - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); @@ -337,10 +336,10 @@ public class LodDimension } isExpanding = true; - EVerticalQuality verticalQuality = CONFIG.client().graphics().quality().getVerticalQuality(); - EDropoffQuality dropoffQuality = CONFIG.client().graphics().quality().getDropoffQuality(); + EVerticalQuality verticalQuality = Config.Client.Graphics.Quality.verticalQuality.get(); + EDropoffQuality dropoffQuality = Config.Client.Graphics.Quality.dropoffQuality.get(); if (dropoffQuality == EDropoffQuality.AUTO) - dropoffQuality = CONFIG.client().graphics().quality().getLodChunkRenderDistance() < 128 ? + dropoffQuality = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() < 128 ? EDropoffQuality.SMOOTH_DROPOFF : EDropoffQuality.PERFORMANCE_FOCUSED; int dropoffSwitch = dropoffQuality.fastModeSwitch; // don't run the expander multiple times diff --git a/src/main/java/com/seibel/lod/core/objects/lod/LodRegion.java b/src/main/java/com/seibel/lod/core/objects/lod/LodRegion.java index 9ecf8f78d..c632cd7f2 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/LodRegion.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/LodRegion.java @@ -23,6 +23,7 @@ import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.concurrent.atomic.AtomicInteger; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EDistanceGenerationMode; import com.seibel.lod.core.enums.config.EDropoffQuality; import com.seibel.lod.core.enums.config.EGenerationPriority; @@ -34,6 +35,7 @@ import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; +import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; /** * This object holds all loaded LevelContainers acting as a quad tree for a @@ -296,7 +298,7 @@ public class LodRegion { } public byte getRenderDetailLevelAt(int playerPosX, int playerPosZ, byte detailLevel, int offsetX, int offsetZ) { - EGenerationPriority generationPriority = CONFIG.client().worldGenerator().getResolvedGenerationPriority(); + EGenerationPriority generationPriority = getResolvedGenerationPriority(); EDropoffQuality dropoffQuality = CONFIG.client().graphics().quality().getResolvedDropoffQuality(); double minDistance = LevelPosUtil.minDistance(LodUtil.REGION_DETAIL_LEVEL, regionPosX, regionPosZ, @@ -321,13 +323,29 @@ public class LodRegion { int playerPosZ) { // use FAR_FIRST on local worlds and NEAR_FIRST on servers - EGenerationPriority generationPriority = CONFIG.client().worldGenerator().getResolvedGenerationPriority(); + EGenerationPriority generationPriority = getResolvedGenerationPriority(); EDropoffQuality dropoffQuality = CONFIG.client().graphics().quality().getResolvedDropoffQuality(); getPosToRender(posToRender, playerPosX, playerPosZ, generationPriority, dropoffQuality); } + private EGenerationPriority getResolvedGenerationPriority() { + EGenerationPriority priority = Config.Client.WorldGenerator.generationPriority.get(); + IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); + if (priority == EGenerationPriority.AUTO) + priority = MC.hasSinglePlayerServer() ? EGenerationPriority.FAR_FIRST : EGenerationPriority.BALANCED; + return priority; + } + + private EDropoffQuality getResolvedDropoffQuality() { + EDropoffQuality dropoffQuality = Config.Client.Graphics.Quality.dropoffQuality.get(); + if (dropoffQuality == EDropoffQuality.AUTO) + dropoffQuality = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() < 128 ? + EDropoffQuality.SMOOTH_DROPOFF : EDropoffQuality.PERFORMANCE_FOCUSED; + return dropoffQuality; + } + /** * This method will fill the posToRender array with all levelPos that are * render-able. diff --git a/src/main/java/com/seibel/lod/core/objects/opengl/RenderRegion.java b/src/main/java/com/seibel/lod/core/objects/opengl/RenderRegion.java index b5972c10d..ed92723f0 100644 --- a/src/main/java/com/seibel/lod/core/objects/opengl/RenderRegion.java +++ b/src/main/java/com/seibel/lod/core/objects/opengl/RenderRegion.java @@ -30,11 +30,11 @@ import com.seibel.lod.core.api.internal.ClientApi; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.CubicLodTemplate; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.LodQuadBuilder; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.ELodDirection; import com.seibel.lod.core.enums.config.EGpuUploadMethod; import com.seibel.lod.core.enums.rendering.EDebugMode; import com.seibel.lod.core.enums.rendering.EGLProxyContext; -import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.objects.DHBlockPos; import com.seibel.lod.core.objects.BoolType; import com.seibel.lod.core.objects.LodDataView; @@ -52,14 +52,11 @@ import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.StatsMap; import com.seibel.lod.core.util.gridList.PosArrayGridList; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import static com.seibel.lod.core.render.LodRenderer.EVENT_LOGGER; public class RenderRegion implements AutoCloseable { - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); - /** stores if the region at the given x and z index needs to be regenerated */ // Use int because I need Tri state: private final AtomicInteger needRegen = new AtomicInteger(2); @@ -189,7 +186,7 @@ public class RenderRegion implements AutoCloseable return CompletableFuture.supplyAsync(() -> { try { EVENT_LOGGER.trace("RenderRegion start QuadBuild @ {}", regionPos); - int skyLightCullingBelow = CONFIG.client().graphics().advancedGraphics().getCaveCullingHeight(); + int skyLightCullingBelow = Config.Client.Graphics.AdvancedGraphics.caveCullingHeight.get(); // FIXME: Clamp also to the max world height. skyLightCullingBelow = Math.max(skyLightCullingBelow, LodBuilder.MIN_WORLD_HEIGHT); LodQuadBuilder builder = new LodQuadBuilder(doCaveCulling, skyLightCullingBelow); @@ -257,7 +254,7 @@ public class RenderRegion implements AutoCloseable byte minDetail = region.getMinDetailLevel(); // Variable initialization - EDebugMode debugMode = CONFIG.client().advanced().debugging().getDebugMode(); + EDebugMode debugMode = Config.Client.Advanced.Debugging.debugMode.get(); // We ask the lod dimension which block we have to render given the player // position diff --git a/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java b/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java index c2471840d..2aaf0cec7 100644 --- a/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java +++ b/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java @@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit; import com.seibel.lod.core.api.internal.ClientApi; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.LodQuadBuilder; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.render.LodRenderer; import com.seibel.lod.core.render.objects.GLVertexBuffer; @@ -34,20 +35,17 @@ import org.lwjgl.opengl.GL32; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.LodBufferBuilderFactory; import com.seibel.lod.core.enums.config.EGpuUploadMethod; -import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.LodQuadBuilder.BufferFiller; import com.seibel.lod.core.render.GLProxy; import com.seibel.lod.core.render.LodRenderProgram; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.StatsMap; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import static com.seibel.lod.core.render.GLProxy.GL_LOGGER; public class SimpleRenderBuffer extends RenderBuffer { private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final long MAX_BUFFER_UPLOAD_TIMEOUT_NANOSECONDS = 1_000_000; GLVertexBuffer[] vbos; @@ -123,8 +121,8 @@ public class SimpleRenderBuffer extends RenderBuffer private void _uploadBuffersDirect(LodQuadBuilder builder, EGpuUploadMethod method) { resize(builder.getCurrentNeededVertexBufferCount()); long remainingNS = 0; - long BPerNS = CONFIG.client().advanced().buffers().getGpuUploadPerMegabyteInMilliseconds(); - + long BPerNS = Config.Client.Advanced.Buffers.gpuUploadPerMegabyteInMilliseconds.get(); + int i = 0; Iterator iter = builder.makeVertexBuffers(); while (iter.hasNext()) { diff --git a/src/main/java/com/seibel/lod/core/render/GLProxy.java b/src/main/java/com/seibel/lod/core/render/GLProxy.java index 41f5970c9..f0676de3c 100644 --- a/src/main/java/com/seibel/lod/core/render/GLProxy.java +++ b/src/main/java/com/seibel/lod/core/render/GLProxy.java @@ -26,6 +26,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.logging.DhLoggerBuilder; import org.apache.logging.log4j.LogManager; @@ -44,7 +45,6 @@ import com.seibel.lod.core.enums.rendering.EGLProxyContext; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.util.GLMessage; import com.seibel.lod.core.util.GLMessageOutputStream; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; /** @@ -67,15 +67,14 @@ import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; public class GLProxy { public static final boolean OVERWIDE_VANILLA_GL_LOGGER = ModInfo.IS_DEV_BUILD; - - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); + private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); private ExecutorService workerThread = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat(GLProxy.class.getSimpleName() + "-Worker-Thread").build()); private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); public static final ConfigBasedLogger GL_LOGGER = new ConfigBasedLogger(LogManager.getLogger(GLProxy.class), - () -> CONFIG.client().advanced().debugging().debugSwitch().getLogRendererGLEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logRendererGLEvent.get()); private static GLProxy instance = null; @@ -418,7 +417,7 @@ public class GLProxy } public EGpuUploadMethod getGpuUploadMethod() { - EGpuUploadMethod method = CONFIG.client().advanced().buffers().getGpuUploadMethod(); + EGpuUploadMethod method = Config.Client.Advanced.Buffers.gpuUploadMethod.get(); if (!bufferStorageSupported && method == EGpuUploadMethod.BUFFER_STORAGE) { diff --git a/src/main/java/com/seibel/lod/core/render/LodFogConfig.java b/src/main/java/com/seibel/lod/core/render/LodFogConfig.java index ad7a54a75..504a1b36e 100644 --- a/src/main/java/com/seibel/lod/core/render/LodFogConfig.java +++ b/src/main/java/com/seibel/lod/core/render/LodFogConfig.java @@ -19,6 +19,7 @@ package com.seibel.lod.core.render; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.rendering.EFogDrawMode; import com.seibel.lod.core.enums.rendering.EFogDistance; import com.seibel.lod.core.enums.rendering.*; @@ -72,7 +73,7 @@ public class LodFogConfig /** sets all fog options from the config */ private LodFogConfig(EFogDrawMode fogDrawMode) { - earthCurveRatio = CONFIG.client().graphics().advancedGraphics().getEarthCurveRatio(); //FIXME: Move this out of here + earthCurveRatio = Config.Client.Graphics.AdvancedGraphics.earthCurveRatio.get(); //FIXME: Move this out of here if (fogDrawMode != EFogDrawMode.FOG_DISABLED) { diff --git a/src/main/java/com/seibel/lod/core/render/LodRenderer.java b/src/main/java/com/seibel/lod/core/render/LodRenderer.java index 050f8ae41..c1032e470 100644 --- a/src/main/java/com/seibel/lod/core/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/core/render/LodRenderer.java @@ -24,6 +24,7 @@ import java.time.Duration; import java.util.concurrent.TimeUnit; import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.logging.ConfigBasedSpamLogger; import com.seibel.lod.core.objects.DHBlockPos; @@ -47,7 +48,6 @@ import com.seibel.lod.core.objects.math.Mat4f; import com.seibel.lod.core.objects.math.Vec3d; import com.seibel.lod.core.objects.math.Vec3f; import com.seibel.lod.core.objects.opengl.RenderRegion; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper; @@ -62,12 +62,11 @@ import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; */ public class LodRenderer { - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); public static final ConfigBasedLogger EVENT_LOGGER = new ConfigBasedLogger(LogManager.getLogger(LodRenderer.class), - () -> CONFIG.client().advanced().debugging().debugSwitch().getLogRendererBufferEvent()); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logRendererBufferEvent.get()); public static ConfigBasedSpamLogger tickLogger = new ConfigBasedSpamLogger(LogManager.getLogger(LodRenderer.class), - () -> CONFIG.client().advanced().debugging().debugSwitch().getLogRendererBufferEvent(),1); + () -> Config.Client.Advanced.Debugging.DebugSwitch.logRendererBufferEvent.get(),1); public static final boolean ENABLE_DRAW_LAG_SPIKE_LOGGING = false; public static final boolean ENABLE_DUMP_GL_STATE = true; public static final long DRAW_LAG_SPIKE_THRESHOLD_NS = TimeUnit.NANOSECONDS.convert(20, TimeUnit.MILLISECONDS); @@ -184,7 +183,7 @@ public class LodRenderer drawSaveGLState.end("drawSaveGLState"); GLProxy glProxy = GLProxy.getInstance(); - if (canVanillaFogBeDisabled && CONFIG.client().graphics().fogQuality().getDisableVanillaFog()) + if (canVanillaFogBeDisabled && Config.Client.Graphics.FogQuality.disableVanillaFog.get()) if (!MC_RENDER.tryDisableVanillaFog()) canVanillaFogBeDisabled = false; @@ -248,10 +247,10 @@ public class LodRenderer drawBindBuff.end("drawBindBuff"); // set the required open GL settings LagSpikeCatcher drawSetPolygon = new LagSpikeCatcher(); - if (CONFIG.client().advanced().debugging().getDebugMode() == EDebugMode.SHOW_DETAIL_WIREFRAME - || CONFIG.client().advanced().debugging().getDebugMode() == EDebugMode.SHOW_GENMODE_WIREFRAME - || CONFIG.client().advanced().debugging().getDebugMode() == EDebugMode.SHOW_WIREFRAME - || CONFIG.client().advanced().debugging().getDebugMode() == EDebugMode.SHOW_OVERLAPPING_QUADS_WIREFRAME) { + if (Config.Client.Advanced.Debugging.debugMode.get() == EDebugMode.SHOW_DETAIL_WIREFRAME + || Config.Client.Advanced.Debugging.debugMode.get() == EDebugMode.SHOW_GENMODE_WIREFRAME + || Config.Client.Advanced.Debugging.debugMode.get() == EDebugMode.SHOW_WIREFRAME + || Config.Client.Advanced.Debugging.debugMode.get() == EDebugMode.SHOW_OVERLAPPING_QUADS_WIREFRAME) { GL32.glPolygonMode(GL32.GL_FRONT_AND_BACK, GL32.GL_LINE); //GL32.glDisable(GL32.GL_CULL_FACE); } @@ -301,9 +300,9 @@ public class LodRenderer int farPlaneBlockDistance; // required for setupFog and setupProjectionMatrix if (MC.getWrappedClientWorld().getDimensionType().hasCeiling()) - farPlaneBlockDistance = Math.min(CONFIG.client().graphics().quality().getLodChunkRenderDistance(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * LodUtil.CHUNK_WIDTH; + farPlaneBlockDistance = Math.min(Config.Client.Graphics.Quality.lodChunkRenderDistance.get(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * LodUtil.CHUNK_WIDTH; else - farPlaneBlockDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * LodUtil.CHUNK_WIDTH; + farPlaneBlockDistance = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() * LodUtil.CHUNK_WIDTH; drawCalculateParams.end("drawCalculateParams"); Mat4f combinedMatrix = createCombinedMatrix(baseProjectionMatrix, baseModelViewMatrix, @@ -337,7 +336,7 @@ public class LodRenderer profiler.popPush("LOD draw"); LagSpikeCatcher draw = new LagSpikeCatcher(); - boolean cullingDisabled = CONFIG.client().graphics().advancedGraphics().getDisableDirectionalCulling(); + boolean cullingDisabled = Config.Client.Graphics.AdvancedGraphics.disableDirectionalCulling.get(); Vec3d cameraPos = MC_RENDER.getCameraExactPosition(); DHBlockPos cameraBlockPos = MC_RENDER.getCameraBlockPosition(); Vec3f cameraDir = MC_RENDER.getLookAtVector(); @@ -432,7 +431,7 @@ public class LodRenderer { Color fogColor; - if (CONFIG.client().graphics().fogQuality().getFogColorMode() == EFogColorMode.USE_SKY_COLOR) + if (Config.Client.Graphics.FogQuality.fogColorMode.get() == EFogColorMode.USE_SKY_COLOR) fogColor = MC_RENDER.getSkyColor(); else fogColor = MC_RENDER.getFogColor(partialTicks); @@ -465,9 +464,9 @@ public class LodRenderer Mat4f lodProj = projMat.copy(); float nearClipPlane; - if (CONFIG.client().advanced().getLodOnlyMode()) { + if (Config.Client.Advanced.lodOnlyMode.get()) { nearClipPlane = 0.1f; - } else if (CONFIG.client().graphics().advancedGraphics().getUseExtendedNearClipPlane()) { + } else if (Config.Client.Graphics.AdvancedGraphics.useExtendedNearClipPlane.get()) { nearClipPlane = Math.min((vanillaBlockRenderedDistance-16f),8f*16f); } else { nearClipPlane = 16f; @@ -529,7 +528,7 @@ public class LodRenderer // if the player is high enough, draw all LODs IWorldWrapper world = MC.getWrappedClientWorld(); if (lastUpdatedPos.getY() > world.getHeight()-world.getMinHeight() || - CONFIG.client().advanced().getLodOnlyMode()) { + Config.Client.Advanced.lodOnlyMode.get()) { if (vanillaChunks != null) { vanillaChunks = null; return true; @@ -564,25 +563,25 @@ public class LodRenderer boolean tryFullGen = false; // check if the view distance or config changed - if (InternalApiShared.previousLodRenderDistance != CONFIG.client().graphics().quality().getLodChunkRenderDistance() + if (InternalApiShared.previousLodRenderDistance != Config.Client.Graphics.Quality.lodChunkRenderDistance.get() || chunkRenderDistance != prevRenderDistance - || prevFogDistance != CONFIG.client().graphics().fogQuality().getFogDistance()) + || prevFogDistance != Config.Client.Graphics.FogQuality.fogDistance.get()) { DetailDistanceUtil.updateSettings(); // FIXME: This should NOT be here! - prevFogDistance = CONFIG.client().graphics().fogQuality().getFogDistance(); + prevFogDistance = Config.Client.Graphics.FogQuality.fogDistance.get(); prevRenderDistance = chunkRenderDistance; tryFullGen = true; - } else if (CONFIG.client().advanced().debugging().getDebugMode() != previousDebugMode) + } else if (Config.Client.Advanced.Debugging.debugMode.get() != previousDebugMode) { // did the user change the debug setting? - previousDebugMode = CONFIG.client().advanced().debugging().getDebugMode(); + previousDebugMode = Config.Client.Advanced.Debugging.debugMode.get(); tryFullGen = true; } // check if the player has moved - if (newTime - prevPlayerPosTime > CONFIG.client().advanced().buffers().getRebuildTimes().playerMoveTimeout) { + if (newTime - prevPlayerPosTime > Config.Client.Advanced.Buffers.rebuildTimes.get().playerMoveTimeout) { if (lastUpdatedPos == null - || Math.abs(newPos.getX() - lastUpdatedPos.getX()) > CONFIG.client().advanced().buffers().getRebuildTimes().playerMoveDistance*16 - || Math.abs(newPos.getZ() - lastUpdatedPos.getZ()) > CONFIG.client().advanced().buffers().getRebuildTimes().playerMoveDistance*16) + || Math.abs(newPos.getX() - lastUpdatedPos.getX()) > Config.Client.Advanced.Buffers.rebuildTimes.get().playerMoveDistance*16 + || Math.abs(newPos.getZ() - lastUpdatedPos.getZ()) > Config.Client.Advanced.Buffers.rebuildTimes.get().playerMoveDistance*16) { shouldUpdateChunks = true; } @@ -590,14 +589,14 @@ public class LodRenderer } // check if the vanilla rendered chunks changed - if (newTime - prevVanillaChunkTime > CONFIG.client().advanced().buffers().getRebuildTimes().renderedChunkTimeout) + if (newTime - prevVanillaChunkTime > Config.Client.Advanced.Buffers.rebuildTimes.get().renderedChunkTimeout) { shouldUpdateChunks = true; prevVanillaChunkTime = newTime; } // check if there is any newly generated terrain to show - if (newTime - prevChunkTime > CONFIG.client().advanced().buffers().getRebuildTimes().chunkChangeTimeout) + if (newTime - prevChunkTime > Config.Client.Advanced.Buffers.rebuildTimes.get().chunkChangeTimeout) { tryPartialGen = true; prevChunkTime = newTime; diff --git a/src/main/java/com/seibel/lod/core/util/DetailDistanceUtil.java b/src/main/java/com/seibel/lod/core/util/DetailDistanceUtil.java index 17ef4b168..956d21b78 100644 --- a/src/main/java/com/seibel/lod/core/util/DetailDistanceUtil.java +++ b/src/main/java/com/seibel/lod/core/util/DetailDistanceUtil.java @@ -19,9 +19,8 @@ package com.seibel.lod.core.util; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EHorizontalQuality; -import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; /** * @@ -30,22 +29,20 @@ import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; */ public class DetailDistanceUtil { - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); - - private static byte minDetail = CONFIG.client().graphics().quality().getDrawResolution().detailLevel; + private static byte minDetail = Config.Client.Graphics.Quality.drawResolution.get().detailLevel; private static final byte maxDetail = LodUtil.DETAIL_OPTIONS; private static final double minDistance = 0; - private static double distanceUnit = 16 * CONFIG.client().graphics().quality().getHorizontalScale(); - private static double maxDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * 16 * 2; - private static double logBase = Math.log(CONFIG.client().graphics().quality().getHorizontalQuality().quadraticBase); + private static double distanceUnit = 16 * Config.Client.Graphics.Quality.horizontalScale.get(); + private static double maxDistance = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() * 16 * 2; + private static double logBase = Math.log(Config.Client.Graphics.Quality.horizontalQuality.get().quadraticBase); public static void updateSettings() { - distanceUnit = 16 * CONFIG.client().graphics().quality().getHorizontalScale(); - minDetail = CONFIG.client().graphics().quality().getDrawResolution().detailLevel; - maxDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * 16 * 8; - logBase = Math.log(CONFIG.client().graphics().quality().getHorizontalQuality().quadraticBase); + distanceUnit = 16 * Config.Client.Graphics.Quality.horizontalScale.get(); + minDetail = Config.Client.Graphics.Quality.drawResolution.get().detailLevel; + maxDistance = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() * 16 * 8; + logBase = Math.log(Config.Client.Graphics.Quality.horizontalQuality.get().quadraticBase); } public static double baseDistanceFunction(int detail) @@ -57,11 +54,11 @@ public class DetailDistanceUtil detail-=minDetail; - if (CONFIG.client().graphics().quality().getHorizontalQuality() == EHorizontalQuality.LOWEST) + if (Config.Client.Graphics.Quality.horizontalQuality.get() == EHorizontalQuality.LOWEST) return ((double)detail * distanceUnit); else { - double base = CONFIG.client().graphics().quality().getHorizontalQuality().quadraticBase; + double base = Config.Client.Graphics.Quality.horizontalQuality.get().quadraticBase; return Math.pow(base, detail) * distanceUnit; } } @@ -81,7 +78,7 @@ public class DetailDistanceUtil int detail; - if (CONFIG.client().graphics().quality().getHorizontalQuality() == EHorizontalQuality.LOWEST) + if (Config.Client.Graphics.Quality.horizontalQuality.get() == EHorizontalQuality.LOWEST) detail = (int) (distance/distanceUnit); else detail = (int) (Math.log(distance/distanceUnit) / logBase); @@ -104,7 +101,7 @@ public class DetailDistanceUtil public static int getMaxVerticalData(int detail) { - return CONFIG.client().graphics().quality().getVerticalQuality().maxVerticalData[detail]; + return Config.Client.Graphics.Quality.verticalQuality.get().maxVerticalData[detail]; } } diff --git a/src/main/java/com/seibel/lod/core/util/LodUtil.java b/src/main/java/com/seibel/lod/core/util/LodUtil.java index ccb6e2222..2943b1181 100644 --- a/src/main/java/com/seibel/lod/core/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/core/util/LodUtil.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import com.seibel.lod.core.config.Config; import com.seibel.lod.core.enums.config.EServerFolderNameMode; import com.seibel.lod.core.enums.config.EVanillaOverdraw; import com.seibel.lod.core.handlers.IReflectionHandler; @@ -38,7 +39,6 @@ import com.seibel.lod.core.objects.opengl.LodVertexFormat; import com.seibel.lod.core.util.gridList.EdgeDistanceBooleanGrid; import com.seibel.lod.core.wrapperInterfaces.IVersionConstants; import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; -import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; @@ -54,7 +54,6 @@ public class LodUtil { private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); private static final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.get(IMinecraftRenderWrapper.class); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class); private static final IReflectionHandler REFLECTION_HANDLER = SingletonHandler.get(IReflectionHandler.class); private static final IVersionConstants VERSION_CONSTANTS = SingletonHandler.get(IVersionConstants.class); @@ -261,7 +260,7 @@ public class LodUtil // determine the format of the folder name - EServerFolderNameMode folderNameMode = CONFIG.client().multiplayer().getServerFolderNameMode(); + EServerFolderNameMode folderNameMode = Config.Client.Multiplayer.serverFolderNameMode.get(); if (folderNameMode == EServerFolderNameMode.AUTO) { if (parsedIp.isLan()) @@ -350,11 +349,11 @@ public class LodUtil public static int computeOverdrawOffset(LodDimension lodDim) { int chunkRenderDist = MC_RENDER.getRenderDistance() + 1; - EVanillaOverdraw overdraw = CONFIG.client().graphics().advancedGraphics().getVanillaOverdraw(); + EVanillaOverdraw overdraw = Config.Client.Graphics.AdvancedGraphics.vanillaOverdraw.get(); if (overdraw == EVanillaOverdraw.ALWAYS) return Integer.MAX_VALUE; int offset; if (overdraw == EVanillaOverdraw.NEVER) { - offset = CONFIG.client().graphics().advancedGraphics().getOverdrawOffset(); + offset = Config.Client.Graphics.AdvancedGraphics.overdrawOffset.get(); } else { if (chunkRenderDist < MINIMUM_RENDER_DISTANCE_FOR_FAR_OVERDRAW) { offset = 1; diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java index d708713e5..d8c9601aa 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java @@ -19,6 +19,8 @@ package com.seibel.lod.core.wrapperInterfaces.config; +import com.seibel.lod.core.config.Config; +import com.seibel.lod.core.config.types.ConfigCategory; import com.seibel.lod.core.enums.rendering.EFogDrawMode; import com.seibel.lod.core.enums.rendering.EFogColorMode; import com.seibel.lod.core.enums.rendering.EFogDistance; @@ -80,9 +82,9 @@ public interface ILodConfigWrapperSingleton extends IBindable EDropoffQuality getDropoffQuality(); void setDropoffQuality(EDropoffQuality newDropoffQuality); default EDropoffQuality getResolvedDropoffQuality() { - EDropoffQuality dropoffQuality = getDropoffQuality(); + EDropoffQuality dropoffQuality = Config.Client.Graphics.Quality.dropoffQuality.get(); if (dropoffQuality == EDropoffQuality.AUTO) - dropoffQuality = getLodChunkRenderDistance() < 128 ? + dropoffQuality = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() < 128 ? EDropoffQuality.SMOOTH_DROPOFF : EDropoffQuality.PERFORMANCE_FOCUSED; return dropoffQuality; } @@ -158,12 +160,12 @@ public interface ILodConfigWrapperSingleton extends IBindable default EFogSetting computeHeightFogSetting() { return new EFogSetting( - getHeightFogStart(), - getHeightFogEnd(), - getHeightFogMin(), - getHeightFogMax(), - getHeightFogDensity(), - getHeightFogType() + Config.Client.Graphics.FogQuality.AdvancedFog.HeightFog.heightFogDensity.get(), + Config.Client.Graphics.FogQuality.AdvancedFog.HeightFog.heightFogEnd.get(), + Config.Client.Graphics.FogQuality.AdvancedFog.HeightFog.heightFogMin.get(), + Config.Client.Graphics.FogQuality.AdvancedFog.HeightFog.heightFogMax.get(), + Config.Client.Graphics.FogQuality.AdvancedFog.HeightFog.heightFogDensity.get(), + Config.Client.Graphics.FogQuality.AdvancedFog.HeightFog.heightFogType.get() ); } } @@ -261,7 +263,7 @@ public interface ILodConfigWrapperSingleton extends IBindable void setGenerationPriority(EGenerationPriority newGenerationPriority); default EGenerationPriority getResolvedGenerationPriority() { - EGenerationPriority priority = getGenerationPriority(); + EGenerationPriority priority = Config.Client.WorldGenerator.generationPriority.get(); IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); if (priority == EGenerationPriority.AUTO) priority = MC.hasSinglePlayerServer() ? EGenerationPriority.FAR_FIRST : EGenerationPriority.BALANCED; @@ -295,12 +297,12 @@ public interface ILodConfigWrapperSingleton extends IBindable void setNumberOfWorldGenerationThreads(double newNumberOfWorldGenerationThreads); default int _getWorldGenerationThreadPoolSize() { - return getNumberOfWorldGenerationThreads()<1 ? 1 : - (int) Math.ceil(getNumberOfWorldGenerationThreads()); + return Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()<1 ? 1 : + (int) Math.ceil(Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()); } default double _getWorldGenerationPartialRunTime() { - return getNumberOfWorldGenerationThreads()>1 ? 1.0 : getNumberOfWorldGenerationThreads(); + return Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get()>1 ? 1.0 : Config.Client.Advanced.Threading.numberOfWorldGenerationThreads.get(); } int getNumberOfBufferBuilderThreads();