positionsWaitingToBeGenerated = new HashSet<>();
/**
* Singleton copy of this object
@@ -85,6 +86,7 @@ public class LodWorldGenerator
public static final LodWorldGenerator INSTANCE = new LodWorldGenerator();
+
private LodWorldGenerator()
{
@@ -97,23 +99,23 @@ public class LodWorldGenerator
*/
public void queueGenerationRequests(LodDimension lodDim, LodRenderer renderer, LodBuilder lodBuilder)
{
- if (config.client().worldGenerator().getDistanceGenerationMode() != DistanceGenerationMode.NONE
+ if (CONFIG.client().worldGenerator().getDistanceGenerationMode() != DistanceGenerationMode.NONE
&& !generatorThreadRunning
- && mc.hasSinglePlayerServer())
+ && MC.hasSinglePlayerServer())
{
// the thread is now running, don't queue up another thread
generatorThreadRunning = true;
// just in case the config changed
- maxChunkGenRequests = config.client().advanced().threading().getNumberOfWorldGenerationThreads() * 8;
+ maxChunkGenRequests = CONFIG.client().advanced().threading().getNumberOfWorldGenerationThreads() * 8;
Thread generatorThread = new Thread(() ->
{
try
{
// round the player's block position down to the nearest chunk BlockPos
- int playerPosX = mc.getPlayerBlockPos().getX();
- int playerPosZ = mc.getPlayerBlockPos().getZ();
+ int playerPosX = MC.getPlayerBlockPos().getX();
+ int playerPosZ = MC.getPlayerBlockPos().getZ();
//=======================================//
@@ -147,7 +149,7 @@ public class LodWorldGenerator
posZ = posToGenerate.getNthPosZ(nearIndex, true);
nearIndex++;
- ChunkPosWrapper chunkPos = new ChunkPosWrapper(LevelPosUtil.getChunkPos(detailLevel, posX), LevelPosUtil.getChunkPos(detailLevel, posZ));
+ AbstractChunkPosWrapper chunkPos = WRAPPER_FACTORY.createChunkPos(LevelPosUtil.getChunkPos(detailLevel, posX), LevelPosUtil.getChunkPos(detailLevel, posZ));
// prevent generating the same chunk multiple times
if (positionsWaitingToBeGenerated.contains(chunkPos))
@@ -172,7 +174,7 @@ public class LodWorldGenerator
posZ = posToGenerate.getNthPosZ(farIndex, false);
farIndex++;
- ChunkPosWrapper chunkPos = new ChunkPosWrapper(LevelPosUtil.getChunkPos(detailLevel, posX), LevelPosUtil.getChunkPos(detailLevel, posZ));
+ AbstractChunkPosWrapper chunkPos = WRAPPER_FACTORY.createChunkPos(LevelPosUtil.getChunkPos(detailLevel, posX), LevelPosUtil.getChunkPos(detailLevel, posZ));
// don't add more to the generation queue then allowed
if (numberOfChunksWaitingToGenerate.get() >= maxChunkGenRequests)
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 b305fe565..9ecfec9c2 100644
--- a/src/main/java/com/seibel/lod/core/objects/Box.java
+++ b/src/main/java/com/seibel/lod/core/objects/Box.java
@@ -41,8 +41,8 @@ import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftWrapper;
*/
public class Box
{
- private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class);
- private static final IMinecraftWrapper mc = SingletonHandler.get(IMinecraftWrapper.class);
+ private static final IMinecraftWrapper MC = SingletonHandler.get(IMinecraftWrapper.class);
+ 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;
@@ -257,7 +257,7 @@ public class Box
for (LodDirection lodDirection : DIRECTIONS)
{
if (!adjShadeDisabled[DIRECTION_INDEX.get(lodDirection)])
- colorMap[DIRECTION_INDEX.get(lodDirection)] = ColorUtil.applyShade(color, mc.getShade(lodDirection));
+ colorMap[DIRECTION_INDEX.get(lodDirection)] = ColorUtil.applyShade(color, MC.getShade(lodDirection));
else
colorMap[DIRECTION_INDEX.get(lodDirection)] = color;
}
@@ -269,10 +269,10 @@ public class Box
*/
public int getColor(LodDirection lodDirection)
{
- if (config.client().advanced().debugging().getDebugMode() != DebugMode.SHOW_DETAIL)
+ if (CONFIG.client().advanced().debugging().getDebugMode() != DebugMode.SHOW_DETAIL)
return colorMap[DIRECTION_INDEX.get(lodDirection)];
else
- return ColorUtil.applyShade(color, mc.getShade(lodDirection));
+ return ColorUtil.applyShade(color, MC.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 1b087c9a8..9a4dea5ef 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
@@ -35,13 +35,13 @@ 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.IWrapperFactory;
import com.seibel.lod.core.wrapperAdapters.SingletonHandler;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton;
import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftWrapper;
import com.seibel.lod.core.wrapperAdapters.world.IDimensionTypeWrapper;
import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
-import com.seibel.lod.wrappers.minecraft.MinecraftWrapper;
@@ -59,8 +59,9 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper;
*/
public class LodDimension
{
- private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class);
- private final IMinecraftWrapper mc = SingletonHandler.get(IMinecraftWrapper.class);
+ private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
+ private static final IMinecraftWrapper MC = SingletonHandler.get(IMinecraftWrapper.class);
+ private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class);
public final IDimensionTypeWrapper dimension;
@@ -92,9 +93,9 @@ public class LodDimension
private final RegionPos center;
/** prevents the cutAndExpandThread from expanding at the same location multiple times */
- private volatile ChunkPosWrapper lastExpandedChunk;
+ private volatile AbstractChunkPosWrapper lastExpandedChunk;
/** prevents the cutAndExpandThread from cutting at the same location multiple times */
- private volatile ChunkPosWrapper lastCutChunk;
+ private volatile AbstractChunkPosWrapper lastCutChunk;
private final ExecutorService cutAndExpandThread = Executors.newSingleThreadExecutor(new LodThreadFactory(this.getClass().getSimpleName() + " - Cut and Expand"));
/**
@@ -115,7 +116,7 @@ public class LodDimension
{
// determine the save folder
File saveDir;
- if (mc.hasSinglePlayerServer())
+ if (MC.hasSinglePlayerServer())
{
// local world
@@ -126,8 +127,8 @@ public class LodDimension
{
// connected to server
- saveDir = new File(mc.getGameDirectory().getCanonicalFile().getPath() +
- File.separatorChar + "lod server data" + File.separatorChar + mc.getCurrentDimensionId());
+ saveDir = new File(MC.getGameDirectory().getCanonicalFile().getPath() +
+ File.separatorChar + "lod server data" + File.separatorChar + MC.getCurrentDimensionId());
}
fileHandler = new LodDimensionFileHandler(saveDir, this);
@@ -317,10 +318,10 @@ public class LodDimension
*/
public void cutRegionNodesAsync(int playerPosX, int playerPosZ)
{
- ChunkPosWrapper newPlayerChunk = new ChunkPosWrapper(LevelPosUtil.getChunkPos((byte) 0, playerPosX), LevelPosUtil.getChunkPos((byte) 0, playerPosZ));
+ AbstractChunkPosWrapper newPlayerChunk = FACTORY.createChunkPos(LevelPosUtil.getChunkPos((byte) 0, playerPosX), LevelPosUtil.getChunkPos((byte) 0, playerPosZ));
if (lastCutChunk == null)
- lastCutChunk = new ChunkPosWrapper(newPlayerChunk.getX() + 1, newPlayerChunk.getZ() - 1);
+ lastCutChunk = FACTORY.createChunkPos(newPlayerChunk.getX() + 1, newPlayerChunk.getZ() - 1);
// don't run the tree cutter multiple times
// for the same location
@@ -369,13 +370,13 @@ public class LodDimension
/** Either expands or loads all regions in the rendered LOD area */
public void expandOrLoadRegionsAsync(int playerPosX, int playerPosZ)
{
- DistanceGenerationMode generationMode = config.client().worldGenerator().getDistanceGenerationMode();
- ChunkPosWrapper newPlayerChunk = new ChunkPosWrapper(LevelPosUtil.getChunkPos((byte) 0, playerPosX), LevelPosUtil.getChunkPos((byte) 0, playerPosZ));
- VerticalQuality verticalQuality = config.client().graphics().quality().getVerticalQuality();
+ DistanceGenerationMode generationMode = CONFIG.client().worldGenerator().getDistanceGenerationMode();
+ AbstractChunkPosWrapper newPlayerChunk = FACTORY.createChunkPos(LevelPosUtil.getChunkPos((byte) 0, playerPosX), LevelPosUtil.getChunkPos((byte) 0, playerPosZ));
+ VerticalQuality verticalQuality = CONFIG.client().graphics().quality().getVerticalQuality();
if (lastExpandedChunk == null)
- lastExpandedChunk = new ChunkPosWrapper(newPlayerChunk.getX() + 1, newPlayerChunk.getZ() - 1);
+ lastExpandedChunk = FACTORY.createChunkPos(newPlayerChunk.getX() + 1, newPlayerChunk.getZ() - 1);
// don't run the expander multiple times
// for the same location
@@ -548,7 +549,7 @@ public class LodDimension
dz = -1;
// We can use two type of generation scheduling
- switch (config.client().worldGenerator().getGenerationPriority())
+ switch (CONFIG.client().worldGenerator().getGenerationPriority())
{
default:
case NEAR_FIRST:
@@ -605,7 +606,7 @@ public class LodDimension
//if(lodRegion.isChunkPreGenerated(xChunkToCheck,zChunkToCheck))
// complexity = DistanceGenerationMode.SERVER.complexity;
//else
- complexity = config.client().worldGenerator().getDistanceGenerationMode().complexity;
+ complexity = CONFIG.client().worldGenerator().getDistanceGenerationMode().complexity;
//we create the level position info of the chunk
@@ -680,7 +681,7 @@ public class LodDimension
{
LodRegion region = getRegion(regionPos.x, regionPos.z);
if (region != null)
- region.getPosToRender(posToRender, playerPosX, playerPosZ, config.client().worldGenerator().getGenerationPriority() == 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/objects/lod/RegionPos.java b/src/main/java/com/seibel/lod/core/objects/lod/RegionPos.java
index 040a9f889..265424a95 100644
--- a/src/main/java/com/seibel/lod/core/objects/lod/RegionPos.java
+++ b/src/main/java/com/seibel/lod/core/objects/lod/RegionPos.java
@@ -20,8 +20,10 @@
package com.seibel.lod.core.objects.lod;
import com.seibel.lod.core.util.LodUtil;
+import com.seibel.lod.core.wrapperAdapters.IWrapperFactory;
+import com.seibel.lod.core.wrapperAdapters.SingletonHandler;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
/**
* This object is similar to ChunkPos or BlockPos.
@@ -31,15 +33,14 @@ import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
*/
public class RegionPos
{
+ private static final IWrapperFactory WRAPPER_FACTORY = SingletonHandler.get(IWrapperFactory.class);
+
+
public int x;
public int z;
- /**
- * Default Constructor
- *
- * Sets x and z to 0
- */
+ /** Sets x and z to 0 */
public RegionPos()
{
x = 0;
@@ -56,20 +57,20 @@ public class RegionPos
/** Converts from a BlockPos to a RegionPos */
public RegionPos(AbstractBlockPosWrapper pos)
{
- this(new ChunkPosWrapper(pos));
+ this(WRAPPER_FACTORY.createChunkPos(pos));
}
/** Converts from a ChunkPos to a RegionPos */
- public RegionPos(ChunkPosWrapper pos)
+ public RegionPos(AbstractChunkPosWrapper pos)
{
x = Math.floorDiv(pos.getX(), LodUtil.REGION_WIDTH_IN_CHUNKS);
z = Math.floorDiv(pos.getZ(), LodUtil.REGION_WIDTH_IN_CHUNKS);
}
/** Returns the ChunkPos at the center of this region */
- public ChunkPosWrapper chunkPos()
+ public AbstractChunkPosWrapper chunkPos()
{
- return new ChunkPosWrapper(
+ return WRAPPER_FACTORY.createChunkPos(
(x * LodUtil.REGION_WIDTH_IN_CHUNKS) + LodUtil.REGION_WIDTH_IN_CHUNKS / 2,
(z * LodUtil.REGION_WIDTH_IN_CHUNKS) + LodUtil.REGION_WIDTH_IN_CHUNKS / 2);
}
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 c3099717b..30a37c959 100644
--- a/src/main/java/com/seibel/lod/core/render/GlProxy.java
+++ b/src/main/java/com/seibel/lod/core/render/GlProxy.java
@@ -35,7 +35,6 @@ import com.seibel.lod.core.render.shader.LodShader;
import com.seibel.lod.core.render.shader.LodShaderProgram;
import com.seibel.lod.core.wrapperAdapters.SingletonHandler;
import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftWrapper;
-import com.seibel.lod.wrappers.minecraft.MinecraftWrapper;
/**
* A singleton that holds references to different openGL contexts
@@ -53,11 +52,11 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper;
*/
public class GlProxy
{
+ private static final IMinecraftWrapper MC = SingletonHandler.get(IMinecraftWrapper.class);
+
+
private static GlProxy instance = null;
- private static IMinecraftWrapper mc = SingletonHandler.get(IMinecraftWrapper.class);
-
-
/** Minecraft's GLFW window */
public final long minecraftGlContext;
/** Minecraft's GL capabilities */
@@ -140,7 +139,7 @@ public class GlProxy
// Note: as of MC 1.17 this shouldn't happen since MC
// requires OpenGL 3.3, but just in case.
String errorMessage = ModInfo.READABLE_NAME + " was initializing " + GlProxy.class.getSimpleName() + " and discoverd this GPU doesn't support OpenGL 2.0 or greater.";
- mc.crashMinecraft(errorMessage + " Sorry I couldn't tell you sooner :(", new UnsupportedOperationException("This GPU doesn't support OpenGL 2.0 or greater."));
+ MC.crashMinecraft(errorMessage + " Sorry I couldn't tell you sooner :(", new UnsupportedOperationException("This GPU doesn't support OpenGL 2.0 or greater."));
}
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 8da09ed35..c33ca529c 100644
--- a/src/main/java/com/seibel/lod/core/render/LodRenderer.java
+++ b/src/main/java/com/seibel/lod/core/render/LodRenderer.java
@@ -44,11 +44,12 @@ 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.IWrapperFactory;
import com.seibel.lod.core.wrapperAdapters.SingletonHandler;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton;
import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
import com.seibel.lod.wrappers.handlers.ReflectionHandler;
import com.seibel.lod.wrappers.minecraft.MinecraftRenderWrapper;
@@ -63,6 +64,12 @@ import net.minecraft.profiler.IProfiler;
*/
public class LodRenderer
{
+ private static final IMinecraftWrapper MC = SingletonHandler.get(IMinecraftWrapper.class);
+ private static final MinecraftRenderWrapper MC_RENDER = MinecraftRenderWrapper.INSTANCE;
+ private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
+ private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class);
+
+
// /**
// * this is the light used when rendering the LODs,
// * it should be something different from what is used by Minecraft
@@ -75,10 +82,6 @@ public class LodRenderer
*/
public DebugMode previousDebugMode = DebugMode.OFF;
- private final IMinecraftWrapper mc = SingletonHandler.get(IMinecraftWrapper.class);
- private final MinecraftRenderWrapper mcRenderer = MinecraftRenderWrapper.INSTANCE;
- private final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class);
-
private IProfiler profiler;
private int farPlaneBlockDistance;
@@ -96,7 +99,7 @@ public class LodRenderer
@SuppressWarnings("unused")
private int[][][] storageBufferIds;
- private ChunkPosWrapper vbosCenter = new ChunkPosWrapper(0, 0);
+ private AbstractChunkPosWrapper vbosCenter = FACTORY.createChunkPos();
/** This is used to determine if the LODs should be regenerated */
@@ -165,7 +168,7 @@ public class LodRenderer
return;
}
- if (mcRenderer.playerHasBlindnessEffect())
+ if (MC_RENDER.playerHasBlindnessEffect())
{
// if the player is blind don't render LODs,
// and don't change minecraft's fog
@@ -193,7 +196,7 @@ public class LodRenderer
if ((partialRegen || fullRegen) && !lodBufferBuilderFactory.generatingBuffers && !lodBufferBuilderFactory.newBuffersAvailable())
{
// generate the LODs on a separate thread to prevent stuttering or freezing
- lodBufferBuilderFactory.generateLodBuffersAsync(this, lodDim, mc.getPlayerBlockPos(), true);
+ lodBufferBuilderFactory.generateLodBuffersAsync(this, lodDim, MC.getPlayerBlockPos(), true);
// the regen process has been started,
// it will be done when lodBufferBuilder.newBuffersAvailable()
@@ -227,7 +230,7 @@ public class LodRenderer
// set the required open GL settings
- if (config.client().advanced().debugging().getDebugMode() == 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);
@@ -244,12 +247,12 @@ public class LodRenderer
Mat4f modelViewMatrix = offsetTheModelViewMatrix(mcModelViewMatrix, partialTicks);
- vanillaBlockRenderedDistance = mcRenderer.getRenderDistance() * LodUtil.CHUNK_WIDTH;
+ vanillaBlockRenderedDistance = MC_RENDER.getRenderDistance() * LodUtil.CHUNK_WIDTH;
// 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;
+ if (MC.getWrappedClientWorld().getDimensionType().hasCeiling())
+ farPlaneBlockDistance = Math.min(CONFIG.client().graphics().quality().getLodChunkRenderDistance(), LodUtil.CEILED_DIMENSION_MAX_RENDER_DISTANCE) * LodUtil.CHUNK_WIDTH;
else
- farPlaneBlockDistance = config.client().graphics().quality().getLodChunkRenderDistance() * LodUtil.CHUNK_WIDTH;
+ farPlaneBlockDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * LodUtil.CHUNK_WIDTH;
Mat4f projectionMatrix = createProjectionMatrix(mcProjectionMatrix, vanillaBlockRenderedDistance, partialTicks);
@@ -282,7 +285,7 @@ public class LodRenderer
if (vbos != null)
{
- Vec3f cameraDir = mcRenderer.getLookAtVector();
+ Vec3f cameraDir = MC_RENDER.getLookAtVector();
// TODO re-enable once rendering is totally working
boolean cullingDisabled = true; //LodConfig.client().graphics.advancedGraphicsOption.disableDirectionalCulling.get();
@@ -330,7 +333,7 @@ public class LodRenderer
x + vboCenterRegionPos.x - (lodDim.getWidth() / 2),
z + vboCenterRegionPos.z - (lodDim.getWidth() / 2));
- if (cullingDisabled || RenderUtil.isRegionInViewFrustum(mcRenderer.getCameraBlockPosition(), cameraDir, vboPos.blockPos()))
+ if (cullingDisabled || RenderUtil.isRegionInViewFrustum(MC_RENDER.getCameraBlockPosition(), cameraDir, vboPos.blockPos()))
{
// TODO add fog to the fragment shader
// if ((x > halfWidth - quarterWidth && x < halfWidth + quarterWidth)
@@ -459,7 +462,7 @@ public class LodRenderer
if (fogQuality == FogQuality.FANCY)
{
// for more realistic fog when using FAR
- if (config.client().graphics().fogQuality().getFogDistance() == 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));
@@ -515,7 +518,7 @@ public class LodRenderer
// disable fog if Minecraft wasn't rendering fog
// or we want it disabled
if (!fogSettings.vanillaIsRenderingFog
- || config.client().graphics().fogQuality().getDisableVanillaFog())
+ || CONFIG.client().graphics().fogQuality().getDisableVanillaFog())
{
// Make fog render a infinite distance away.
// This doesn't technically disable Minecraft's fog
@@ -542,7 +545,7 @@ public class LodRenderer
private Mat4f offsetTheModelViewMatrix(Mat4f mcModelViewMatrix, float partialTicks)
{
// get all relevant camera info
- Vec3d projectedView = mcRenderer.getCameraExactPosition();
+ Vec3d projectedView = MC_RENDER.getCameraExactPosition();
// translate the camera relative to the regions' center
// (AxisAlignedBoundingBoxes (LODs) use doubles and thus have a higher
@@ -566,15 +569,15 @@ public class LodRenderer
// create the new projection matrix
Mat4f lodProj = Mat4f.perspective(
- mcRenderer.getFov(partialTicks),
- (float) this.mcRenderer.getScreenWidth() / (float) this.mcRenderer.getScreenHeight(),
- config.client().graphics().advancedGraphics().getUseExtendedNearClipPlane() ? vanillaBlockRenderedDistance / 5 : 1,
+ MC_RENDER.getFov(partialTicks),
+ (float) this.MC_RENDER.getScreenWidth() / (float) this.MC_RENDER.getScreenHeight(),
+ CONFIG.client().graphics().advancedGraphics().getUseExtendedNearClipPlane() ? vanillaBlockRenderedDistance / 5 : 1,
farPlaneBlockDistance * LodUtil.CHUNK_WIDTH / 2);
// get Minecraft's un-edited projection matrix
// (this is before it is zoomed, distorted, etc.)
- Mat4f defaultMcProj = mcRenderer.getDefaultProjectionMatrix(partialTicks);
+ Mat4f defaultMcProj = MC_RENDER.getDefaultProjectionMatrix(partialTicks);
// true here means use "use fov setting" (probably)
// this logic strips away the defaultMcProj matrix, so we
@@ -688,7 +691,7 @@ public class LodRenderer
FogQuality quality = ReflectionHandler.INSTANCE.getFogQuality();
- FogDrawOverride override = config.client().graphics().fogQuality().getFogDrawOverride();
+ FogDrawOverride override = CONFIG.client().graphics().fogQuality().getFogDrawOverride();
fogSettings.vanillaIsRenderingFog = quality != FogQuality.OFF;
@@ -729,7 +732,7 @@ public class LodRenderer
fogSettings.near.quality = FogQuality.FANCY;
fogSettings.far.quality = FogQuality.FANCY;
- switch (config.client().graphics().fogQuality().getFogDistance())
+ switch (CONFIG.client().graphics().fogQuality().getFogDistance())
{
case NEAR_AND_FAR:
fogSettings.near.distance = FogDistance.NEAR;
@@ -756,7 +759,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 (config.client().graphics().fogQuality().getFogDistance())
+ switch (CONFIG.client().graphics().fogQuality().getFogDistance())
{
case NEAR_AND_FAR:
case NEAR:
@@ -783,7 +786,7 @@ public class LodRenderer
/** Determines if the LODs should have a fullRegen or partialRegen */
private void determineIfLodsShouldRegenerate(LodDimension lodDim, float partialTicks)
{
- short chunkRenderDistance = (short) mcRenderer.getRenderDistance();
+ short chunkRenderDistance = (short) MC_RENDER.getRenderDistance();
int vanillaRenderedChunksWidth = chunkRenderDistance * 2 + 2;
//=============//
@@ -791,23 +794,23 @@ public class LodRenderer
//=============//
// check if the view distance changed
- if (ApiShared.previousLodRenderDistance != config.client().graphics().quality().getLodChunkRenderDistance()
+ if (ApiShared.previousLodRenderDistance != CONFIG.client().graphics().quality().getLodChunkRenderDistance()
|| chunkRenderDistance != prevRenderDistance
- || prevFogDistance != config.client().graphics().fogQuality().getFogDistance())
+ || 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 = config.client().graphics().fogQuality().getFogDistance();
+ previousPos = LevelPosUtil.createLevelPos((byte) 4, MC.getPlayerChunkPos().getZ(), MC.getPlayerChunkPos().getZ());
+ prevFogDistance = CONFIG.client().graphics().fogQuality().getFogDistance();
prevRenderDistance = chunkRenderDistance;
}
// did the user change the debug setting?
- if (config.client().advanced().debugging().getDebugMode() != previousDebugMode)
+ if (CONFIG.client().advanced().debugging().getDebugMode() != previousDebugMode)
{
- previousDebugMode = config.client().advanced().debugging().getDebugMode();
+ previousDebugMode = CONFIG.client().advanced().debugging().getDebugMode();
fullRegen = true;
}
@@ -815,15 +818,15 @@ public class LodRenderer
long newTime = System.currentTimeMillis();
// check if the player has moved
- if (newTime - prevPlayerPosTime > config.client().advanced().buffers().getRebuildTimes().playerMoveTimeout)
+ if (newTime - prevPlayerPosTime > CONFIG.client().advanced().buffers().getRebuildTimes().playerMoveTimeout)
{
if (LevelPosUtil.getDetailLevel(previousPos) == 0
- || mc.getPlayerChunkPos().getX() != LevelPosUtil.getPosX(previousPos)
- || mc.getPlayerChunkPos().getZ() != LevelPosUtil.getPosZ(previousPos))
+ || MC.getPlayerChunkPos().getX() != LevelPosUtil.getPosX(previousPos)
+ || MC.getPlayerChunkPos().getZ() != LevelPosUtil.getPosZ(previousPos))
{
vanillaRenderedChunks = new boolean[vanillaRenderedChunksWidth][vanillaRenderedChunksWidth];
fullRegen = true;
- previousPos = LevelPosUtil.createLevelPos((byte) 4, mc.getPlayerChunkPos().getX(), mc.getPlayerChunkPos().getZ());
+ previousPos = LevelPosUtil.createLevelPos((byte) 4, MC.getPlayerChunkPos().getX(), MC.getPlayerChunkPos().getZ());
}
prevPlayerPosTime = newTime;
}
@@ -834,9 +837,9 @@ public class LodRenderer
// change in order to rebuild the buffers
// the max brightness is 1 and the minimum is 0.2
- float skyBrightness = lodDim.dimension.hasSkyLight() ? mc.getSkyDarken(partialTicks) : 0.2f;
+ float skyBrightness = lodDim.dimension.hasSkyLight() ? MC.getSkyDarken(partialTicks) : 0.2f;
float minLightingDifference;
- switch (config.client().advanced().buffers().getRebuildTimes())
+ switch (CONFIG.client().advanced().buffers().getRebuildTimes())
{
case FREQUENT:
minLightingDifference = 0.025f;
@@ -856,10 +859,10 @@ public class LodRenderer
// (just in case the minLightingDifference is too large to notice the change)
|| (skyBrightness == 1.0f && prevSkyBrightness != 1.0f) // noon
|| (skyBrightness == 0.2f && prevSkyBrightness != 0.2f) // midnight
- || mcRenderer.getGamma() != prevBrightness)
+ || MC_RENDER.getGamma() != prevBrightness)
{
fullRegen = true;
- prevBrightness = mcRenderer.getGamma();
+ prevBrightness = MC_RENDER.getGamma();
prevSkyBrightness = skyBrightness;
}
@@ -875,7 +878,7 @@ 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().getRebuildTimes().renderedChunkTimeout)
{
if (vanillaRenderedChunksChanged)
{
@@ -887,7 +890,7 @@ public class LodRenderer
// 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().getRebuildTimes().chunkChangeTimeout)
{
if (lodDim.regenDimensionBuffers)
{
@@ -904,15 +907,15 @@ public class LodRenderer
//==============//
// determine which LODs should not be rendered close to the player
- HashSet chunkPosToSkip = LodUtil.getNearbyLodChunkPosToSkip(lodDim, mc.getPlayerBlockPos());
+ HashSet chunkPosToSkip = LodUtil.getNearbyLodChunkPosToSkip(lodDim, MC.getPlayerBlockPos());
int xIndex;
int zIndex;
- for (ChunkPosWrapper pos : chunkPosToSkip)
+ for (AbstractChunkPosWrapper pos : chunkPosToSkip)
{
vanillaRenderedChunksEmptySkip = false;
- xIndex = (pos.getX() - mc.getPlayerChunkPos().getX()) + (chunkRenderDistance + 1);
- zIndex = (pos.getZ() - mc.getPlayerChunkPos().getZ()) + (chunkRenderDistance + 1);
+ xIndex = (pos.getX() - MC.getPlayerChunkPos().getX()) + (chunkRenderDistance + 1);
+ zIndex = (pos.getZ() - MC.getPlayerChunkPos().getZ()) + (chunkRenderDistance + 1);
// sometimes we are given chunks that are outside the render distance,
// This prevents index out of bounds exceptions
@@ -931,7 +934,7 @@ public class LodRenderer
// if the player is high enough, draw all LODs
- if (chunkPosToSkip.isEmpty() && mc.getPlayerBlockPos().getY() > 256 && !vanillaRenderedChunksEmptySkip)
+ if (chunkPosToSkip.isEmpty() && MC.getPlayerBlockPos().getY() > 256 && !vanillaRenderedChunksEmptySkip)
{
vanillaRenderedChunks = new boolean[vanillaRenderedChunksWidth][vanillaRenderedChunksWidth];
vanillaRenderedChunksChanged = true;
diff --git a/src/main/java/com/seibel/lod/core/render/RenderUtil.java b/src/main/java/com/seibel/lod/core/render/RenderUtil.java
index 9a517dc40..aa476057a 100644
--- a/src/main/java/com/seibel/lod/core/render/RenderUtil.java
+++ b/src/main/java/com/seibel/lod/core/render/RenderUtil.java
@@ -22,7 +22,7 @@ package com.seibel.lod.core.render;
import com.seibel.lod.core.objects.math.Vec3f;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.wrappers.minecraft.MinecraftRenderWrapper;
/**
@@ -41,7 +41,7 @@ public class RenderUtil
* Returns if the given ChunkPos is in the loaded area of the world.
* @param center the center of the loaded world (probably the player's ChunkPos)
*/
- public static boolean isChunkPosInLoadedArea(ChunkPosWrapper pos, ChunkPosWrapper center)
+ public static boolean isChunkPosInLoadedArea(AbstractChunkPosWrapper pos, AbstractChunkPosWrapper center)
{
return (pos.getX() >= center.getX() - MC_RENDER.getRenderDistance()
&& pos.getX() <= center.getX() + MC_RENDER.getRenderDistance())
diff --git a/src/main/java/com/seibel/lod/core/util/ColorUtil.java b/src/main/java/com/seibel/lod/core/util/ColorUtil.java
index 161d83e52..012e7088d 100644
--- a/src/main/java/com/seibel/lod/core/util/ColorUtil.java
+++ b/src/main/java/com/seibel/lod/core/util/ColorUtil.java
@@ -23,7 +23,6 @@ import java.awt.Color;
import com.seibel.lod.core.wrapperAdapters.SingletonHandler;
import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftWrapper;
-import com.seibel.lod.wrappers.minecraft.MinecraftWrapper;
/**
*
@@ -33,7 +32,7 @@ import com.seibel.lod.wrappers.minecraft.MinecraftWrapper;
*/
public class ColorUtil
{
- private static final IMinecraftWrapper mc = SingletonHandler.get(IMinecraftWrapper.class);
+ private static final IMinecraftWrapper MC = SingletonHandler.get(IMinecraftWrapper.class);
public static int rgbToInt(int red, int green, int blue)
@@ -89,7 +88,7 @@ public class ColorUtil
/** This method apply the lightmap to the color to use */
public static int applyLightValue(int color, int skyLight, int blockLight)
{
- int lightColor = mc.getColorIntFromLightMap(blockLight, skyLight);
+ int lightColor = MC.getColorIntFromLightMap(blockLight, skyLight);
int red = ColorUtil.getBlue(lightColor);
int green = ColorUtil.getGreen(lightColor);
int blue = ColorUtil.getRed(lightColor);
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 e6d92869d..2b54fe580 100644
--- a/src/main/java/com/seibel/lod/core/util/LodUtil.java
+++ b/src/main/java/com/seibel/lod/core/util/LodUtil.java
@@ -31,13 +31,14 @@ 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.IWrapperFactory;
import com.seibel.lod.core.wrapperAdapters.SingletonHandler;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton;
import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftWrapper;
import com.seibel.lod.core.wrapperAdapters.world.IDimensionTypeWrapper;
import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
import com.seibel.lod.wrappers.minecraft.MinecraftRenderWrapper;
import net.minecraft.world.chunk.ChunkSection;
@@ -55,6 +56,7 @@ public class LodUtil
private static final IMinecraftWrapper MC = SingletonHandler.get(IMinecraftWrapper.class);
private static final MinecraftRenderWrapper MC_RENDER = MinecraftRenderWrapper.INSTANCE;
private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
+ private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class);
/**
* Vanilla render distances less than or equal to this will not allow partial
@@ -324,10 +326,10 @@ public class LodUtil
* Get a HashSet of all ChunkPos within the normal render distance
* that should not be rendered.
*/
- public static HashSet getNearbyLodChunkPosToSkip(LodDimension lodDim, AbstractBlockPosWrapper blockPosWrapper)
+ public static HashSet getNearbyLodChunkPosToSkip(LodDimension lodDim, AbstractBlockPosWrapper blockPosWrapper)
{
int chunkRenderDist = MC_RENDER.getRenderDistance();
- ChunkPosWrapper centerChunk = new ChunkPosWrapper(blockPosWrapper);
+ AbstractChunkPosWrapper centerChunk = FACTORY.createChunkPos(blockPosWrapper);
int skipRadius;
VanillaOverdraw overdraw = CONFIG.client().graphics().advancedGraphics().getVanillaOverdraw();
@@ -394,7 +396,7 @@ public class LodUtil
// get the chunks that are going to be rendered by Minecraft
- HashSet posToSkip = MC_RENDER.getRenderedChunks();
+ HashSet posToSkip = MC_RENDER.getRenderedChunks();
// remove everything outside the skipRadius,
@@ -407,7 +409,7 @@ public class LodUtil
{
if (x <= centerChunk.getX() - skipRadius || x >= centerChunk.getX() + skipRadius
|| z <= centerChunk.getZ() - skipRadius || z >= centerChunk.getZ() + skipRadius)
- posToSkip.remove(new ChunkPosWrapper(x, z));
+ posToSkip.remove(FACTORY.createChunkPos(x, z));
}
}
}
diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java
index 4b772a438..ad9f15dba 100644
--- a/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/IWrapperFactory.java
@@ -1,6 +1,7 @@
package com.seibel.lod.core.wrapperAdapters;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
/**
*
@@ -11,4 +12,10 @@ public interface IWrapperFactory
{
public AbstractBlockPosWrapper createBlockPos();
public AbstractBlockPosWrapper createBlockPos(int x, int y, int z);
+
+
+ public AbstractChunkPosWrapper createChunkPos();
+ public AbstractChunkPosWrapper createChunkPos(int x, int z);
+ public AbstractChunkPosWrapper createChunkPos(AbstractChunkPosWrapper newChunkPos);
+ public AbstractChunkPosWrapper createChunkPos(AbstractBlockPosWrapper blockPos);
}
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 8d9ca9832..7bb59085e 100644
--- a/src/main/java/com/seibel/lod/core/wrapperAdapters/SingletonHandler.java
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/SingletonHandler.java
@@ -66,11 +66,13 @@ public class SingletonHandler
@SuppressWarnings("unchecked")
public static T get(Class objectClass) throws NullPointerException, ClassCastException
{
+ //
if (!singletons.containsKey(objectClass))
{
throw new NullPointerException("The singleton [" + objectClass.getSimpleName() + "] was never bound.");
}
+
return (T) singletons.get(objectClass);
}
diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/block/AbstractBlockPosWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/block/AbstractBlockPosWrapper.java
index ba005186b..1ded1f571 100644
--- a/src/main/java/com/seibel/lod/core/wrapperAdapters/block/AbstractBlockPosWrapper.java
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/block/AbstractBlockPosWrapper.java
@@ -4,15 +4,10 @@ import com.seibel.lod.core.enums.LodDirection;
public abstract class AbstractBlockPosWrapper
{
- public AbstractBlockPosWrapper()
- {
-
- }
+ public AbstractBlockPosWrapper() { }
+ public AbstractBlockPosWrapper(int x, int y, int z) { }
+
- public AbstractBlockPosWrapper(int x, int y, int z)
- {
-
- }
public abstract void set(int x, int y, int z);
diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/AbstractChunkPosWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/AbstractChunkPosWrapper.java
new file mode 100644
index 000000000..3e595c730
--- /dev/null
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/AbstractChunkPosWrapper.java
@@ -0,0 +1,32 @@
+package com.seibel.lod.core.wrapperAdapters.chunk;
+
+import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+
+
+/**
+ * This class wraps minecraft's ChunkPos class
+ *
+ * @author James Seibel
+ * @version 11-18-2021
+ */
+public abstract class AbstractChunkPosWrapper
+{
+ public AbstractChunkPosWrapper(AbstractChunkPosWrapper newChunkPos) { }
+ public AbstractChunkPosWrapper(AbstractBlockPosWrapper blockPos) { }
+ public AbstractChunkPosWrapper(int chunkX, int chunkZ) { }
+ public AbstractChunkPosWrapper() { }
+
+
+
+ public abstract int getX();
+ public abstract int getZ();
+
+ public abstract int getMinBlockX();
+ public abstract int getMinBlockZ();
+
+ public abstract int getRegionX();
+ public abstract int getRegionZ();
+
+ public abstract AbstractBlockPosWrapper getWorldPosition();
+
+}
diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/IChunkWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/IChunkWrapper.java
index 720ea1207..3dedc19af 100644
--- a/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/IChunkWrapper.java
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/chunk/IChunkWrapper.java
@@ -3,7 +3,6 @@ package com.seibel.lod.core.wrapperAdapters.chunk;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
import com.seibel.lod.core.wrapperAdapters.block.IBlockColorWrapper;
import com.seibel.lod.core.wrapperAdapters.block.IBlockShapeWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
import com.seibel.lod.wrappers.world.BiomeWrapper;
/**
@@ -25,7 +24,7 @@ public interface IChunkWrapper
public IBlockShapeWrapper getBlockShapeWrapper(AbstractBlockPosWrapper blockPos);
- public ChunkPosWrapper getPos();
+ public AbstractChunkPosWrapper getPos();
public boolean isLightCorrect();
diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftRenderWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftRenderWrapper.java
index a7e777dd0..7124ce9f6 100644
--- a/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftRenderWrapper.java
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftRenderWrapper.java
@@ -6,7 +6,7 @@ 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.wrapperAdapters.block.AbstractBlockPosWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
/**
* Contains everything related to
@@ -39,11 +39,7 @@ public interface IMinecraftRenderWrapper
/**
* This method returns the ChunkPos of all chunks that Minecraft
- * is going to render this frame.
- *
- * Note: This isn't perfect. It will return some chunks that are outside
- * the clipping plane. (For example, if you are high above the ground some chunks
- * will be incorrectly added, even though they are outside render range).
+ * is going to render this frame.
*/
- public HashSet getRenderedChunks();
+ public HashSet getRenderedChunks();
}
diff --git a/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftWrapper.java b/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftWrapper.java
index 3c0932b26..fbb1b9e3f 100644
--- a/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftWrapper.java
+++ b/src/main/java/com/seibel/lod/core/wrapperAdapters/minecraft/IMinecraftWrapper.java
@@ -25,9 +25,9 @@ import java.util.ArrayList;
import com.seibel.lod.core.enums.LodDirection;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperAdapters.misc.ILightMapWrapper;
import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper;
-import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
import com.seibel.lod.wrappers.world.DimensionTypeWrapper;
import com.seibel.lod.wrappers.world.WorldWrapper;
@@ -105,7 +105,7 @@ public interface IMinecraftWrapper
public AbstractBlockPosWrapper getPlayerBlockPos();
- public ChunkPosWrapper getPlayerChunkPos();
+ public AbstractChunkPosWrapper getPlayerChunkPos();
/**
* Attempts to get the ServerWorld for the dimension
diff --git a/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java b/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java
index 3c63b83d2..596280411 100644
--- a/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java
+++ b/src/main/java/com/seibel/lod/wrappers/WrapperFactory.java
@@ -2,9 +2,12 @@ package com.seibel.lod.wrappers;
import com.seibel.lod.core.wrapperAdapters.IWrapperFactory;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.wrappers.block.BlockPosWrapper;
+import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
/**
+ * This handles creating abstract wrapper objects.
*
* @author James Seibel
* @version 11-18-2021
@@ -26,4 +29,34 @@ public class WrapperFactory implements IWrapperFactory
return new BlockPosWrapper(x,y,z);
}
+
+
+
+ @Override
+ public AbstractChunkPosWrapper createChunkPos()
+ {
+ return new ChunkPosWrapper();
+ }
+
+ @Override
+ public AbstractChunkPosWrapper createChunkPos(int x, int z)
+ {
+ return new ChunkPosWrapper(x, z);
+ }
+
+ @Override
+ public AbstractChunkPosWrapper createChunkPos(AbstractChunkPosWrapper newChunkPos)
+ {
+ return new ChunkPosWrapper(newChunkPos);
+ }
+
+ @Override
+ public AbstractChunkPosWrapper createChunkPos(AbstractBlockPosWrapper blockPos)
+ {
+ return new ChunkPosWrapper(blockPos);
+ }
+
+
+
+
}
diff --git a/src/main/java/com/seibel/lod/wrappers/block/BlockColorWrapper.java b/src/main/java/com/seibel/lod/wrappers/block/BlockColorWrapper.java
index 01e5958c2..d39130faa 100644
--- a/src/main/java/com/seibel/lod/wrappers/block/BlockColorWrapper.java
+++ b/src/main/java/com/seibel/lod/wrappers/block/BlockColorWrapper.java
@@ -29,7 +29,7 @@ import net.minecraftforge.client.model.data.ModelDataMap;
/**
- * This class wraps the minecraft Block class
+ * This class wraps the minecraft Block color class
*
* @author ??
* @version 11-17-2021
diff --git a/src/main/java/com/seibel/lod/wrappers/block/BlockShapeWrapper.java b/src/main/java/com/seibel/lod/wrappers/block/BlockShapeWrapper.java
index 8059c9cfd..71ec018df 100644
--- a/src/main/java/com/seibel/lod/wrappers/block/BlockShapeWrapper.java
+++ b/src/main/java/com/seibel/lod/wrappers/block/BlockShapeWrapper.java
@@ -19,7 +19,12 @@ import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
-//This class wraps the minecraft Block class
+/**
+ * This class wraps Minecraft's Block class
+ *
+ * @author ??
+ * @version 11-18-2021
+ */
public class BlockShapeWrapper implements IBlockShapeWrapper
{
//set of block which require tint
diff --git a/src/main/java/com/seibel/lod/wrappers/chunk/ChunkPosWrapper.java b/src/main/java/com/seibel/lod/wrappers/chunk/ChunkPosWrapper.java
index 9c6b61662..2d80bfb59 100644
--- a/src/main/java/com/seibel/lod/wrappers/chunk/ChunkPosWrapper.java
+++ b/src/main/java/com/seibel/lod/wrappers/chunk/ChunkPosWrapper.java
@@ -3,14 +3,20 @@ package com.seibel.lod.wrappers.chunk;
import java.util.Objects;
import com.seibel.lod.core.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.wrappers.block.BlockPosWrapper;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
-//This class wraps the minecraft ChunkPos class
-public class ChunkPosWrapper
+/**
+ * This class wraps minecraft's ChunkPos class
+ *
+ * @author James Seibel
+ * @version 11-18-2021
+ */
+public class ChunkPosWrapper extends AbstractChunkPosWrapper
{
private final ChunkPos chunkPos;
@@ -25,9 +31,9 @@ public class ChunkPosWrapper
}
- public ChunkPosWrapper(ChunkPosWrapper newChunkPos)
+ public ChunkPosWrapper(AbstractChunkPosWrapper newChunkPos)
{
- this.chunkPos = newChunkPos.chunkPos;
+ this.chunkPos = ((ChunkPosWrapper) newChunkPos).chunkPos;
}
public ChunkPosWrapper(AbstractBlockPosWrapper blockPos)
@@ -40,31 +46,44 @@ public class ChunkPosWrapper
this.chunkPos = new ChunkPos(chunkX, chunkZ);
}
+ public ChunkPosWrapper()
+ {
+ this.chunkPos = new ChunkPos(0, 0);
+ }
+
+
+
+ @Override
public int getX()
{
return chunkPos.x;
}
+ @Override
public int getZ()
{
return chunkPos.z;
}
+ @Override
public int getMinBlockX()
{
return chunkPos.getMinBlockX();
}
+ @Override
public int getMinBlockZ()
{
return chunkPos.getMinBlockZ();
}
+ @Override
public int getRegionX()
{
return chunkPos.getRegionX();
}
+ @Override
public int getRegionZ()
{
return chunkPos.getRegionZ();
@@ -75,19 +94,25 @@ public class ChunkPosWrapper
return chunkPos;
}
- @Override public boolean equals(Object o)
+
+
+ @Override
+ public boolean equals(Object o)
{
return chunkPos.equals(o);
}
- @Override public int hashCode()
+ @Override
+ public int hashCode()
{
return Objects.hash(chunkPos);
}
- public BlockPosWrapper getWorldPosition()
- {
- BlockPos blockPos = chunkPos.getWorldPosition();
- return new BlockPosWrapper(blockPos.getX(), blockPos.getY(), blockPos.getZ());
- }
+ @Override
+ public BlockPosWrapper getWorldPosition()
+ {
+ BlockPos blockPos = chunkPos.getWorldPosition();
+ return new BlockPosWrapper(blockPos.getX(), blockPos.getY(), blockPos.getZ());
+ }
+
}
diff --git a/src/main/java/com/seibel/lod/wrappers/minecraft/MinecraftRenderWrapper.java b/src/main/java/com/seibel/lod/wrappers/minecraft/MinecraftRenderWrapper.java
index cfc30b7cd..69118c8f9 100644
--- a/src/main/java/com/seibel/lod/wrappers/minecraft/MinecraftRenderWrapper.java
+++ b/src/main/java/com/seibel/lod/wrappers/minecraft/MinecraftRenderWrapper.java
@@ -6,6 +6,7 @@ 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.wrapperAdapters.block.AbstractBlockPosWrapper;
+import com.seibel.lod.core.wrapperAdapters.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperAdapters.minecraft.IMinecraftRenderWrapper;
import com.seibel.lod.wrappers.block.BlockPosWrapper;
import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
@@ -112,9 +113,9 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
* will be incorrectly added, even though they are outside render range).
*/
@Override
- public HashSet getRenderedChunks()
+ public HashSet getRenderedChunks()
{
- HashSet loadedPos = new HashSet<>();
+ HashSet loadedPos = new HashSet<>();
// Wow, those are some long names!
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 e571332b7..dad992f4a 100644
--- a/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java
+++ b/src/main/java/com/seibel/lod/wrappers/worldGeneration/WorldGeneratorWrapper.java
@@ -13,6 +13,7 @@ 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.chunk.AbstractChunkPosWrapper;
import com.seibel.lod.core.wrapperAdapters.config.ILodConfigWrapperSingleton;
import com.seibel.lod.core.wrapperAdapters.world.IWorldWrapper;
import com.seibel.lod.wrappers.chunk.ChunkPosWrapper;
@@ -44,13 +45,14 @@ import net.minecraft.world.server.ServerWorldLightManager;
*/
public class WorldGeneratorWrapper
{
+ private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class);
+
/**
* If a configured feature fails for whatever reason,
* add it to this list. This is to hopefully remove any
* features that could cause issues down the line.
*/
- private static final ConcurrentHashMap> configuredFeaturesToAvoid = new ConcurrentHashMap<>();
- private static final ILodConfigWrapperSingleton config = SingletonHandler.get(ILodConfigWrapperSingleton.class);
+ private static final ConcurrentHashMap> FEATURES_TO_AVOID = new ConcurrentHashMap<>();
public final ServerWorld serverWorld;
@@ -71,10 +73,10 @@ public class WorldGeneratorWrapper
/** takes about 2-5 ms */
- public void generateUsingBiomesOnly(ChunkPosWrapper pos, DistanceGenerationMode generationMode)
+ public void generateUsingBiomesOnly(AbstractChunkPosWrapper pos, DistanceGenerationMode generationMode)
{
List chunkList = new LinkedList<>();
- ChunkPrimer chunk = new ChunkPrimer(pos.getChunkPos(), UpgradeData.EMPTY);
+ ChunkPrimer chunk = new ChunkPrimer(((ChunkPosWrapper) pos).getChunkPos(), UpgradeData.EMPTY);
chunkList.add(chunk);
ServerChunkProvider chunkSource = serverWorld.getChunkSource();
@@ -181,10 +183,10 @@ public class WorldGeneratorWrapper
/** takes about 10 - 20 ms */
- public void generateUsingSurface(ChunkPosWrapper pos)
+ public void generateUsingSurface(AbstractChunkPosWrapper pos)
{
List chunkList = new LinkedList<>();
- ChunkPrimer chunk = new ChunkPrimer(pos.getChunkPos(), UpgradeData.EMPTY);
+ ChunkPrimer chunk = new ChunkPrimer(((ChunkPosWrapper) pos).getChunkPos(), UpgradeData.EMPTY);
chunkList.add(chunk);
LodServerWorld lodServerWorld = new LodServerWorld(serverWorld, chunk);
@@ -221,10 +223,10 @@ public class WorldGeneratorWrapper
* Causes concurrentModification Exceptions,
* which could cause instability or world generation bugs
*/
- public void generateUsingFeatures(ChunkPosWrapper pos)
+ public void generateUsingFeatures(AbstractChunkPosWrapper pos)
{
List chunkList = new LinkedList<>();
- ChunkPrimer chunk = new ChunkPrimer(pos.getChunkPos(), UpgradeData.EMPTY);
+ ChunkPrimer chunk = new ChunkPrimer(((ChunkPosWrapper) pos).getChunkPos(), UpgradeData.EMPTY);
chunkList.add(chunk);
LodServerWorld lodServerWorld = new LodServerWorld(serverWorld, chunk);
@@ -266,7 +268,7 @@ public class WorldGeneratorWrapper
}
}
- boolean allowUnstableFeatures = config.client().worldGenerator().getAllowUnstableFeatureGeneration();
+ boolean allowUnstableFeatures = CONFIG.client().worldGenerator().getAllowUnstableFeatureGeneration();
// generate all the features related to this chunk.
// this may or may not be thread safe
@@ -281,7 +283,7 @@ public class WorldGeneratorWrapper
ConfiguredFeature, ?> configuredFeature = featureSupplier.get();
if (!allowUnstableFeatures &&
- configuredFeaturesToAvoid.containsKey(configuredFeature.hashCode()))
+ FEATURES_TO_AVOID.containsKey(configuredFeature.hashCode()))
continue;
@@ -306,7 +308,7 @@ public class WorldGeneratorWrapper
// https://github.com/EsotericSoftware/kryo )
if (!allowUnstableFeatures)
- configuredFeaturesToAvoid.put(configuredFeature.hashCode(), configuredFeature);
+ FEATURES_TO_AVOID.put(configuredFeature.hashCode(), configuredFeature);
// ClientProxy.LOGGER.info(configuredFeaturesToAvoid.mappingCount());
}
// This will happen when the LodServerWorld
@@ -319,7 +321,7 @@ public class WorldGeneratorWrapper
e.printStackTrace();
if (!allowUnstableFeatures)
- configuredFeaturesToAvoid.put(configuredFeature.hashCode(), configuredFeature);
+ FEATURES_TO_AVOID.put(configuredFeature.hashCode(), configuredFeature);
// ClientProxy.LOGGER.info(configuredFeaturesToAvoid.mappingCount());
}
}
@@ -340,7 +342,7 @@ public class WorldGeneratorWrapper
* Note this should not be multithreaded and does cause server/simulation lag
* (Higher lag for generating than loading)
*/
- public void generateWithServer(ChunkPosWrapper pos)
+ public void generateWithServer(AbstractChunkPosWrapper pos)
{
lodBuilder.generateLodNodeFromChunk(lodDim, new ChunkWrapper(serverWorld.getChunk(pos.getX(), pos.getZ(), ChunkStatus.FEATURES)), new LodBuilderConfig(DistanceGenerationMode.SERVER));
}