* TODO why don't we return the posToGenerate, it would make this easier to understand */ - public void getDataToGenerate(PosToGenerateContainer posToGenerate, - int playerBlockPosX, int playerBlockPosZ) + public void getPosToGenerate(PosToGenerateContainer posToGenerate, + int playerBlockPosX, int playerBlockPosZ) { - getDataToGenerate(posToGenerate, LodUtil.REGION_DETAIL_LEVEL, 0, 0, playerBlockPosX, playerBlockPosZ); + getPosToGenerate(posToGenerate, LodUtil.REGION_DETAIL_LEVEL, 0, 0, playerBlockPosX, playerBlockPosZ); } @@ -169,8 +157,8 @@ public class LodRegion *
* TODO why don't we return the posToGenerate, it would make this easier to understand */ - private void getDataToGenerate(PosToGenerateContainer posToGenerate, byte detailLevel, - int childOffsetPosX, int childOffsetPosZ, int playerPosX, int playerPosZ) + private void getPosToGenerate(PosToGenerateContainer posToGenerate, byte detailLevel, + int childOffsetPosX, int childOffsetPosZ, int playerPosX, int playerPosZ) { // equivalent to 2^(...) int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel); @@ -223,7 +211,7 @@ public class LodRegion if (ungeneratedChildren == 0) for (int x = 0; x <= 1; x++) for (int z = 0; z <= 1; z++) - getDataToGenerate(posToGenerate, childDetailLevel, childPosX + x, childPosZ + z, playerPosX, playerPosZ); + getPosToGenerate(posToGenerate, childDetailLevel, childPosX + x, childPosZ + z, playerPosX, playerPosZ); } else { // The detail Level is smaller than a chunk. @@ -234,7 +222,7 @@ public class LodRegion if (!doesDataExist(childDetailLevel, childPosX, childPosZ)) posToGenerate.addPosToGenerate(childDetailLevel, childPosX + regionPosX * childSize, childPosZ + regionPosZ * childSize); else - getDataToGenerate(posToGenerate, childDetailLevel, childPosX, childPosZ, playerPosX, playerPosZ); + getPosToGenerate(posToGenerate, childDetailLevel, childPosX, childPosZ, playerPosX, playerPosZ); } } } @@ -247,10 +235,10 @@ public class LodRegion *
* TODO why don't we return the posToRender, it would make this easier to understand
*/
- public void getDataToRender(PosToRenderContainer posToRender,
- int playerPosX, int playerPosZ, boolean requireCorrectDetailLevel)
+ public void getPosToRender(PosToRenderContainer posToRender,
+ int playerPosX, int playerPosZ, boolean requireCorrectDetailLevel)
{
- getDataToRender(posToRender, LodUtil.REGION_DETAIL_LEVEL, 0, 0, playerPosX, playerPosZ, requireCorrectDetailLevel);
+ getPosToRender(posToRender, LodUtil.REGION_DETAIL_LEVEL, 0, 0, playerPosX, playerPosZ, requireCorrectDetailLevel);
}
/**
@@ -260,9 +248,9 @@ public class LodRegion
* TODO why don't we return the posToRender, it would make this easier to understand
* TODO this needs some more comments, James was only able to figure out part of it
*/
- private void getDataToRender(PosToRenderContainer posToRender,
- byte detailLevel, int posX, int posZ,
- int playerPosX, int playerPosZ, boolean requireCorrectDetailLevel)
+ private void getPosToRender(PosToRenderContainer posToRender,
+ byte detailLevel, int posX, int posZ,
+ int playerPosX, int playerPosZ, boolean requireCorrectDetailLevel)
{
// equivalent to 2^(...)
int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel);
@@ -302,9 +290,9 @@ public class LodRegion
if (stopNow)
{
- posToRender.addPosToRender(detailLevel,
- posX + regionPosX * size,
- posZ + regionPosZ * size);
+ posToRender.addPosToRender(detailLevel,
+ posX + regionPosX * size,
+ posZ + regionPosZ * size);
} else if (desiredLevel > detailLevel)
{
// we have gone beyond the target Detail level
@@ -312,9 +300,9 @@ public class LodRegion
return;
} else if (desiredLevel == detailLevel)
{
- posToRender.addPosToRender(detailLevel,
- posX + regionPosX * size,
- posZ + regionPosZ * size);
+ posToRender.addPosToRender(detailLevel,
+ posX + regionPosX * size,
+ posZ + regionPosZ * size);
} else //case where (detailLevel > desiredLevel)
{
int childPosX = posX * 2;
@@ -331,7 +319,7 @@ public class LodRegion
if (!requireCorrectDetailLevel)
childrenCount++;
else
- getDataToRender(posToRender, childDetailLevel, childPosX + x, childPosZ + z, playerPosX, playerPosZ, requireCorrectDetailLevel);
+ getPosToRender(posToRender, childDetailLevel, childPosX + x, childPosZ + z, playerPosX, playerPosZ, requireCorrectDetailLevel);
}
}
}
@@ -344,12 +332,12 @@ public class LodRegion
{
for (int x = 0; x <= 1; x++)
for (int z = 0; z <= 1; z++)
- getDataToRender(posToRender, childDetailLevel, childPosX + x, childPosZ + z, playerPosX, playerPosZ, requireCorrectDetailLevel);
+ getPosToRender(posToRender, childDetailLevel, childPosX + x, childPosZ + z, playerPosX, playerPosZ, requireCorrectDetailLevel);
} else
{
- posToRender.addPosToRender(detailLevel,
- posX + regionPosX * size,
- posZ + regionPosZ * size);
+ posToRender.addPosToRender(detailLevel,
+ posX + regionPosX * size,
+ posZ + regionPosZ * size);
}
}
}
diff --git a/src/main/java/com/seibel/lod/objects/PosToGenerateContainer.java b/src/main/java/com/seibel/lod/objects/PosToGenerateContainer.java
index 1943017c1..95dfeb915 100644
--- a/src/main/java/com/seibel/lod/objects/PosToGenerateContainer.java
+++ b/src/main/java/com/seibel/lod/objects/PosToGenerateContainer.java
@@ -152,49 +152,43 @@ public class PosToGenerateContainer
// TOOD is this commented code still useful?
// if so why have it commented out?
- /*
+
StringBuilder builder = new StringBuilder();
- builder.append("Number of pos to generate ");
- builder.append(farSize + nearSize);
builder.append('\n');
- builder.append("Number of near pos to generate ");
- builder.append(nearSize);
- builder.append('\n');
- builder.append("Number of far pos to generate ");
- builder.append(farSize);
builder.append('\n');
builder.append('\n');
builder.append("near pos to generate");
builder.append('\n');
- for (int i = 0; i < nearSize; i++)
+ for (int i = 0; i < nearPosToGenerate.length; i++)
{
- builder.append(posToGenerate[i][0]-1);
+ if(nearPosToGenerate[i][0] == 0)
+ break;
+ builder.append(nearPosToGenerate[i][0]-1);
builder.append(" ");
- builder.append(posToGenerate[i][1]);
+ builder.append(nearPosToGenerate[i][1]);
builder.append(" ");
- builder.append(posToGenerate[i][2]);
+ builder.append(nearPosToGenerate[i][2]);
builder.append(" ");
- builder.append(posToGenerate[i][3]);
+ builder.append(nearPosToGenerate[i][3]);
builder.append('\n');
}
builder.append('\n');
+
builder.append("far pos to generate");
builder.append('\n');
- for (int i = maxSize - 1; i >= maxSize - farSize; i--)
+ for (int i = 0; i < farPosToGenerate.length; i++)
{
- builder.append(posToGenerate[i][0]-1);
+ if(farPosToGenerate[i][0] == 0)
+ break;
+ builder.append(farPosToGenerate[i][0]-1);
builder.append(" ");
- builder.append(posToGenerate[i][1]);
+ builder.append(farPosToGenerate[i][1]);
builder.append(" ");
- builder.append(posToGenerate[i][2]);
+ builder.append(farPosToGenerate[i][2]);
builder.append(" ");
- builder.append(posToGenerate[i][3]);
+ builder.append(farPosToGenerate[i][3]);
builder.append('\n');
}
- builder.append('\n');
return builder.toString();
- */
-
- return " ";
}
}
diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java
index 795f22c5f..19627cc8d 100644
--- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java
+++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java
@@ -231,7 +231,8 @@ public class ClientProxy
public void worldLoadEvent(WorldEvent.Load event)
{
DataPointUtil.worldHeight = event.getWorld().getHeight();
- ThreadMapUtil.clearMaps();
+ //LodNodeGenWorker.restartExecuterService();
+ //ThreadMapUtil.clearMaps();
// the player just loaded a new world/dimension
lodWorld.selectWorld(LodUtil.getWorldID(event.getWorld()));
@@ -254,8 +255,8 @@ public class ClientProxy
// if this isn't done unfinished tasks may be left in the queue
// preventing new LodChunks form being generated
- LodNodeGenWorker.restartExecuterService();
- ThreadMapUtil.clearMaps();
+ //LodNodeGenWorker.restartExecuterService();
+ //ThreadMapUtil.clearMaps();
LodWorldGenerator.INSTANCE.numberOfChunksWaitingToGenerate.set(0);
lodWorld.deselectWorld();
@@ -332,7 +333,12 @@ public class ClientProxy
private void viewDistanceChangedEvent()
{
// calculate how wide the dimension(s) should be in regions
- int chunksWide = LodConfig.CLIENT.graphics.lodChunkRenderDistance.get() * 2 + 1;
+ int chunksWide;
+ if(mc.getClientWorld().dimensionType().hasCeiling())
+ chunksWide = Math.max(LodConfig.CLIENT.graphics.lodChunkRenderDistance.get(),64) * 2 + 1;
+ else
+ chunksWide = LodConfig.CLIENT.graphics.lodChunkRenderDistance.get() * 2 + 1;
+
int newWidth = (int) Math.ceil(chunksWide / (float) LodUtil.REGION_WIDTH_IN_CHUNKS);
newWidth = (newWidth % 2 == 0) ? (newWidth += 1) : (newWidth += 2); // make sure we have a odd number of regions
@@ -366,6 +372,16 @@ public class ClientProxy
firstTimeSetupComplete = true;
}
+
+ /**
+ * this method reset some of the static data everytime we change world
+ **/
+ private void resetMod()
+ {
+ ThreadMapUtil.clearMaps();
+ LodNodeGenWorker.restartExecuterService();
+
+ }
//================//
// public getters //
diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java
index 48f7d1336..8ba1b9ab2 100644
--- a/src/main/java/com/seibel/lod/render/LodRenderer.java
+++ b/src/main/java/com/seibel/lod/render/LodRenderer.java
@@ -291,7 +291,7 @@ public class LodRenderer
setupFog(fogSettings.far.distance, fogSettings.far.quality);
- for (int i = 0; i < lodBufferBuilder.bufferCount[x][z]; i++)
+ for (int i = 0; i < lodBufferBuilder.bufferSize[x][z]; i++)
{
sendLodsToGpuAndDraw(vbos[x][z][i], storageBufferIds[x][z], modelViewMatrix);
}
@@ -804,7 +804,7 @@ public class LodRenderer
if (LodConfig.CLIENT.graphics.detailDropOff.get() == DetailDropOff.FANCY)
{
// check if the player has moved
- if (newTime - prevPlayerPosTime > LodConfig.CLIENT.buffers.bufferRebuildPlayerMoveTimeout.get())
+ if (newTime - prevPlayerPosTime > LodConfig.CLIENT.buffers.rebuildTimes.get().playerMoveTimeout)
{
if (LevelPosUtil.getDetailLevel(previousPos) == 0
|| mc.getPlayer().xChunk != LevelPosUtil.getPosX(previousPos)
@@ -825,7 +825,7 @@ public class LodRenderer
// check if the vanilla rendered chunks changed
- if (newTime - prevVanillaChunkTime > LodConfig.CLIENT.buffers.bufferRebuildChunkChangeTimeout.get())
+ if (newTime - prevVanillaChunkTime > LodConfig.CLIENT.buffers.rebuildTimes.get().renderdChunkTimeout)
{
if (vanillaRenderedChunksChanged)
{
@@ -838,7 +838,7 @@ public class LodRenderer
// check if there is any newly generated terrain to show
- if (newTime - prevChunkTime > LodConfig.CLIENT.buffers.bufferRebuildLodChangeTimeout.get())
+ if (newTime - prevChunkTime > LodConfig.CLIENT.buffers.rebuildTimes.get().chunkChangeTimeout)
{
if (lodDim.regenDimensionBuffers)
{
diff --git a/src/main/java/com/seibel/lod/util/DataPointUtil.java b/src/main/java/com/seibel/lod/util/DataPointUtil.java
index 45bff9c76..1ff06e842 100644
--- a/src/main/java/com/seibel/lod/util/DataPointUtil.java
+++ b/src/main/java/com/seibel/lod/util/DataPointUtil.java
@@ -4,6 +4,8 @@ import com.seibel.lod.enums.DistanceGenerationMode;
import net.minecraft.client.renderer.texture.NativeImage;
+import javax.xml.crypto.Data;
+
public class DataPointUtil
{
/*
@@ -174,7 +176,13 @@ public class DataPointUtil
{
return (int) (((dataPoint >>> COLOR_SHIFT) & COLOR_MASK) | (((dataPoint >>> (ALPHA_SHIFT - ALPHA_DOWNSIZE_SHIFT)) | 0b1111) << 24));
}
-
+
+ /**
+ * This method apply the lightmap to the color to use
+ * @param dataPoint
+ * @param lightMap
+ * @return
+ */
public static int getLightColor(long dataPoint, NativeImage lightMap)
{
int lightBlock = getLightBlock(dataPoint);
@@ -186,7 +194,12 @@ public class DataPointUtil
return ColorUtil.multiplyRGBcolors(getColor(dataPoint), ColorUtil.rgbToInt(red, green, blue));
}
-
+
+ /**
+ * This is used to convert a dataPoint to string (usefull for the print function)
+ * @param dataPoint
+ * @return
+ */
public static String toString(long dataPoint)
{
StringBuilder s = new StringBuilder();
@@ -214,7 +227,12 @@ public class DataPointUtil
s.append('\n');
return s.toString();
}
-
+
+ /**
+ * This method merge column of single data together
+ * @param dataToMerge
+ * @return
+ */
public static long mergeSingleData(long[] dataToMerge)
{
int numberOfChildren = 0;
@@ -276,12 +294,43 @@ public class DataPointUtil
}
}
+ public static void shrinkArray(short[] array, int packetSize, int start, int length, int arraySize)
+ {
+ start *= packetSize;
+ length *= packetSize;
+ arraySize *= packetSize;
+ for (int i = 0; i < arraySize - start; i++)
+ {
+ array[start + i] = array[start + length + i];
+ //remove comment to not leave garbage at the end
+ //array[start + packetSize + i] = 0;
+ }
+ }
+
+ public static void extendArray(short[] array, int packetSize, int start, int length, int arraySize)
+ {
+ start *= packetSize;
+ length *= packetSize;
+ arraySize *= packetSize;
+ for (int i = arraySize - start - 1; i >= 0; i--)
+ {
+ array[start + length + i] = array[start + i];
+ array[start + i] = 0;
+ }
+ }
+
+ /**
+ * This method merge column of multiple data together
+ * @param dataToMerge
+ * @param inputVerticalData vertical size of an input data
+ * @param maxVerticalData max vertical size of the merged data
+ * @return
+ */
public static long[] mergeMultiData(long[] dataToMerge, int inputVerticalData, int maxVerticalData)
{
int size = dataToMerge.length / inputVerticalData;
// We initialize the arrays that are going to be used
- short[] projection = ThreadMapUtil.getProjectionArray((worldHeight) / 16 + 1);
short[] heightAndDepth = ThreadMapUtil.getHeightAndDepth((worldHeight + 1) * 2);
long[] singleDataToMerge = ThreadMapUtil.getSingleAddDataToMerge(size);
long[] dataPoint = ThreadMapUtil.getVerticalDataArray(worldHeight + 1);
@@ -295,28 +344,119 @@ public class DataPointUtil
short depth;
short height;
-
+ int count = 0;
+ int i;
+ int ii;
//We collect the indexes of the data, ordered by the depth
- for (int index = 0; index < size; index++)
+ for (int index = 0; index < dataToMerge.length; index++)
{
- for (int dataIndex = 0; dataIndex < inputVerticalData; dataIndex++)
+ singleData = dataToMerge[index];
+ if (doesItExist(singleData))
{
- singleData = dataToMerge[index * inputVerticalData + dataIndex];
- if (doesItExist(singleData))
+ genMode = Math.min(genMode, getGenerationMode(singleData));
+ allEmpty = false;
+ if (!isVoid(singleData))
{
- genMode = Math.min(genMode, getGenerationMode(singleData));
- allEmpty = false;
- if (!isVoid(singleData))
+ allVoid = false;
+ depth = getDepth(singleData);
+ height = getHeight(singleData);
+
+ int botPos = -1;
+ int topPos = -1;
+ //values fall in between and possibly require extension of array
+ boolean botExtend = false;
+ boolean topExtend = false;
+ for (i = 0; i < count; i++)
{
- allVoid = false;
- depth = getDepth(singleData);
- height = getHeight(singleData);
- for (int y = depth; y <= height; y++)
- projection[y / 16] |= 1 << (y & 0xf);
+ if (depth >= heightAndDepth[i * 2] && depth <= heightAndDepth[i * 2 + 1])
+ {
+ botPos = i;
+ break;
+ }
+ else if (((i + 1 < count && depth < heightAndDepth[(i + 1) * 2]) || i + 1 == count) && depth > heightAndDepth[i * 2 + 1])
+ {
+ botPos = i;
+ botExtend = true;
+ break;
+ }
+ }
+ for (i = 0; i < count; i++)
+ {
+ if (height >= heightAndDepth[i * 2] && height <= heightAndDepth[i * 2 + 1])
+ {
+ topPos = i;
+ break;
+ }
+ else if (((i + 1 < count && height < heightAndDepth[(i + 1) * 2]) || i + 1 == count) && height > heightAndDepth[i * 2 + 1])
+ {
+ topPos = i;
+ topExtend = true;
+ break;
+ }
+ }
+ if (botPos == -1)
+ {
+ if (topPos == -1)
+ {
+ //whole block falls below
+ extendArray(heightAndDepth, 2, 0, 1, count);
+ heightAndDepth[0] = depth;
+ heightAndDepth[1] = height;
+ count++;
+ }
+ else if (!topExtend)
+ {
+ //only bottom falls below extending it there, while top is inside existing
+ shrinkArray(heightAndDepth, 2, 0, topPos, count);
+ heightAndDepth[0] = depth;
+ count -= topPos;
+ }
+ else
+ {
+ //top falls between some blocks, extending those as well
+ shrinkArray(heightAndDepth, 2, 0, topPos, count);
+ heightAndDepth[0] = depth;
+ heightAndDepth[1] = height;
+ count -= topPos;
+ }
+ }
+ else if (!botExtend)
+ {
+ if (!topExtend)
+ //both top and bottom are within some exiting blocks, possibly merging them
+ heightAndDepth[botPos * 2 + 1] = heightAndDepth[topPos * 2 + 1];
+ else
+ //top falls between some blocks, extending it there
+ heightAndDepth[botPos * 2 + 1] = height;
+ shrinkArray(heightAndDepth, 2, botPos + 1, topPos - botPos, count);
+ count -= topPos - botPos;
+ }
+ else
+ {
+ if (!topExtend)
+ {
+ //only top is within some exiting block, extending it
+ botPos++; //to make it easier
+ heightAndDepth[botPos * 2] = depth;
+ heightAndDepth[botPos * 2 + 1] = heightAndDepth[topPos * 2 + 1];
+ shrinkArray(heightAndDepth, 2, botPos + 1, topPos - botPos, count);
+ count -= topPos - botPos;
+ }
+ else
+ {
+ //both top and bottom are outside existing blocks
+ shrinkArray(heightAndDepth, 2, botPos + 1, topPos - botPos, count);
+ count -= topPos - botPos;
+ extendArray(heightAndDepth, 2, botPos + 1, 1, count);
+ count++;
+ heightAndDepth[botPos * 2 + 2] = depth;
+ heightAndDepth[botPos * 2 + 3] = height;
+ }
}
}
}
}
+
//We check if there is any data that's not empty or void
if (allEmpty)
{
@@ -327,44 +467,6 @@ public class DataPointUtil
dataPoint[0] = createVoidDataPoint(genMode);
return dataPoint;
}
- //We extract the merged data
- int count = 0;
- int i = 0;
- int ii = 0;
- while (i < projection.length)
- {
- while (i < projection.length && projection[i] == 0) i++;
- if (i == projection.length)
- break; //we reached end of WORLD_HEIGHT and it's nothing more here
- while (ii < 15 && ((projection[i] >>> ii) & 1) == 0) ii++;
- if (ii >= 15 && ((projection[i] >>> ii) & 1) == 0) //there is nothing more in this chunk
- {
- ii = 0;
- i++;
- continue;
- }
- depth = (short) (i * 16 + ii);
-
- while (ii < 15 && ((projection[i] >>> ii) & 1) == 1) ii++;
- if (ii >= 15 && ((projection[i] >>> ii) & 1) == 1) //if end is not in this chunk
- {
- ii = 0;
- i++;
- while (i < projection.length && ~(projection[i]) == 0) i++; //check for big solid blocks
- if (i == projection.length) //solid to WORLD_HEIGHT
- {
- heightAndDepth[count * 2] = depth;
- heightAndDepth[count * 2 + 1] = (short) (worldHeight - 1);
- break;
- }
- while ((((projection[i] >>> ii) & 1) == 1)) ii++;
- }
- height = (short) (i * 16 + ii - 1);
- heightAndDepth[count * 2] = depth;
- heightAndDepth[count * 2 + 1] = height;
- count++;
- }
-
//we limit the vertical portion to maxVerticalData
int j = 0;
while (count > maxVerticalData)
@@ -405,6 +507,7 @@ public class DataPointUtil
singleData = dataToMerge[index * inputVerticalData + dataIndex];
if (doesItExist(singleData) && !isVoid(singleData))
{
+
if ((depth <= getDepth(singleData) && getDepth(singleData) <= height)
|| (depth <= getHeight(singleData) && getHeight(singleData) <= height))
{
@@ -415,6 +518,10 @@ public class DataPointUtil
}
}
}
+ if(!doesItExist(singleDataToMerge[index])){
+ singleData = dataToMerge[index * inputVerticalData];
+ singleDataToMerge[index] = createVoidDataPoint(getGenerationMode(singleData));
+ }
}
long data = mergeSingleData(singleDataToMerge);
@@ -422,9 +529,4 @@ public class DataPointUtil
}
return dataPoint;
}
-
- public static long[] compress(long[] data, byte detailLevel)
- {
- return null;
- }
}
\ No newline at end of file
diff --git a/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java b/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java
index e77452265..f96fd918d 100644
--- a/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java
+++ b/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java
@@ -3,7 +3,6 @@ package com.seibel.lod.util;
import com.seibel.lod.config.LodConfig;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.enums.HorizontalResolution;
-import com.seibel.lod.enums.VerticalQuality;
public class DetailDistanceUtil
{
@@ -167,9 +166,7 @@ public class DetailDistanceUtil
public static int getMaxVerticalData(int detail)
{
- if(LodConfig.CLIENT.worldGenerator.lodQualityMode.get() == VerticalQuality.HEIGHTMAP)
- return 1;
- return maxVerticalData[LodUtil.clamp(minGenDetail, detail, LodUtil.REGION_DETAIL_LEVEL)];
+ return LodConfig.CLIENT.worldGenerator.verticalQuality.get().maxVerticalData[LodUtil.clamp(minGenDetail, detail, LodUtil.REGION_DETAIL_LEVEL)];
}
}
diff --git a/src/main/java/com/seibel/lod/util/ThreadMapUtil.java b/src/main/java/com/seibel/lod/util/ThreadMapUtil.java
index 564e33360..69b02698d 100644
--- a/src/main/java/com/seibel/lod/util/ThreadMapUtil.java
+++ b/src/main/java/com/seibel/lod/util/ThreadMapUtil.java
@@ -13,7 +13,7 @@ import java.util.concurrent.ConcurrentMap;
* Holds data used by specific threads so
* the data doesn't have to be recreated every
* time it is needed.
- *
+ *
* @author Leonardo Amato
* @version 9-25-2021
*/
@@ -28,72 +28,74 @@ public class ThreadMapUtil
public static final ConcurrentMap