diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java index afdd8e48a..c5e30e20e 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java @@ -274,7 +274,7 @@ public class LodBufferBuilder PosToRenderContainer posToRender = setsToRender[xR][zR]; posToRender.clear(minDetail, regionPos.x, regionPos.z); - lodDim.getDataToRender( + lodDim.getPosToRender( posToRender, regionPos, playerBlockPosRounded.getX(), diff --git a/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java b/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java index 4c7464c07..062114b1c 100644 --- a/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java +++ b/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java @@ -100,23 +100,23 @@ public class LodWorldGenerator ServerWorld serverWorld = LodUtil.getServerWorldFromDimension(lodDim.dimension); - PosToGenerateContainer posToGenerate = lodDim.getDataToGenerate( + PosToGenerateContainer posToGenerate = lodDim.getPosToGenerate( maxChunkGenRequests, playerPosX, playerPosZ); - - + + byte detailLevel; int posX; int posZ; int nearIndex = 0; int farIndex = 0; - + for (int i = 0; i < posToGenerate.getNumberOfPos(); i++) { // I wish there was a way to compress this code, but I'm not aware of // a easy way to do so. - + // add the near positions if (posToGenerate.getNthDetail(nearIndex, true) != 0 && nearIndex < posToGenerate.getNumberOfNearPos()) { @@ -140,8 +140,8 @@ public class LodWorldGenerator LodNodeGenWorker genWorker = new LodNodeGenWorker(chunkPos, DetailDistanceUtil.getDistanceGenerationMode(detailLevel), lodBuilder, lodDim, serverWorld); WorldWorkerManager.addWorker(genWorker); } - - + + // add the far positions if (posToGenerate.getNthDetail(farIndex, false) != 0 && farIndex < posToGenerate.getNumberOfFarPos()) { diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index 13f1d1dae..8462a1ac6 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -510,7 +510,7 @@ public class LodDimension /** * Returns every position that need to be generated based on the position of the player */ - public PosToGenerateContainer getDataToGenerate(int maxDataToGenerate, int playerBlockPosX, int playerBlockPosZ) + public PosToGenerateContainer getPosToGenerate(int maxDataToGenerate, int playerBlockPosX, int playerBlockPosZ) { PosToGenerateContainer posToGenerate; LodRegion region; @@ -599,7 +599,7 @@ public class LodDimension region = getRegion(xRegion, zRegion); if (region != null) - region.getDataToGenerate(posToGenerate, playerBlockPosX, playerBlockPosZ); + region.getPosToGenerate(posToGenerate, playerBlockPosX, playerBlockPosZ); if ((x == z) || ((x < 0) && (x == -z)) || ((x > 0) && (x == 1 - z))) @@ -621,12 +621,12 @@ public class LodDimension * * TODO why isn't posToRender returned? it would make it a bit more clear what is happening */ - public void getDataToRender(PosToRenderContainer posToRender, RegionPos regionPos, int playerPosX, - int playerPosZ) + public void getPosToRender(PosToRenderContainer posToRender, RegionPos regionPos, int playerPosX, + int playerPosZ) { LodRegion region = getRegion(regionPos.x, regionPos.z); if (region != null) - region.getDataToRender(posToRender, playerPosX, playerPosZ, LodConfig.CLIENT.worldGenerator.generationPriority.get() == GenerationPriority.NEAR_FIRST); + region.getPosToRender(posToRender, playerPosX, playerPosZ, LodConfig.CLIENT.worldGenerator.generationPriority.get() == GenerationPriority.NEAR_FIRST); } /** diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index c8fb48944..e033698cc 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -156,10 +156,10 @@ public class LodRegion *

* 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 +169,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 +223,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 +234,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 +247,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 +260,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 +302,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 +312,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 +331,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 +344,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/util/DataPointUtil.java b/src/main/java/com/seibel/lod/util/DataPointUtil.java index b38a97653..4687c96de 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 { /* @@ -428,6 +430,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)) { @@ -438,6 +441,10 @@ public class DataPointUtil } } } + if(!doesItExist(singleDataToMerge[index])){ + singleData = dataToMerge[index * inputVerticalData]; + singleDataToMerge[index] = createVoidDataPoint(getGenerationMode(singleData)); + } } long data = mergeSingleData(singleDataToMerge);