diff --git a/src/main/java/com/seibel/lod/api/forge/ForgeConfig.java b/src/main/java/com/seibel/lod/api/forge/ForgeConfig.java index 90b54173a..87b4ac12d 100644 --- a/src/main/java/com/seibel/lod/api/forge/ForgeConfig.java +++ b/src/main/java/com/seibel/lod/api/forge/ForgeConfig.java @@ -28,7 +28,7 @@ import org.apache.logging.log4j.LogManager; import com.electronwill.nightconfig.core.file.CommentedFileConfig; import com.electronwill.nightconfig.core.io.WritingMode; import com.seibel.lod.ModInfo; -import com.seibel.lod.core.enums.config.BlockToAvoid; +import com.seibel.lod.core.enums.config.BlocksToAvoid; import com.seibel.lod.core.enums.config.BufferRebuildTimes; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.GenerationPriority; @@ -262,7 +262,7 @@ public class ForgeConfig public final ForgeConfigSpec.EnumValue generationPriority; public final ForgeConfigSpec.EnumValue distanceGenerationMode; public final ForgeConfigSpec.BooleanValue allowUnstableFeatureGeneration; - public final ForgeConfigSpec.EnumValue blockToAvoid; + public final ForgeConfigSpec.EnumValue blocksToAvoid; //public final ForgeConfigSpec.BooleanValue useExperimentalPreGenLoading; WorldGenerator(ForgeConfigSpec.Builder builder) @@ -284,10 +284,10 @@ public class ForgeConfig + IWorldGenerator.ALLOW_UNSTABLE_FEATURE_GENERATION_DESC) .define("Allow Unstable Feature Generation", IWorldGenerator.ALLOW_UNSTABLE_FEATURE_GENERATION_DEFAULT); - blockToAvoid = builder + blocksToAvoid = builder .comment("\n\n" - + IWorldGenerator.BLOCK_TO_AVOID_DESC) - .defineEnum("Block to avoid", IWorldGenerator.BLOCK_TO_AVOID_DEFAULT); + + IWorldGenerator.BLOCKS_TO_AVOID_DESC) + .defineEnum("Blocks to avoid", IWorldGenerator.BLOCKS_TO_AVOID_DEFAULT); /*useExperimentalPreGenLoading = builder .comment("\n\n" @@ -375,8 +375,8 @@ public class ForgeConfig enableDebugKeybindings = builder .comment("\n\n" - + IDebugging.ENABLE_DEBUG_KEYBINDINGS_DESC) - .define("Enable Debug Keybinding", IDebugging.ENABLE_DEBUG_KEYBINDINGS_DEFAULT); + + IDebugging.DEBUG_KEYBINDINGS_ENABLED_DESC) + .define("Enable Debug Keybinding", IDebugging.DEBUG_KEYBINDINGS_ENABLED_DEFAULT); builder.pop(); } diff --git a/src/main/java/com/seibel/lod/api/forge/ForgeMain.java b/src/main/java/com/seibel/lod/api/forge/ForgeMain.java index 4457c62da..f09619094 100644 --- a/src/main/java/com/seibel/lod/api/forge/ForgeMain.java +++ b/src/main/java/com/seibel/lod/api/forge/ForgeMain.java @@ -20,6 +20,7 @@ package com.seibel.lod.api.forge; import com.seibel.lod.ModInfo; +import com.seibel.lod.wrappers.DependencySetup; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -37,7 +38,7 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; * check out the ClientProxy. * * @author James Seibel - * @version 7-3-2021 + * @version 11-16-2021 */ @Mod(ModInfo.ID) public class ForgeMain @@ -46,6 +47,8 @@ public class ForgeMain private void init(final FMLCommonSetupEvent event) { + // make sure the dependencies are set up before the mod needs them + DependencySetup.createInitialBindings(); ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ForgeConfig.CLIENT_SPEC); } diff --git a/src/main/java/com/seibel/lod/api/lod/ClientApi.java b/src/main/java/com/seibel/lod/api/lod/ClientApi.java index d9cc7c64a..277027162 100644 --- a/src/main/java/com/seibel/lod/api/lod/ClientApi.java +++ b/src/main/java/com/seibel/lod/api/lod/ClientApi.java @@ -145,7 +145,7 @@ public class ClientApi - config.client().advanced().debugging().setEnableDebugKeybindings(true); + config.client().advanced().debugging().setDebugKeybindingsEnabled(true); } diff --git a/src/main/java/com/seibel/lod/api/lod/EventApi.java b/src/main/java/com/seibel/lod/api/lod/EventApi.java index 3815d4573..03c1efccf 100644 --- a/src/main/java/com/seibel/lod/api/lod/EventApi.java +++ b/src/main/java/com/seibel/lod/api/lod/EventApi.java @@ -21,7 +21,6 @@ package com.seibel.lod.api.lod; import org.lwjgl.glfw.GLFW; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.builders.worldGeneration.LodWorldGenerator; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.objects.lod.LodDimension; @@ -31,6 +30,8 @@ import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.ThreadMapUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; import com.seibel.lod.wrappers.chunk.ChunkWrapper; @@ -49,6 +50,7 @@ public class EventApi public static final EventApi INSTANCE = new EventApi(); private final MinecraftWrapper mc = MinecraftWrapper.INSTANCE; + private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); /** * can be set if we want to recalculate variables related @@ -163,16 +165,17 @@ public class EventApi public void onKeyInput(int key, int keyAction) { - if (ForgeConfig.CLIENT.advancedModOptions.debugging.enableDebugKeybindings.get() - && key == GLFW.GLFW_KEY_F4 && keyAction == GLFW.GLFW_PRESS) + if (config.client().advanced().debugging().getDebugKeybindingsEnabled()) { - ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.set(ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.get().getNext()); - } - - if (ForgeConfig.CLIENT.advancedModOptions.debugging.enableDebugKeybindings.get() - && key == GLFW.GLFW_KEY_F6 && keyAction == GLFW.GLFW_PRESS) - { - ForgeConfig.CLIENT.advancedModOptions.debugging.drawLods.set(!ForgeConfig.CLIENT.advancedModOptions.debugging.drawLods.get()); + if (key == GLFW.GLFW_KEY_F4 && keyAction == GLFW.GLFW_PRESS) + { + config.client().advanced().debugging().setDebugMode(config.client().advanced().debugging().getDebugMode().getNext()); + } + + if (key == GLFW.GLFW_KEY_F6 && keyAction == GLFW.GLFW_PRESS) + { + config.client().advanced().debugging().setDrawLods(!config.client().advanced().debugging().getDrawLods()); + } } } @@ -196,9 +199,9 @@ public class EventApi // calculate how wide the dimension(s) should be in regions int chunksWide; if (mc.getClientWorld().dimensionType().hasCeiling()) - chunksWide = Math.min(ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * 2 + 1; + chunksWide = Math.min(config.client().graphics().quality().getLodChunkRenderDistance(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * 2 + 1; else - chunksWide = ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get() * 2 + 1; + chunksWide = config.client().graphics().quality().getLodChunkRenderDistance() * 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/bufferBuilding/LodBufferBuilderFactory.java b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java index 2fbd90ca0..c43d1d640 100644 --- a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java +++ b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java @@ -36,7 +36,6 @@ import org.lwjgl.opengl.GL30; import org.lwjgl.opengl.GL45; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.api.lod.ClientApi; import com.seibel.lod.core.enums.LodDirection; import com.seibel.lod.core.enums.config.GpuUploadMethod; @@ -57,6 +56,8 @@ import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.ThreadMapUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.wrappers.block.BlockPosWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; @@ -70,11 +71,12 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; */ public class LodBufferBuilderFactory { + private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); /** The thread used to generate new LODs off the main thread. */ public static final ExecutorService mainGenThread = Executors.newSingleThreadExecutor(new LodThreadFactory(LodBufferBuilderFactory.class.getSimpleName() + " - main")); /** The threads used to generate buffers. */ - public static final ExecutorService bufferBuilderThreads = Executors.newFixedThreadPool(ForgeConfig.CLIENT.advancedModOptions.threading.numberOfBufferBuilderThreads.get(), new ThreadFactoryBuilder().setNameFormat("Buffer-Builder-%d").build()); + public static final ExecutorService bufferBuilderThreads = Executors.newFixedThreadPool(config.client().advanced().threading().getNumberOfBufferBuilderThreads(), new ThreadFactoryBuilder().setNameFormat("Buffer-Builder-%d").build()); /** * When uploading to a buffer that is too small, @@ -402,7 +404,7 @@ public class LodBufferBuilderFactory break; //We send the call to create the vertices - ForgeConfig.CLIENT.graphics.advancedGraphicsOption.lodTemplate.get().template.addLodToBuffer(currentBuffers[bufferIndex], playerBlockPosRounded, data, adjData, + config.client().graphics().advancedGraphics().getLodTemplate().template.addLodToBuffer(currentBuffers[bufferIndex], playerBlockPosRounded, data, adjData, detailLevel, posX, posZ, box, renderer.previousDebugMode, adjShadeDisabled); } @@ -481,7 +483,7 @@ public class LodBufferBuilderFactory // check if the chunk is on the border boolean isItBorderPos; - if (ForgeConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.get() == VanillaOverdraw.BORDER) + if (config.client().graphics().advancedGraphics().getVanillaOverdraw() == VanillaOverdraw.BORDER) isItBorderPos = LodUtil.isBorderChunk(vanillaRenderedChunks, chunkXdist + gameChunkRenderDistance + 1, chunkZdist + gameChunkRenderDistance + 1); else isItBorderPos = false; @@ -759,12 +761,12 @@ public class LodBufferBuilderFactory glProxy.setGlContext(GlProxyContext.LOD_BUILDER); // determine the upload method - GpuUploadMethod uploadMethod = ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadMethod.get(); + GpuUploadMethod uploadMethod = config.client().graphics().advancedGraphics().getGpuUploadMethod(); if (!glProxy.bufferStorageSupported && uploadMethod == GpuUploadMethod.BUFFER_STORAGE) { // if buffer storage isn't supported // default to SUB_DATA - ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadMethod.set(GpuUploadMethod.SUB_DATA); + config.client().graphics().advancedGraphics().setGpuUploadMethod(GpuUploadMethod.SUB_DATA); uploadMethod = GpuUploadMethod.SUB_DATA; } 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 a779006cc..5792cbcc3 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 @@ -22,7 +22,6 @@ package com.seibel.lod.core.builders.lodBuilding; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.HorizontalResolution; import com.seibel.lod.core.objects.lod.LodDimension; @@ -35,6 +34,8 @@ import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.ThreadMapUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IBiomeWrapper; import com.seibel.lod.core.wrapperAdapters.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; @@ -58,7 +59,7 @@ public class LodBuilder private static final MinecraftWrapper mc = MinecraftWrapper.INSTANCE; private final ExecutorService lodGenThreadPool = Executors.newSingleThreadExecutor(new LodThreadFactory(this.getClass().getSimpleName())); - + private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); /** If no blocks are found in the area in determineBottomPointForArea return this */ public static final short DEFAULT_DEPTH = 0; @@ -337,10 +338,10 @@ public class LodBuilder * Generate the color for the given chunk using biome water color, foliage * color, and grass color. */ - private int generateLodColor(ChunkWrapper chunk, LodBuilderConfig config, int xRel, int yAbs, int zRel, BlockPosWrapper blockPos) + private int generateLodColor(ChunkWrapper chunk, LodBuilderConfig builderConfig, int xRel, int yAbs, int zRel, BlockPosWrapper blockPos) { int colorInt; - if (config.useBiomeColors) + if (builderConfig.useBiomeColors) { // I have no idea why I need to bit shift to the right, but // if I don't the biomes don't show up correctly. @@ -355,7 +356,7 @@ public class LodBuilder // snow, flowers, etc. Get the above block so we can still get the color // of the snow, flower, etc. that may be above this block int aboveColorInt = 0; - if (ForgeConfig.CLIENT.worldGenerator.blockToAvoid.get().nonFull || ForgeConfig.CLIENT.worldGenerator.blockToAvoid.get().noCollision) + if (config.client().worldGenerator().getBlocksToAvoid().nonFull || config.client().worldGenerator().getBlocksToAvoid().noCollision) { blockPos.set(chunk.getPos().getMinBlockX() + xRel, yAbs + 1, chunk.getPos().getMinBlockZ() + zRel); aboveColorInt = getColorForBlock(chunk, blockPos); @@ -519,8 +520,8 @@ public class LodBuilder if (chunk.isWaterLogged(blockPos)) return true; - boolean nonFullAvoidance = ForgeConfig.CLIENT.worldGenerator.blockToAvoid.get().nonFull; - boolean noCollisionAvoidance = ForgeConfig.CLIENT.worldGenerator.blockToAvoid.get().noCollision; + boolean nonFullAvoidance = config.client().worldGenerator().getBlocksToAvoid().nonFull; + boolean noCollisionAvoidance = config.client().worldGenerator().getBlocksToAvoid().noCollision; BlockShapeWrapper block = chunk.getBlockShapeWrapper(blockPos); return !block.isToAvoid() diff --git a/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java b/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java index cd81ab03f..f99309dac 100644 --- a/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java +++ b/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodGenWorker.java @@ -23,12 +23,13 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.api.lod.ClientApi; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; import com.seibel.lod.wrappers.worldGeneration.WorldGeneratorWrapper; @@ -43,7 +44,9 @@ import net.minecraftforge.common.WorldWorkerManager.IWorker; */ public class LodGenWorker implements IWorker // TODO is there a way to have this fabric/forge independent? { - public static ExecutorService genThreads = Executors.newFixedThreadPool(ForgeConfig.CLIENT.advancedModOptions.threading.numberOfWorldGenerationThreads.get(), new ThreadFactoryBuilder().setNameFormat("Gen-Worker-Thread-%d").build()); + private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); + + public static ExecutorService genThreads = Executors.newFixedThreadPool(config.client().advanced().threading().getNumberOfWorldGenerationThreads(), new ThreadFactoryBuilder().setNameFormat("Gen-Worker-Thread-%d").build()); private boolean threadStarted = false; private final LodChunkGenThread thread; @@ -79,7 +82,7 @@ public class LodGenWorker implements IWorker // TODO is there a way to have this { if (!threadStarted) { - if (ForgeConfig.CLIENT.worldGenerator.distanceGenerationMode.get() == DistanceGenerationMode.SERVER) + if (config.client().worldGenerator().getDistanceGenerationMode() == DistanceGenerationMode.SERVER) { // if we are using SERVER generation that has to be done // synchronously to prevent crashing and harmful @@ -217,7 +220,7 @@ public class LodGenWorker implements IWorker // TODO is there a way to have this { genThreads.shutdownNow(); } - genThreads = Executors.newFixedThreadPool(ForgeConfig.CLIENT.advancedModOptions.threading.numberOfWorldGenerationThreads.get(), new ThreadFactoryBuilder().setNameFormat("Gen-Worker-Thread-%d").build()); + genThreads = Executors.newFixedThreadPool(config.client().advanced().threading().getNumberOfWorldGenerationThreads(), new ThreadFactoryBuilder().setNameFormat("Gen-Worker-Thread-%d").build()); } } diff --git a/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodWorldGenerator.java b/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodWorldGenerator.java index 8c8e69aa2..a60c31d8b 100644 --- a/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodWorldGenerator.java +++ b/src/main/java/com/seibel/lod/core/builders/worldGeneration/LodWorldGenerator.java @@ -25,7 +25,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.objects.PosToGenerateContainer; @@ -35,6 +34,8 @@ import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; @@ -54,6 +55,8 @@ public class LodWorldGenerator /** This holds the thread used to generate new LODs off the main thread. */ private final ExecutorService mainGenThread = Executors.newSingleThreadExecutor(new LodThreadFactory(this.getClass().getSimpleName() + " world generator")); + private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); + /** we only want to queue up one generator thread at a time */ private boolean generatorThreadRunning = false; @@ -93,7 +96,7 @@ public class LodWorldGenerator */ public void queueGenerationRequests(LodDimension lodDim, LodRenderer renderer, LodBuilder lodBuilder) { - if (ForgeConfig.CLIENT.worldGenerator.distanceGenerationMode.get() != DistanceGenerationMode.NONE + if (config.client().worldGenerator().getDistanceGenerationMode() != DistanceGenerationMode.NONE && !generatorThreadRunning && mc.hasSinglePlayerServer()) { @@ -101,7 +104,7 @@ public class LodWorldGenerator generatorThreadRunning = true; // just in case the config changed - maxChunkGenRequests = ForgeConfig.CLIENT.advancedModOptions.threading.numberOfWorldGenerationThreads.get() * 8; + maxChunkGenRequests = config.client().advanced().threading().getNumberOfWorldGenerationThreads() * 8; Thread generatorThread = new Thread(() -> { diff --git a/src/main/java/com/seibel/lod/core/enums/config/BlockToAvoid.java b/src/main/java/com/seibel/lod/core/enums/config/BlocksToAvoid.java similarity index 91% rename from src/main/java/com/seibel/lod/core/enums/config/BlockToAvoid.java rename to src/main/java/com/seibel/lod/core/enums/config/BlocksToAvoid.java index 28c4348f8..bdfcaf363 100644 --- a/src/main/java/com/seibel/lod/core/enums/config/BlockToAvoid.java +++ b/src/main/java/com/seibel/lod/core/enums/config/BlocksToAvoid.java @@ -24,9 +24,9 @@ package com.seibel.lod.core.enums.config; * multi_lod
* * @author Leonardo Amato - * @version 19-10-2021 + * @version 11-16-2021 */ -public enum BlockToAvoid +public enum BlocksToAvoid { NONE(false, false), @@ -39,7 +39,7 @@ public enum BlockToAvoid public final boolean nonFull; public final boolean noCollision; - BlockToAvoid(boolean nonFull, boolean noCollision) + BlocksToAvoid(boolean nonFull, boolean noCollision) { this.nonFull = nonFull; this.noCollision = noCollision; diff --git a/src/main/java/com/seibel/lod/core/objects/Box.java b/src/main/java/com/seibel/lod/core/objects/Box.java index 76be1ecb5..1d5cc60c4 100644 --- a/src/main/java/com/seibel/lod/core/objects/Box.java +++ b/src/main/java/com/seibel/lod/core/objects/Box.java @@ -23,13 +23,14 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.enums.LodDirection; import com.seibel.lod.core.enums.rendering.DebugMode; import com.seibel.lod.core.objects.math.Vec3i; import com.seibel.lod.core.util.ColorUtil; import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.wrappers.block.BlockPosWrapper; import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; @@ -40,6 +41,7 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; */ public class Box { + private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); public static final int ADJACENT_HEIGHT_INDEX = 0; public static final int ADJACENT_DEPTH_INDEX = 1; @@ -70,6 +72,7 @@ public class Box LodDirection.NORTH }; /** All the faces and vertices of a cube. This is used to extract the vertex from the column */ + @SuppressWarnings("serial") public static final Map DIRECTION_VERTEX_MAP = new HashMap() {{ put(LodDirection.UP, new int[][] { @@ -132,6 +135,7 @@ public class Box * This indicates which position is invariable in the DIRECTION_VERTEX_MAP. * Is used to extract the vertex */ + @SuppressWarnings("serial") public static final Map FACE_DIRECTION = new HashMap() {{ put(LodDirection.UP, new int[] { Y, MAX }); @@ -147,6 +151,7 @@ public class Box * This is a map from Direction to the relative normal vector * we are using this since I'm not sure if the getNormal create new object at every call */ + @SuppressWarnings("serial") public static final Map DIRECTION_NORMAL_MAP = new HashMap() {{ put(LodDirection.UP, LodDirection.UP.getNormal()); @@ -158,6 +163,7 @@ public class Box }}; /** We use this index for all array that are going to */ + @SuppressWarnings("serial") public static final Map DIRECTION_INDEX = new HashMap() {{ put(LodDirection.UP, 0); @@ -168,6 +174,7 @@ public class Box put(LodDirection.NORTH, 5); }}; + @SuppressWarnings("serial") public static final Map ADJ_DIRECTION_INDEX = new HashMap() {{ put(LodDirection.EAST, 0); @@ -197,6 +204,7 @@ public class Box /** creates an empty box */ + @SuppressWarnings("serial") public Box() { boxOffset = new int[3]; @@ -260,7 +268,7 @@ public class Box */ public int getColor(LodDirection lodDirection) { - if (ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.get() != DebugMode.SHOW_DETAIL) + if (config.client().advanced().debugging().getDebugMode() != DebugMode.SHOW_DETAIL) return colorMap[DIRECTION_INDEX.get(lodDirection)]; else return ColorUtil.applyShade(color, MinecraftWrapper.INSTANCE.getShade(lodDirection)); 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 f5999fc8c..130158f89 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 @@ -24,7 +24,6 @@ import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.GenerationPriority; import com.seibel.lod.core.enums.config.VerticalQuality; @@ -36,6 +35,8 @@ import com.seibel.lod.core.util.DetailDistanceUtil; import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; @@ -57,6 +58,8 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; */ public class LodDimension { + private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); + public final IDimensionTypeWrapper dimension; /** measured in regions */ @@ -365,9 +368,9 @@ public class LodDimension /** Either expands or loads all regions in the rendered LOD area */ public void expandOrLoadRegionsAsync(int playerPosX, int playerPosZ) { - DistanceGenerationMode generationMode = ForgeConfig.CLIENT.worldGenerator.distanceGenerationMode.get(); + DistanceGenerationMode generationMode = config.client().worldGenerator().getDistanceGenerationMode(); ChunkPosWrapper newPlayerChunk = new ChunkPosWrapper(LevelPosUtil.getChunkPos((byte) 0, playerPosX), LevelPosUtil.getChunkPos((byte) 0, playerPosZ)); - VerticalQuality verticalQuality = ForgeConfig.CLIENT.graphics.qualityOption.verticalQuality.get(); + VerticalQuality verticalQuality = config.client().graphics().quality().getVerticalQuality(); if (lastExpandedChunk == null) @@ -544,7 +547,7 @@ public class LodDimension dz = -1; // We can use two type of generation scheduling - switch (ForgeConfig.CLIENT.worldGenerator.generationPriority.get()) + switch (config.client().worldGenerator().getGenerationPriority()) { default: case NEAR_FIRST: @@ -601,7 +604,7 @@ public class LodDimension //if(lodRegion.isChunkPreGenerated(xChunkToCheck,zChunkToCheck)) // complexity = DistanceGenerationMode.SERVER.complexity; //else - complexity = ForgeConfig.CLIENT.worldGenerator.distanceGenerationMode.get().complexity; + complexity = config.client().worldGenerator().getDistanceGenerationMode().complexity; //we create the level position info of the chunk @@ -676,7 +679,7 @@ public class LodDimension { LodRegion region = getRegion(regionPos.x, regionPos.z); if (region != null) - region.getPosToRender(posToRender, playerPosX, playerPosZ, ForgeConfig.CLIENT.worldGenerator.generationPriority.get() == GenerationPriority.NEAR_FIRST); + region.getPosToRender(posToRender, playerPosX, playerPosZ, config.client().worldGenerator().getGenerationPriority() == GenerationPriority.NEAR_FIRST); } /** 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 59f447233..a675cda3c 100644 --- a/src/main/java/com/seibel/lod/core/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/core/render/LodRenderer.java @@ -26,7 +26,6 @@ import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL30; import org.lwjgl.opengl.NVFogDistance; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.api.lod.ApiShared; import com.seibel.lod.core.builders.bufferBuilding.LodBufferBuilderFactory; import com.seibel.lod.core.builders.bufferBuilding.LodBufferBuilderFactory.VertexBuffersAndOffset; @@ -45,6 +44,8 @@ import com.seibel.lod.core.render.shader.LodShaderProgram; 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.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.wrappers.block.BlockPosWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; import com.seibel.lod.wrappers.minecraft.McObjectConverter; @@ -81,6 +82,7 @@ public class LodRenderer private final MinecraftWrapper mc; private final GameRenderer gameRender; + private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); private IProfiler profiler; private int farPlaneBlockDistance; @@ -231,7 +233,7 @@ public class LodRenderer // set the required open GL settings - if (ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.get() == DebugMode.SHOW_DETAIL_WIREFRAME) + if (config.client().advanced().debugging().getDebugMode() == DebugMode.SHOW_DETAIL_WIREFRAME) GL15.glPolygonMode(GL15.GL_FRONT_AND_BACK, GL15.GL_LINE); else GL15.glPolygonMode(GL15.GL_FRONT_AND_BACK, GL15.GL_FILL); @@ -251,9 +253,9 @@ public class LodRenderer vanillaBlockRenderedDistance = mc.getRenderDistance() * LodUtil.CHUNK_WIDTH; // required for setupFog and setupProjectionMatrix if (mc.getClientWorld().dimensionType().hasCeiling()) - farPlaneBlockDistance = Math.min(ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * LodUtil.CHUNK_WIDTH; + farPlaneBlockDistance = Math.min(config.client().graphics().quality().getLodChunkRenderDistance(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * LodUtil.CHUNK_WIDTH; else - farPlaneBlockDistance = ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get() * LodUtil.CHUNK_WIDTH; + farPlaneBlockDistance = config.client().graphics().quality().getLodChunkRenderDistance() * LodUtil.CHUNK_WIDTH; Mat4f projectionMatrix = createProjectionMatrix(mcProjectionMatrix, vanillaBlockRenderedDistance, partialTicks); @@ -290,8 +292,8 @@ public class LodRenderer Vector3f cameraDir = camera.getLookVector(); // TODO re-enable once rendering is totally working - boolean cullingDisabled = true; //LodConfig.CLIENT.graphics.advancedGraphicsOption.disableDirectionalCulling.get(); - boolean renderBufferStorage = ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadMethod.get() == GpuUploadMethod.BUFFER_STORAGE && glProxy.bufferStorageSupported; + boolean cullingDisabled = true; //LodConfig.client().graphics.advancedGraphicsOption.disableDirectionalCulling.get(); + boolean renderBufferStorage = config.client().graphics().advancedGraphics().getGpuUploadMethod() == GpuUploadMethod.BUFFER_STORAGE && glProxy.bufferStorageSupported; // used to determine what type of fog to render int halfWidth = vbos.length / 2; @@ -463,7 +465,7 @@ public class LodRenderer if (fogQuality == FogQuality.FANCY) { // for more realistic fog when using FAR - if (ForgeConfig.CLIENT.graphics.fogQuality.fogDistance.get() == FogDistance.NEAR_AND_FAR) + if (config.client().graphics().fogQuality().getFogDistance() == FogDistance.NEAR_AND_FAR) GL15.glFogf(GL15.GL_FOG_START, farPlaneBlockDistance * 1.6f * 0.9f); else GL15.glFogf(GL15.GL_FOG_START, Math.min(vanillaBlockRenderedDistance * 1.5f, farPlaneBlockDistance * 0.9f * 1.6f)); @@ -518,7 +520,7 @@ public class LodRenderer // disable fog if Minecraft wasn't rendering fog // or we want it disabled if (!fogSettings.vanillaIsRenderingFog - || ForgeConfig.CLIENT.graphics.fogQuality.disableVanillaFog.get()) + || config.client().graphics().fogQuality().getDisableVanillaFog()) { // Make fog render a infinite distance away. // This doesn't technically disable Minecraft's fog @@ -572,7 +574,7 @@ public class LodRenderer Mat4f lodProj = Mat4f.perspective( getFov(partialTicks, true), (float) this.mc.getWindow().getScreenWidth() / (float) this.mc.getWindow().getScreenHeight(), - ForgeConfig.CLIENT.graphics.advancedGraphicsOption.useExtendedNearClipPlane.get() ? vanillaBlockRenderedDistance / 5 : 1, + config.client().graphics().advancedGraphics().getUseExtendedNearClipPlane() ? vanillaBlockRenderedDistance / 5 : 1, farPlaneBlockDistance * LodUtil.CHUNK_WIDTH / 2); @@ -698,7 +700,7 @@ public class LodRenderer FogQuality quality = ReflectionHandler.INSTANCE.getFogQuality(); - FogDrawOverride override = ForgeConfig.CLIENT.graphics.fogQuality.fogDrawOverride.get(); + FogDrawOverride override = config.client().graphics().fogQuality().getFogDrawOverride(); fogSettings.vanillaIsRenderingFog = quality != FogQuality.OFF; @@ -739,7 +741,7 @@ public class LodRenderer fogSettings.near.quality = FogQuality.FANCY; fogSettings.far.quality = FogQuality.FANCY; - switch (ForgeConfig.CLIENT.graphics.fogQuality.fogDistance.get()) + switch (config.client().graphics().fogQuality().getFogDistance()) { case NEAR_AND_FAR: fogSettings.near.distance = FogDistance.NEAR; @@ -766,7 +768,7 @@ public class LodRenderer // fog, since the LODs are separated into a near // and far portion; and fast fog is rendered from the // frustrum's perspective instead of the camera - switch (ForgeConfig.CLIENT.graphics.fogQuality.fogDistance.get()) + switch (config.client().graphics().fogQuality().getFogDistance()) { case NEAR_AND_FAR: case NEAR: @@ -801,23 +803,23 @@ public class LodRenderer //=============// // check if the view distance changed - if (ApiShared.previousLodRenderDistance != ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get() + if (ApiShared.previousLodRenderDistance != config.client().graphics().quality().getLodChunkRenderDistance() || chunkRenderDistance != prevRenderDistance - || prevFogDistance != ForgeConfig.CLIENT.graphics.fogQuality.fogDistance.get()) + || prevFogDistance != config.client().graphics().fogQuality().getFogDistance()) { vanillaRenderedChunks = new boolean[vanillaRenderedChunksWidth][vanillaRenderedChunksWidth]; DetailDistanceUtil.updateSettings(); fullRegen = true; previousPos = LevelPosUtil.createLevelPos((byte) 4, mc.getPlayerChunkPos().getZ(), mc.getPlayerChunkPos().getZ()); - prevFogDistance = ForgeConfig.CLIENT.graphics.fogQuality.fogDistance.get(); + prevFogDistance = config.client().graphics().fogQuality().getFogDistance(); prevRenderDistance = chunkRenderDistance; } // did the user change the debug setting? - if (ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.get() != previousDebugMode) + if (config.client().advanced().debugging().getDebugMode() != previousDebugMode) { - previousDebugMode = ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.get(); + previousDebugMode = config.client().advanced().debugging().getDebugMode(); fullRegen = true; } @@ -825,7 +827,7 @@ public class LodRenderer long newTime = System.currentTimeMillis(); // check if the player has moved - if (newTime - prevPlayerPosTime > ForgeConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get().playerMoveTimeout) + if (newTime - prevPlayerPosTime > config.client().advanced().buffers().getRebuildTimes().playerMoveTimeout) { if (LevelPosUtil.getDetailLevel(previousPos) == 0 || mc.getPlayerChunkPos().getX() != LevelPosUtil.getPosX(previousPos) @@ -846,7 +848,7 @@ public class LodRenderer // the max brightness is 1 and the minimum is 0.2 float skyBrightness = lodDim.dimension.hasSkyLight() ? mc.getSkyDarken(partialTicks) : 0.2f; float minLightingDifference; - switch (ForgeConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get()) + switch (config.client().advanced().buffers().getRebuildTimes()) { case FREQUENT: minLightingDifference = 0.025f; @@ -885,7 +887,7 @@ public class LodRenderer // check if the vanilla rendered chunks changed - if (newTime - prevVanillaChunkTime > ForgeConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get().renderedChunkTimeout) + if (newTime - prevVanillaChunkTime > config.client().advanced().buffers().getRebuildTimes().renderedChunkTimeout) { if (vanillaRenderedChunksChanged) { @@ -897,7 +899,7 @@ public class LodRenderer // check if there is any newly generated terrain to show - if (newTime - prevChunkTime > ForgeConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get().chunkChangeTimeout) + if (newTime - prevChunkTime > config.client().advanced().buffers().getRebuildTimes().chunkChangeTimeout) { if (lodDim.regenDimensionBuffers) { 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 efc550502..ec6af7219 100644 --- a/src/main/java/com/seibel/lod/core/util/DetailDistanceUtil.java +++ b/src/main/java/com/seibel/lod/core/util/DetailDistanceUtil.java @@ -19,10 +19,11 @@ package com.seibel.lod.core.util; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.HorizontalQuality; import com.seibel.lod.core.enums.config.HorizontalResolution; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; /** @@ -32,15 +33,17 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper; */ public class DetailDistanceUtil { + private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); + private static final double genMultiplier = 1.0; private static final double treeGenMultiplier = 1.0; private static final double treeCutMultiplier = 1.0; - private static byte minGenDetail = ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get().detailLevel; - private static byte minDrawDetail = (byte) Math.max(ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get().detailLevel, ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get().detailLevel); + private static byte minGenDetail = config.client().graphics().quality().getDrawResolution().detailLevel; + private static byte minDrawDetail = (byte) Math.max(config.client().graphics().quality().getDrawResolution().detailLevel, config.client().graphics().quality().getDrawResolution().detailLevel); private static final int maxDetail = LodUtil.REGION_DETAIL_LEVEL + 1; private static final int minDistance = 0; private static int minDetailDistance = (int) (MinecraftWrapper.INSTANCE.getRenderDistance()*16 * 1.42f); - private static int maxDistance = ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get() * 16 * 2; + private static int maxDistance = config.client().graphics().quality().getLodChunkRenderDistance() * 16 * 2; private static final HorizontalResolution[] lodGenDetails = { @@ -61,9 +64,9 @@ public class DetailDistanceUtil public static void updateSettings() { minDetailDistance = (int) (MinecraftWrapper.INSTANCE.getRenderDistance()*16 * 1.42f); - minGenDetail = ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get().detailLevel; - minDrawDetail = (byte) Math.max(ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get().detailLevel, ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get().detailLevel); - maxDistance = ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get() * 16 * 8; + minGenDetail = config.client().graphics().quality().getDrawResolution().detailLevel; + minDrawDetail = (byte) Math.max(config.client().graphics().quality().getDrawResolution().detailLevel, config.client().graphics().quality().getDrawResolution().detailLevel); + maxDistance = config.client().graphics().quality().getLodChunkRenderDistance() * 16 * 8; } public static int baseDistanceFunction(int detail) @@ -73,15 +76,15 @@ public class DetailDistanceUtil if (detail >= maxDetail) return maxDistance; - if (ForgeConfig.CLIENT.graphics.advancedGraphicsOption.alwaysDrawAtMaxQuality.get()) + if (config.client().graphics().advancedGraphics().getAlwaysDrawAtMaxQuality()) return detail * 0x10000; //if you want more you are doing wrong - int distanceUnit = ForgeConfig.CLIENT.graphics.qualityOption.horizontalScale.get().distanceUnit; - if (ForgeConfig.CLIENT.graphics.qualityOption.horizontalQuality.get() == HorizontalQuality.LOWEST) + int distanceUnit = config.client().graphics().quality().getHorizontalScale().distanceUnit; + if (config.client().graphics().quality().getHorizontalQuality() == HorizontalQuality.LOWEST) return (detail * distanceUnit); else { - double base = ForgeConfig.CLIENT.graphics.qualityOption.horizontalQuality.get().quadraticBase; + double base = config.client().graphics().quality().getHorizontalQuality().quadraticBase; return (int) (Math.pow(base, detail) * distanceUnit); } } @@ -96,14 +99,14 @@ public class DetailDistanceUtil int detail; if (distance == 0 || (distance < minDetailDistance && useRenderMinDistance) - || ForgeConfig.CLIENT.graphics.advancedGraphicsOption.alwaysDrawAtMaxQuality.get()) + || config.client().graphics().advancedGraphics().getAlwaysDrawAtMaxQuality()) return minDetail; - int distanceUnit = ForgeConfig.CLIENT.graphics.qualityOption.horizontalScale.get().distanceUnit; - if (ForgeConfig.CLIENT.graphics.qualityOption.horizontalQuality.get() == HorizontalQuality.LOWEST) + int distanceUnit = config.client().graphics().quality().getHorizontalScale().distanceUnit; + if (config.client().graphics().quality().getHorizontalQuality() == HorizontalQuality.LOWEST) detail = (byte) distance / distanceUnit; else { - double base = ForgeConfig.CLIENT.graphics.qualityOption.horizontalQuality.get().quadraticBase; + double base = config.client().graphics().quality().getHorizontalQuality().quadraticBase; double logBase = Math.log(base); //noinspection IntegerDivisionInFloatingPointContext detail = (byte) (Math.log(distance / distanceUnit) / logBase); @@ -133,13 +136,13 @@ public class DetailDistanceUtil public static DistanceGenerationMode getDistanceGenerationMode(int detail) { - return ForgeConfig.CLIENT.worldGenerator.distanceGenerationMode.get(); + return config.client().worldGenerator().getDistanceGenerationMode(); } public static byte getLodDrawDetail(int detail) { if (detail < minDrawDetail) - return (byte) minDrawDetail; + return minDrawDetail; else return (byte) detail; } @@ -165,7 +168,7 @@ public class DetailDistanceUtil public static int getMaxVerticalData(int detail) { - return ForgeConfig.CLIENT.graphics.qualityOption.verticalQuality.get().maxVerticalData[LodUtil.clamp(minGenDetail, detail, LodUtil.REGION_DETAIL_LEVEL)]; + return config.client().graphics().quality().getVerticalQuality().maxVerticalData[LodUtil.clamp(minGenDetail, detail, LodUtil.REGION_DETAIL_LEVEL)]; } } 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 77b19736d..2b7e0b6d5 100644 --- a/src/main/java/com/seibel/lod/core/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/core/util/LodUtil.java @@ -23,7 +23,6 @@ import java.awt.Color; import java.io.File; import java.util.HashSet; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.enums.LodDirection; import com.seibel.lod.core.enums.config.HorizontalResolution; import com.seibel.lod.core.enums.config.VanillaOverdraw; @@ -32,6 +31,8 @@ import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.objects.lod.RegionPos; import com.seibel.lod.core.objects.opengl.DefaultLodVertexFormats; import com.seibel.lod.core.objects.opengl.LodVertexFormat; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IDimensionTypeWrapper; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; import com.seibel.lod.wrappers.block.BlockPosWrapper; @@ -58,6 +59,7 @@ import net.minecraft.world.server.ServerWorld; public class LodUtil { private static final MinecraftWrapper mc = MinecraftWrapper.INSTANCE; + private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); /** * Vanilla render distances less than or equal to this will not allow partial @@ -352,8 +354,8 @@ public class LodUtil ChunkPosWrapper centerChunk = new ChunkPosWrapper(blockPosWrapper); int skipRadius; - VanillaOverdraw overdraw = ForgeConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.get(); - HorizontalResolution drawRes = ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get(); + VanillaOverdraw overdraw = config.client().graphics().advancedGraphics().getVanillaOverdraw(); + HorizontalResolution drawRes = config.client().graphics().quality().getDrawResolution(); // apply distance based rules for dynamic overdraw if (overdraw == VanillaOverdraw.DYNAMIC diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/SingletonHandler.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/SingletonHandler.java index 1a76f7cf6..8d9ca9832 100644 --- a/src/main/java/com/seibel/lod/core/wrapperAdapters/SingletonHandler.java +++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/SingletonHandler.java @@ -12,7 +12,9 @@ import java.util.Map; */ public class SingletonHandler { -private static final Map, Object> singletons = new HashMap, Object>(); + private static final Map, Object> singletons = new HashMap, Object>(); + + diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/config/ILodConfigWrapperSingleton.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/config/ILodConfigWrapperSingleton.java index df24ee508..6adb2cdb7 100644 --- a/src/main/java/com/seibel/lod/core/wrapperAdapters/config/ILodConfigWrapperSingleton.java +++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/config/ILodConfigWrapperSingleton.java @@ -1,6 +1,6 @@ package com.seibel.lod.core.wrapperAdapters.config; -import com.seibel.lod.core.enums.config.BlockToAvoid; +import com.seibel.lod.core.enums.config.BlocksToAvoid; import com.seibel.lod.core.enums.config.BufferRebuildTimes; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.GenerationPriority; @@ -295,17 +295,17 @@ public interface ILodConfigWrapperSingleton public boolean getAllowUnstableFeatureGeneration(); public void setAllowUnstableFeatureGeneration(boolean newAllowUnstableFeatureGeneration); - BlockToAvoid BLOCK_TO_AVOID_DEFAULT = BlockToAvoid.BOTH; - String BLOCK_TO_AVOID_DESC = "" - + " " + BlockToAvoid.NONE + ": Use all blocks when generating fake chunks \n\n" + BlocksToAvoid BLOCKS_TO_AVOID_DEFAULT = BlocksToAvoid.BOTH; + String BLOCKS_TO_AVOID_DESC = "" + + " " + BlocksToAvoid.NONE + ": Use all blocks when generating fake chunks \n\n" + "" - + " " + BlockToAvoid.NON_FULL + ": Only use full blocks when generating fake chunks (ignores slabs, lanterns, torches, grass, etc.) \n\n" + + " " + BlocksToAvoid.NON_FULL + ": Only use full blocks when generating fake chunks (ignores slabs, lanterns, torches, grass, etc.) \n\n" + "" - + " " + BlockToAvoid.NO_COLLISION + ": Only use solid blocks when generating fake chunks (ignores grass, torches, etc.) \n" + + " " + BlocksToAvoid.NO_COLLISION + ": Only use solid blocks when generating fake chunks (ignores grass, torches, etc.) \n" + "" - + " " + BlockToAvoid.BOTH + ": Only use full solid blocks when generating fake chunks \n"; - public BlockToAvoid getBlockToAvoid(); - public void setBlockToAvoid(BlockToAvoid newBlockToAvoid); + + " " + BlocksToAvoid.BOTH + ": Only use full solid blocks when generating fake chunks \n"; + public BlocksToAvoid getBlocksToAvoid(); + public void setBlockToAvoid(BlocksToAvoid newBlockToAvoid); } @@ -379,12 +379,12 @@ public interface ILodConfigWrapperSingleton public DebugMode getDebugMode(); public void setDebugMode(DebugMode newDebugMode); - boolean ENABLE_DEBUG_KEYBINDINGS_DEFAULT = true; - String ENABLE_DEBUG_KEYBINDINGS_DESC = "" + boolean DEBUG_KEYBINDINGS_ENABLED_DEFAULT = true; + String DEBUG_KEYBINDINGS_ENABLED_DESC = "" + " If true the F4 key can be used to cycle through the different debug modes. \n" + " and the F6 key can be used to enable and disable LOD rendering."; - public boolean getEnableDebugKeybindings(); - public void setEnableDebugKeybindings(boolean newEnableDebugKeybindings); + public boolean getDebugKeybindingsEnabled(); + public void setDebugKeybindingsEnabled(boolean newEnableDebugKeybindings); } public interface IBuffers diff --git a/src/main/java/com/seibel/lod/wrappers/DependencySetup.java b/src/main/java/com/seibel/lod/wrappers/DependencySetup.java index aafa2c82b..c7706bd69 100644 --- a/src/main/java/com/seibel/lod/wrappers/DependencySetup.java +++ b/src/main/java/com/seibel/lod/wrappers/DependencySetup.java @@ -5,15 +5,17 @@ import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.wrappers.config.LodConfigWrapperSingleton; /** - * Binds all necessary singletons so we - * can access them in Core. + * Binds all necessary dependencies so we + * can access them in Core.
+ * This needs to be called before any Core classes + * are loaded. * * @author James Seibel - * @version 11-15-2021 + * @version 11-16-2021 */ public class DependencySetup { - static + public static void createInitialBindings() { SingletonHandler.bind(ILodConfigWrapperSingleton.class, LodConfigWrapperSingleton.INSTANCE); } diff --git a/src/main/java/com/seibel/lod/wrappers/config/LodConfigWrapperSingleton.java b/src/main/java/com/seibel/lod/wrappers/config/LodConfigWrapperSingleton.java index 78d8227b7..699dacc88 100644 --- a/src/main/java/com/seibel/lod/wrappers/config/LodConfigWrapperSingleton.java +++ b/src/main/java/com/seibel/lod/wrappers/config/LodConfigWrapperSingleton.java @@ -1,7 +1,7 @@ package com.seibel.lod.wrappers.config; import com.seibel.lod.api.forge.ForgeConfig; -import com.seibel.lod.core.enums.config.BlockToAvoid; +import com.seibel.lod.core.enums.config.BlocksToAvoid; import com.seibel.lod.core.enums.config.BufferRebuildTimes; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.GenerationPriority; @@ -334,14 +334,14 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton @Override - public BlockToAvoid getBlockToAvoid() + public BlocksToAvoid getBlocksToAvoid() { - return ForgeConfig.CLIENT.worldGenerator.blockToAvoid.get(); + return ForgeConfig.CLIENT.worldGenerator.blocksToAvoid.get(); } @Override - public void setBlockToAvoid(BlockToAvoid newBlockToAvoid) + public void setBlockToAvoid(BlocksToAvoid newBlockToAvoid) { - ForgeConfig.CLIENT.worldGenerator.blockToAvoid.set(newBlockToAvoid); + ForgeConfig.CLIENT.worldGenerator.blocksToAvoid.set(newBlockToAvoid); } } @@ -445,12 +445,12 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton @Override - public boolean getEnableDebugKeybindings() + public boolean getDebugKeybindingsEnabled() { return ForgeConfig.CLIENT.advancedModOptions.debugging.enableDebugKeybindings.get(); } @Override - public void setEnableDebugKeybindings(boolean newEnableDebugKeybindings) + public void setDebugKeybindingsEnabled(boolean newEnableDebugKeybindings) { ForgeConfig.CLIENT.advancedModOptions.debugging.enableDebugKeybindings.set(newEnableDebugKeybindings); } diff --git a/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java b/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java index f15026d44..e571332b7 100644 --- a/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java +++ b/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java @@ -7,12 +7,13 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Supplier; -import com.seibel.lod.api.forge.ForgeConfig; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.builders.lodBuilding.LodBuilderConfig; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.wrapperAdapters.SingletonHandler; +import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper; import com.seibel.lod.wrappers.chunk.ChunkPosWrapper; import com.seibel.lod.wrappers.chunk.ChunkWrapper; @@ -49,7 +50,7 @@ public class WorldGeneratorWrapper * features that could cause issues down the line. */ private static final ConcurrentHashMap> configuredFeaturesToAvoid = new ConcurrentHashMap<>(); - + private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class); public final ServerWorld serverWorld; @@ -265,7 +266,7 @@ public class WorldGeneratorWrapper } } - boolean allowUnstableFeatures = ForgeConfig.CLIENT.worldGenerator.allowUnstableFeatureGeneration.get(); + boolean allowUnstableFeatures = config.client().worldGenerator().getAllowUnstableFeatureGeneration(); // generate all the features related to this chunk. // this may or may not be thread safe