From f5d48ebcd35c5803a502d4674c3053d6f8443a7b Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 24 Apr 2022 19:18:41 -0500 Subject: [PATCH] Prep for the external DH API All files previously in the "api" package have been moved to "api.internal" --- .../core/api/external/ExternalApiShared.java | 19 +++++++ .../core/api/{ => internal}/ClientApi.java | 54 ++++++++++-------- .../lod/core/api/{ => internal}/EventApi.java | 57 ++++++++++--------- .../InternalApiShared.java} | 21 ++++--- .../handlers/LodDimensionFileHandler.java | 2 +- .../lod/core/logging/ConfigBasedLogger.java | 2 +- .../core/logging/ConfigBasedSpamLogger.java | 3 +- .../lod/core/objects/opengl/RenderRegion.java | 2 +- .../seibel/lod/core/render/LodRenderer.java | 4 +- 9 files changed, 100 insertions(+), 64 deletions(-) create mode 100644 src/main/java/com/seibel/lod/core/api/external/ExternalApiShared.java rename src/main/java/com/seibel/lod/core/api/{ => internal}/ClientApi.java (90%) rename src/main/java/com/seibel/lod/core/api/{ => internal}/EventApi.java (81%) rename src/main/java/com/seibel/lod/core/api/{ApiShared.java => internal/InternalApiShared.java} (80%) diff --git a/src/main/java/com/seibel/lod/core/api/external/ExternalApiShared.java b/src/main/java/com/seibel/lod/core/api/external/ExternalApiShared.java new file mode 100644 index 000000000..277f09140 --- /dev/null +++ b/src/main/java/com/seibel/lod/core/api/external/ExternalApiShared.java @@ -0,0 +1,19 @@ +package com.seibel.lod.core.api.external; + +/** + * This stores objects and variables that + * are shared between the different Core external api classes.

+ * + * The external api package is designed to hold any code that + * interfaces between Distant Horizons and other mods or projects. + * For example: if a weather mod wanted to disable LOD rendering during a blizzard + * they would do that through a method in the external api. + * + * + * @author James Seibel + * @version 2022-4-24 + */ +public class ExternalApiShared +{ + +} diff --git a/src/main/java/com/seibel/lod/core/api/ClientApi.java b/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java similarity index 90% rename from src/main/java/com/seibel/lod/core/api/ClientApi.java rename to src/main/java/com/seibel/lod/core/api/internal/ClientApi.java index 13b896fa1..66470e255 100644 --- a/src/main/java/com/seibel/lod/core/api/ClientApi.java +++ b/src/main/java/com/seibel/lod/core/api/internal/ClientApi.java @@ -17,8 +17,9 @@ * along with this program. If not, see . */ -package com.seibel.lod.core.api; +package com.seibel.lod.core.api.internal; +import java.lang.invoke.MethodHandles; import java.time.Duration; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -28,9 +29,10 @@ import com.seibel.lod.core.enums.rendering.RendererType; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.logging.ConfigBasedSpamLogger; import com.seibel.lod.core.render.RenderSystemTest; -import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; import org.apache.logging.log4j.Level; import com.seibel.lod.core.handlers.LodDimensionFinder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.lwjgl.glfw.GLFW; import com.seibel.lod.core.ModInfo; @@ -60,7 +62,8 @@ import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; * @version 2022-3-26 */ public class ClientApi -{ +{ + public static final Logger LOGGER = LogManager.getLogger(ClientApi.class.getSimpleName()); public static boolean prefLoggerEnabled = false; public static final ClientApi INSTANCE = new ClientApi(); @@ -90,7 +93,7 @@ public class ClientApi if (!ENABLE_LAG_SPIKE_LOGGING) return; timer = System.nanoTime() - timer; if (timer > LAG_SPIKE_THRESOLD_NS) { - ApiShared.LOGGER.info("LagSpikeCatcher: "+source+" took "+Duration.ofNanos(timer)+"!"); + LOGGER.info("LagSpikeCatcher: "+source+" took "+Duration.ofNanos(timer)+"!"); } } } @@ -167,8 +170,8 @@ public class ClientApi ConfigBasedLogger.updateAll(); ConfigBasedSpamLogger.updateAll(doFlush); - if (ApiShared.previousVertQual != CONFIG.client().graphics().quality().getVerticalQuality()) { - ApiShared.previousVertQual = CONFIG.client().graphics().quality().getVerticalQuality(); + if (InternalApiShared.previousVertQual != CONFIG.client().graphics().quality().getVerticalQuality()) { + InternalApiShared.previousVertQual = CONFIG.client().graphics().quality().getVerticalQuality(); EventApi.INSTANCE.worldUnloadEvent(MC.getWrappedServerWorld()); EventApi.INSTANCE.worldLoadEvent(MC.getWrappedClientWorld()); return; @@ -178,13 +181,13 @@ public class ClientApi if (!firstTimeSetupComplete) firstFrameSetup(); - if (!MC.playerExists() || ApiShared.lodWorld.getIsWorldNotLoaded()) + if (!MC.playerExists() || InternalApiShared.lodWorld.getIsWorldNotLoaded()) return; IWorldWrapper world = MC.getWrappedClientWorld(); if (world == null) return; - LodDimension lodDim = ApiShared.lodWorld.getLodDimension(world.getDimensionType()); + LodDimension lodDim = InternalApiShared.lodWorld.getLodDimension(world.getDimensionType()); // Make sure the player's data is up-to-date DIMENSION_FINDER.updatePlayerData(); @@ -195,7 +198,7 @@ public class ClientApi if (DIMENSION_FINDER.isDone()) { lodDim = DIMENSION_FINDER.getAndClearFoundLodDimension(); - ApiShared.lodWorld.addLodDimension(lodDim); + InternalApiShared.lodWorld.addLodDimension(lodDim); } else { @@ -226,7 +229,7 @@ public class ClientApi toBeLoaded.remove(pos); generating.add(pos); //ApiShared.LOGGER.info("Lod Generation trying "+pos+". Remining: " +toBeLoaded.size()); - ApiShared.lodBuilder.generateLodNodeAsync(chunk, ApiShared.lodWorld, + InternalApiShared.lodBuilder.generateLodNodeAsync(chunk, InternalApiShared.lodWorld, world.getDimensionType(), DistanceGenerationMode.FULL, true, true, () -> { generating.remove(pos); LodBuilder.EVENT_LOGGER.debug("Manual Chunk: {} done. Remaining queue: {}", FACTORY.createChunkPos(pos), toBeLoaded.size()); @@ -272,7 +275,7 @@ public class ClientApi ClientApi.renderer.drawLODs(lodDim, mcModelViewMatrix, mcProjectionMatrix, partialTicks, MC.getProfiler()); } catch (RuntimeException e) { rendererDisabledBecauseOfExceptions = true; - ApiShared.LOGGER.error("Renderer thrown an uncaught exception: ",e); + LOGGER.error("Renderer thrown an uncaught exception: ",e); try { MC.sendChatMessage("\u00A74\u00A7l\u00A7uERROR: Distant Horizons" + " renderer has encountered an exception!"); @@ -294,12 +297,12 @@ 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 - ApiShared.previousChunkRenderDistance = MC_RENDER.getRenderDistance(); - ApiShared.previousLodRenderDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance(); + InternalApiShared.previousChunkRenderDistance = MC_RENDER.getRenderDistance(); + InternalApiShared.previousLodRenderDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance(); } catch (Exception e) { - ApiShared.LOGGER.error("client proxy uncaught exception: ", e); + LOGGER.error("client proxy uncaught exception: ", e); } } @@ -335,24 +338,29 @@ public class ClientApi //=================// // DUBUG USE // //=================// + // Trigger once on key press, with CLIENT PLAYER. - public void keyPressedEvent(int glfwKey) { - - if (!CONFIG.client().advanced().debugging().getDebugKeybindingsEnabled()) return; - - if (glfwKey == GLFW.GLFW_KEY_F8) { - CONFIG.client().advanced().debugging() + public void keyPressedEvent(int glfwKey) + { + if (!CONFIG.client().advanced().debugging().getDebugKeybindingsEnabled()) + 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()); } - if (glfwKey == GLFW.GLFW_KEY_F6) { + if (glfwKey == GLFW.GLFW_KEY_F6) + { CONFIG.client().advanced().debugging() .setRendererType(RendererType.next(CONFIG.client().advanced().debugging().getRendererType())); MC.sendChatMessage("F6: Set rendering to " + CONFIG.client().advanced().debugging().getRendererType()); } - - if (glfwKey == GLFW.GLFW_KEY_P) { + + if (glfwKey == GLFW.GLFW_KEY_P) + { prefLoggerEnabled = !prefLoggerEnabled; MC.sendChatMessage("P: Debug Pref Logger is " + (prefLoggerEnabled ? "enabled" : "disabled")); } diff --git a/src/main/java/com/seibel/lod/core/api/EventApi.java b/src/main/java/com/seibel/lod/core/api/internal/EventApi.java similarity index 81% rename from src/main/java/com/seibel/lod/core/api/EventApi.java rename to src/main/java/com/seibel/lod/core/api/internal/EventApi.java index ceeb38964..997c429c8 100644 --- a/src/main/java/com/seibel/lod/core/api/EventApi.java +++ b/src/main/java/com/seibel/lod/core/api/internal/EventApi.java @@ -17,13 +17,13 @@ * along with this program. If not, see . */ -package com.seibel.lod.core.api; +package com.seibel.lod.core.api.internal; -import com.seibel.lod.core.api.ClientApi.LagSpikeCatcher; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.builders.worldGeneration.BatchGenerator; import com.seibel.lod.core.enums.WorldType; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.objects.lod.RegionPos; import com.seibel.lod.core.render.GLProxy; @@ -36,18 +36,23 @@ 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; +import org.apache.logging.log4j.Logger; + +import java.lang.invoke.MethodHandles; /** * This holds the methods that should be called by the host mod loader (Fabric, * Forge, etc.). Specifically server and client events. + * * @author James Seibel - * @version 11-12-2021 + * @version 2021-11-12 */ public class EventApi { public static final boolean ENABLE_STACK_DUMP_LOGGING = false; public static final EventApi INSTANCE = new 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); @@ -75,13 +80,13 @@ public class EventApi public void serverTickEvent() { lastWorldGenTickDelta--; - if (!MC.playerExists() || ApiShared.lodWorld.getIsWorldNotLoaded()) + if (!MC.playerExists() || InternalApiShared.lodWorld.getIsWorldNotLoaded()) return; - LodDimension lodDim = ApiShared.lodWorld.getLodDimension(MC.getCurrentDimension()); + LodDimension lodDim = InternalApiShared.lodWorld.getLodDimension(MC.getCurrentDimension()); if (lodDim == null) return; - if (ApiShared.isShuttingDown) + if (InternalApiShared.isShuttingDown) return; if (CONFIG.client().worldGenerator().getEnableDistantGeneration()) @@ -90,8 +95,8 @@ public class EventApi lastWorldGenTickDelta = 20; // 20 ticks is 1 second. We don't need to refresh world gen status every tick. try { if (batchGenerator == null) - batchGenerator = new BatchGenerator(ApiShared.lodBuilder, lodDim); - batchGenerator.queueGenerationRequests(lodDim, ApiShared.lodBuilder); + batchGenerator = new BatchGenerator(InternalApiShared.lodBuilder, lodDim); + batchGenerator.queueGenerationRequests(lodDim, InternalApiShared.lodBuilder); } catch (Exception e) { // Exception may happen if world got unloaded unorderly e.printStackTrace(); @@ -114,14 +119,14 @@ public class EventApi public void worldSaveEvent() { - ApiShared.lodWorld.saveAllDimensions(false); // Do an async save. + InternalApiShared.lodWorld.saveAllDimensions(false); // Do an async save. } /** This is also called when a new dimension loads */ public void worldLoadEvent(IWorldWrapper world) { if (ENABLE_STACK_DUMP_LOGGING) - ApiShared.LOGGER.info( + LOGGER.info( "WorldLoadEvent called here for " + (world.getWorldType() == WorldType.ClientWorld ? "clientLevel" : "serverLevel"), new RuntimeException()); @@ -129,9 +134,9 @@ public class EventApi if (world.getWorldType() == WorldType.ServerWorld) return; isCurrentlyOnSinglePlayerServer = MC.hasSinglePlayerServer(); - if (!ApiShared.isShuttingDown) ApiShared.LOGGER.warn("WorldLoadEvent called on {} while another world is loaded!", + if (!InternalApiShared.isShuttingDown) LOGGER.warn("WorldLoadEvent called on {} while another world is loaded!", (world.getWorldType() == WorldType.ClientWorld ? "clientLevel" : "serverLevel")); - ApiShared.isShuttingDown = false; + InternalApiShared.isShuttingDown = false; //DataPointUtil.WORLD_HEIGHT = world.getHeight(); LodBuilder.MIN_WORLD_HEIGHT = world.getMinHeight(); // This updates the World height @@ -140,21 +145,21 @@ public class EventApi // the player just loaded a new world/dimension String worldID = LodUtil.getWorldID(world); - ApiShared.LOGGER.info("Loading new world/dimension: {}",worldID); - ApiShared.lodWorld.selectWorld(worldID); - ApiShared.LOGGER.info("World/dimension loaded: {}",worldID); + LOGGER.info("Loading new world/dimension: {}",worldID); + InternalApiShared.lodWorld.selectWorld(worldID); + LOGGER.info("World/dimension loaded: {}",worldID); // make sure the correct LODs are being rendered // (if this isn't done the previous world's LODs may be drawn) ClientApi.renderer.regenerateLODsNextFrame(); - ApiShared.previousVertQual = CONFIG.client().graphics().quality().getVerticalQuality(); + InternalApiShared.previousVertQual = CONFIG.client().graphics().quality().getVerticalQuality(); } /** This is also called when the user disconnects from a server+ */ public void worldUnloadEvent(IWorldWrapper world) { if (ENABLE_STACK_DUMP_LOGGING) - ApiShared.LOGGER.info( + LOGGER.info( "WorldUnloadEvent called here for " + (world.getWorldType() == WorldType.ClientWorld ? "clientLevel" : "serverLevel"), new RuntimeException()); @@ -167,15 +172,15 @@ public class EventApi // if this isn't done unfinished tasks may be left in the queue // preventing new LodChunks form being generated - if (ApiShared.isShuttingDown) return; // Don't do this if we're already shutting down - ApiShared.isShuttingDown = true; + if (InternalApiShared.isShuttingDown) return; // Don't do this if we're already shutting down + InternalApiShared.isShuttingDown = true; // TODO Better report on when world gen is stuck and timeout if (batchGenerator != null) batchGenerator.stop(true); batchGenerator = null; - ApiShared.lodWorld.deselectWorld(); // This force a save and shutdown lodDim properly + InternalApiShared.lodWorld.deselectWorld(); // This force a save and shutdown lodDim properly // prevent issues related to the buffer builder // breaking or retaining previous data when changing worlds. @@ -183,12 +188,12 @@ public class EventApi ClientApi.renderer.requestCleanup(); GLProxy.ensureAllGLJobCompleted(); recalculateWidths = true; - ApiShared.previousVertQual = null; + InternalApiShared.previousVertQual = null; // TODO: Check if after the refactoring, is this still needed ClientApi.renderer = new LodRenderer(ClientApi.lodBufferBuilderFactory); ClientApi.INSTANCE.rendererDisabledBecauseOfExceptions = false; - ApiShared.LOGGER.info("Distant Horizon unloaded"); + LOGGER.info("Distant Horizon unloaded"); } public void blockChangeEvent(IChunkWrapper chunk, IDimensionTypeWrapper dimType) @@ -196,7 +201,7 @@ public class EventApi if (dimType != MC.getCurrentDimension()) return; // recreate the LOD where the blocks were changed - LagSpikeCatcher blockChangeUpdate = new LagSpikeCatcher(); + ClientApi.LagSpikeCatcher blockChangeUpdate = new ClientApi.LagSpikeCatcher(); ClientApi.INSTANCE.toBeLoaded.add(chunk.getLongChunkPos()); blockChangeUpdate.end("clientChunkLoad"); } @@ -238,11 +243,11 @@ public class EventApi newWidth += (newWidth & 1) == 0 ? 1 : 0; // do the dimensions need to change in size? - if (ApiShared.lodBuilder.defaultDimensionWidthInRegions != newWidth || recalculateWidths) + if (InternalApiShared.lodBuilder.defaultDimensionWidthInRegions != newWidth || recalculateWidths) { // update the dimensions to fit the new width - ApiShared.lodWorld.resizeDimensionRegionWidth(newWidth); - ApiShared.lodBuilder.defaultDimensionWidthInRegions = newWidth; + InternalApiShared.lodWorld.resizeDimensionRegionWidth(newWidth); + InternalApiShared.lodBuilder.defaultDimensionWidthInRegions = newWidth; ClientApi.renderer.setupBuffers(); recalculateWidths = false; diff --git a/src/main/java/com/seibel/lod/core/api/ApiShared.java b/src/main/java/com/seibel/lod/core/api/internal/InternalApiShared.java similarity index 80% rename from src/main/java/com/seibel/lod/core/api/ApiShared.java rename to src/main/java/com/seibel/lod/core/api/internal/InternalApiShared.java index 535e97ca1..8e49de5a4 100644 --- a/src/main/java/com/seibel/lod/core/api/ApiShared.java +++ b/src/main/java/com/seibel/lod/core/api/internal/InternalApiShared.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package com.seibel.lod.core.api; +package com.seibel.lod.core.api.internal; import com.seibel.lod.core.ModInfo; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; @@ -28,15 +28,18 @@ import org.apache.logging.log4j.Logger; /** * This stores objects and variables that - * are shared between the different Core api classes. - * + * are shared between the different Core internal api classes.

+ * + * The internal api package is designed to hold any code that + * interfaces between Distant Horizons and the host mod loader + * (IE Fabric or Forge). + * * @author James Seibel - * @version 11-12-2021 + * @version 2022-4-24 */ -public class ApiShared +public class InternalApiShared { - public static final Logger LOGGER = LogManager.getLogger(ModInfo.NAME); - public ApiShared INSTANCE = new ApiShared(); + public InternalApiShared INSTANCE = new InternalApiShared(); public static final LodWorld lodWorld = new LodWorld(); public static final LodBuilder lodBuilder = new LodBuilder(); @@ -50,7 +53,9 @@ public class ApiShared /** Signal whether a world is shutting down */ public static volatile boolean isShuttingDown = false; - private ApiShared() + + + private InternalApiShared() { } 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 031a2cb78..b729ae487 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java @@ -36,7 +36,7 @@ import java.util.concurrent.locks.ReentrantLock; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; -import com.seibel.lod.core.api.ClientApi; +import com.seibel.lod.core.api.internal.ClientApi; import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream; diff --git a/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java b/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java index 90b431b1b..d45b71e1e 100644 --- a/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java +++ b/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java @@ -19,7 +19,7 @@ package com.seibel.lod.core.logging; -import com.seibel.lod.core.api.ClientApi; +import com.seibel.lod.core.api.internal.ClientApi; import com.seibel.lod.core.enums.config.LoggerMode; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java b/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java index 70ea8d36a..b3d09e368 100644 --- a/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java +++ b/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java @@ -19,8 +19,7 @@ package com.seibel.lod.core.logging; -import com.seibel.lod.core.api.ApiShared; -import com.seibel.lod.core.api.ClientApi; +import com.seibel.lod.core.api.internal.ClientApi; import com.seibel.lod.core.enums.config.LoggerMode; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; 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 9935cd622..4f175060a 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 @@ -26,7 +26,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import com.seibel.lod.core.api.ClientApi; +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; 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 c42416aaa..be46b23f9 100644 --- a/src/main/java/com/seibel/lod/core/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/core/render/LodRenderer.java @@ -23,7 +23,7 @@ import java.awt.Color; import java.time.Duration; import java.util.concurrent.TimeUnit; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.logging.ConfigBasedLogger; import com.seibel.lod.core.logging.ConfigBasedSpamLogger; import com.seibel.lod.core.objects.BoolType; @@ -564,7 +564,7 @@ public class LodRenderer boolean tryFullGen = false; // check if the view distance or config changed - if (ApiShared.previousLodRenderDistance != CONFIG.client().graphics().quality().getLodChunkRenderDistance() + if (InternalApiShared.previousLodRenderDistance != CONFIG.client().graphics().quality().getLodChunkRenderDistance() || chunkRenderDistance != prevRenderDistance || prevFogDistance != CONFIG.client().graphics().fogQuality().getFogDistance()) {