diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index c4954704f..84cb1f38b 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -72,7 +72,7 @@ import net.minecraft.util.math.vector.Vector3f; * This is where LODs are draw to the world. * * @author James Seibel - * @version 9-17-2021 + * @version 9-18-2021 */ public class LodRenderer { @@ -769,7 +769,7 @@ public class LodRenderer */ private void determineIfLodsShouldRegenerate(LodDimension lodDim) { - short renderDistance = (short) mc.getRenderDistance(); + short chunkRenderDistance = (short) mc.getRenderDistance(); //=============// // full regens // @@ -786,7 +786,7 @@ public class LodRenderer prevFogDistance = LodConfig.CLIENT.graphics.fogDistance.get(); prevRenderDistance = mc.getRenderDistance(); //should use this when it's ready - vanillaRenderedChunks = new boolean[renderDistance*2+2][renderDistance*2+2]; + vanillaRenderedChunks = new boolean[chunkRenderDistance*2+2][chunkRenderDistance*2+2]; } // did the user change the debug setting? @@ -809,7 +809,7 @@ public class LodRenderer fullRegen = true; previousPos = LevelPosUtil.createLevelPos((byte) 4, mc.getPlayer().xChunk, mc.getPlayer().zChunk); //should use this when it's ready - vanillaRenderedChunks = new boolean[renderDistance*2+2][renderDistance*2+2]; + vanillaRenderedChunks = new boolean[chunkRenderDistance*2+2][chunkRenderDistance*2+2]; } prevPlayerPosTime = newTime; } @@ -863,23 +863,18 @@ public class LodRenderer // determine which LODs should not be rendered close to the player HashSet chunkPosToSkip = LodUtil.getNearbyLodChunkPosToSkip(lodDim, mc.getPlayer().blockPosition()); - int chunkX; - int chunkZ; + int xIndex; + int zIndex; for (ChunkPos pos : chunkPosToSkip) { - chunkX = pos.x - mc.getPlayer().xChunk + renderDistance + 1; - chunkZ = pos.z - mc.getPlayer().zChunk + renderDistance + 1; - try + xIndex = (pos.x - mc.getPlayer().xChunk) + chunkRenderDistance + 1; + zIndex = (pos.z - mc.getPlayer().zChunk) + chunkRenderDistance + 1; + + if (!vanillaRenderedChunks[xIndex][zIndex]) { - if (!vanillaRenderedChunks[chunkX][chunkZ]) - { - vanillaRenderedChunks[chunkX][chunkZ] = true; - vanillaRenderedChunksChanged = true; - lodDim.setToRegen(pos.getRegionX(), pos.getRegionZ()); - } - }catch (Exception e){ - System.out.println(vanillaRenderedChunks.length); - e.printStackTrace(); + vanillaRenderedChunks[xIndex][zIndex] = true; + vanillaRenderedChunksChanged = true; + lodDim.setToRegen(pos.getRegionX(), pos.getRegionZ()); } } @@ -887,7 +882,7 @@ public class LodRenderer // if the player is high enough, draw all LODs if(chunkPosToSkip.isEmpty() && mc.getPlayer().position().y > 256) { - vanillaRenderedChunks = new boolean[renderDistance*2+2][renderDistance*2+2]; + vanillaRenderedChunks = new boolean[chunkRenderDistance*2+2][chunkRenderDistance*2+2]; vanillaRenderedChunksChanged = true; } } diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java index 069c47fff..19144c242 100644 --- a/src/main/java/com/seibel/lod/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/util/LodUtil.java @@ -25,10 +25,9 @@ import com.seibel.lod.objects.LodDimension; import com.seibel.lod.objects.RegionPos; import com.seibel.lod.wrappers.MinecraftWrapper; -import it.unimi.dsi.fastutil.objects.ObjectList; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.WorldRenderer.LocalRenderInformationContainer; +import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher.CompiledChunk; import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; @@ -375,12 +374,12 @@ public class LodUtil // go through every RenderInfo to get the compiled chunks WorldRenderer renderer = mc.getLevelRenderer(); - ObjectList chunks = renderer.renderChunks; - for (WorldRenderer.LocalRenderInformationContainer worldrenderer$localrenderinformationcontainer : chunks) + for (WorldRenderer.LocalRenderInformationContainer worldrenderer$localrenderinformationcontainer : renderer.renderChunks) { - if (!worldrenderer$localrenderinformationcontainer.chunk.getCompiledChunk().hasNoRenderableLayers()) + CompiledChunk compiledChunk = worldrenderer$localrenderinformationcontainer.chunk.getCompiledChunk(); + if (!compiledChunk.hasNoRenderableLayers()) { - // add the ChunkPos for every empty compiled chunk + // add the ChunkPos for every rendered chunk BlockPos bpos = worldrenderer$localrenderinformationcontainer.chunk.getOrigin(); loadedPos.add(new ChunkPos(bpos));