diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index b050f6b63..eaa842eb6 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -34,8 +34,6 @@ import com.seibel.lod.util.LodUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.biome.BiomeContainer; -import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.WorldWorkerManager; @@ -43,7 +41,7 @@ import net.minecraftforge.common.WorldWorkerManager; * This object is used to create NearFarBuffer objects. * * @author James Seibel - * @version 06-19-2021 + * @version 07-25-2021 */ public class LodBufferBuilder { @@ -90,15 +88,11 @@ public class LodBufferBuilder } - private BiomeContainer biomeContainer = null; - private LodDimension previousDimension = null; - - /** * Create a thread to asynchronously generate LOD buffers * centered around the given camera X and Z. *
- * This method will write to the drawableNearBuffers and drawableFarBuffers. + * This method will write to the drawable near and far buffers. *
* After the buildable buffers have been generated they must be * swapped with the drawable buffers in the LodRenderer to be drawn. @@ -113,12 +107,6 @@ public class LodBufferBuilder if (buildableNearBuffer == null || buildableFarBuffer == null) throw new IllegalStateException("generateLodBuffersAsync was called before the buildableNearBuffer and buildableFarBuffer were created."); - if (previousDimension != lodDim) - { - biomeContainer = LodUtil.getServerWorldFromDimension(lodDim.dimension).getChunk(0, 0, ChunkStatus.EMPTY).getBiomes(); - previousDimension = lodDim; - } - generatingBuffers = true; @@ -209,8 +197,9 @@ public class LodBufferBuilder // issue #40 // TODO optimize this code, // using the purely optimized code above we can achieve close to - // 100% CPU utilization, this code generally achieves 40 - 50 % - // I'm sure there is a better data structure for this. + // 100% CPU utilization, this code generally achieves 40 - 50% + // after a certain point; and I'm sure there is a better data + // structure for this. if (newDistance < minChunkDist) { // this chunk is closer, clear any previous @@ -269,11 +258,12 @@ public class LodBufferBuilder chunkGenIndex++; } } - - } - // don't render this null chunk + } // lod null and can generate more chunks + + // don't render this null/empty chunk continue; - } + + } // lod null or empty BufferBuilder currentBuffer = null; @@ -290,6 +280,7 @@ public class LodBufferBuilder } } + // issue #19 // TODO add a way for a server side mod to generate chunks requested here if(mc.hasSingleplayerServer()) { @@ -315,7 +306,7 @@ public class LodBufferBuilder numberOfChunksWaitingToGenerate.addAndGet(1); - LodChunkGenWorker genWorker = new LodChunkGenWorker(chunkPos, renderer, lodChunkBuilder, this, lodDim, serverWorld, biomeContainer); + LodChunkGenWorker genWorker = new LodChunkGenWorker(chunkPos, renderer, lodChunkBuilder, this, lodDim, serverWorld); WorldWorkerManager.addWorker(genWorker); } } diff --git a/src/main/java/com/seibel/lod/builders/worldGeneration/LodChunkGenWorker.java b/src/main/java/com/seibel/lod/builders/worldGeneration/LodChunkGenWorker.java index 45aaeb53d..7d849e3ea 100644 --- a/src/main/java/com/seibel/lod/builders/worldGeneration/LodChunkGenWorker.java +++ b/src/main/java/com/seibel/lod/builders/worldGeneration/LodChunkGenWorker.java @@ -43,7 +43,6 @@ import net.minecraft.util.WeightedList.Entry; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.palette.UpgradeData; import net.minecraft.world.biome.Biome; -import net.minecraft.world.biome.BiomeContainer; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.chunk.IChunk; @@ -70,7 +69,7 @@ import net.minecraftforge.common.WorldWorkerManager.IWorker; * This is used to generate a LodChunk at a given ChunkPos. * * @author James Seibel - * @version 7-9-2021 + * @version 7-25-2021 */ public class LodChunkGenWorker implements IWorker { @@ -88,12 +87,29 @@ public class LodChunkGenWorker implements IWorker public LodChunkGenWorker(ChunkPos newPos, LodRenderer newLodRenderer, LodChunkBuilder newLodBuilder, LodBufferBuilder newLodBufferBuilder, - LodDimension newLodDimension, ServerWorld newServerWorld, - BiomeContainer newBiomeContainer) + LodDimension newLodDimension, ServerWorld newServerWorld) { + // just a few sanity checks + if (newPos == null) + throw new IllegalArgumentException("LodChunkGenWorker must have a non-null ChunkPos"); + + if (newLodRenderer == null) + throw new IllegalArgumentException("LodChunkGenWorker must have a non-null LodRenderer"); + + if (newLodBuilder == null) + throw new IllegalArgumentException("LodChunkGenThread requires a non-null LodChunkBuilder"); + + if (newLodBufferBuilder == null) + throw new IllegalArgumentException("LodChunkGenThread requires a non-null LodBufferBuilder"); + + if (newLodDimension == null) + throw new IllegalArgumentException("LodChunkGenThread requires a non-null LodDimension"); + if (newServerWorld == null) - throw new IllegalArgumentException("LodChunkGenWorker must have a non-null ServerWorld"); - + throw new IllegalArgumentException("LodChunkGenThread requires a non-null ServerWorld"); + + + thread = new LodChunkGenThread(newPos, newLodRenderer, newLodBuilder, newLodBufferBuilder, newLodDimension, newServerWorld); @@ -145,7 +161,7 @@ public class LodChunkGenWorker implements IWorker public final LodDimension lodDim; public final LodChunkBuilder lodChunkBuilder; public final LodRenderer lodRenderer; - private LodBufferBuilder lodBufferBuilder; + private final LodBufferBuilder lodBufferBuilder; private ChunkPos pos;