diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java index 2411ade8d..86d8f25ee 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/chunk/ChunkWrapper.java @@ -20,6 +20,7 @@ import net.minecraft.world.level.block.SimpleWaterloggedBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.levelgen.Heightmap; /** @@ -78,7 +79,9 @@ public class ChunkWrapper implements IChunkWrapper @Override public IBlockShapeWrapper getBlockShapeWrapper(int x, int y, int z) { - Block block = chunk.getSections()[y >> CHUNK_SECTION_SHIFT].getBlockState(x & CHUNK_SIZE_MASK, y & CHUNK_SECTION_MASK, z & CHUNK_SIZE_MASK).getBlock(); + LevelChunkSection section = chunk.getSections()[y >> CHUNK_SECTION_SHIFT]; + if (section == null) return null; + Block block = section.getBlockState(x & CHUNK_SIZE_MASK, y & CHUNK_SECTION_MASK, z & CHUNK_SIZE_MASK).getBlock(); return BlockShapeWrapper.getBlockShapeWrapper(block, this, x, y, z); } @@ -140,9 +143,11 @@ public class ChunkWrapper implements IChunkWrapper public boolean isWaterLogged(int x, int y, int z) { - BlockState blockState = chunk.getSections()[y >> CHUNK_SECTION_SHIFT].getBlockState(x & CHUNK_SIZE_MASK, y & CHUNK_SECTION_MASK, z & CHUNK_SIZE_MASK); + LevelChunkSection section = chunk.getSections()[y >> CHUNK_SECTION_SHIFT]; + if (section == null) return false; + BlockState blockState = section.getBlockState(x & CHUNK_SIZE_MASK, y & CHUNK_SECTION_MASK, z & CHUNK_SIZE_MASK); -// //This type of block is always in water + //This type of block is always in water return (!(blockState.getBlock() instanceof LiquidBlockContainer) && (blockState.getBlock() instanceof SimpleWaterloggedBlock)) && (blockState.hasProperty(BlockStateProperties.WATERLOGGED) && blockState.getValue(BlockStateProperties.WATERLOGGED)); } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java index a5990fb49..2f0e297d6 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -5,6 +5,8 @@ import java.util.HashSet; import com.mojang.blaze3d.platform.NativeImage; import com.seibel.lod.common.wrappers.misc.LightMapWrapper; +import com.seibel.lod.core.handlers.IReflectionHandler; +import com.seibel.lod.core.handlers.ReflectionHandler; import com.seibel.lod.core.util.LodUtil; import net.minecraft.client.renderer.LightTexture; import org.lwjgl.opengl.GL20; @@ -35,12 +37,13 @@ import net.minecraft.world.phys.Vec3; * related to rendering in Minecraft. * * @author James Seibel - * @version 12-05-2021 + * @version 12-12-2021 */ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper { public static final MinecraftRenderWrapper INSTANCE = new MinecraftRenderWrapper(); - public static final MinecraftWrapper MC_WRAPPER = MinecraftWrapper.INSTANCE; + + private static final MinecraftWrapper MC_WRAPPER = MinecraftWrapper.INSTANCE; private static final Minecraft MC = Minecraft.getInstance(); private static final GameRenderer GAME_RENDERER = MC.gameRenderer; @@ -143,23 +146,33 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper { HashSet loadedPos = new HashSet<>(); - // Wow, those are some long names! + // TODO James needs to allow for circular references in the SingletonHandler + IReflectionHandler reflectionHandler = ReflectionHandler.instance; - // go through every RenderInfo to get the compiled chunks - LevelRenderer renderer = MC.levelRenderer; - /* - for (RenderChunkInfo worldRenderer$LocalRenderInformationContainer : renderer.renderChunks) + if (reflectionHandler.sodiumPresent()) { - CompiledChunk compiledChunk = worldRenderer$LocalRenderInformationContainer.chunk.getCompiledChunk(); - if (!compiledChunk.hasNoRenderableLayers()) - { - // add the ChunkPos for every rendered chunk - BlockPos bpos = worldRenderer$LocalRenderInformationContainer.chunk.getOrigin(); - - loadedPos.add(new ChunkPosWrapper(bpos)); - } + loadedPos = reflectionHandler.getSodiumRenderedChunks(); + } + else + { + // Wow, those are some long names! + + // go through every RenderInfo to get the compiled chunks + /* + LevelRenderer renderer = MC.levelRenderer; + for (LevelRenderer.RenderChunkInfo worldRenderer$LocalRenderInformationContainer : renderer.renderChunks) + { + CompiledChunk compiledChunk = worldRenderer$LocalRenderInformationContainer.chunk.getCompiledChunk(); + if (!compiledChunk.hasNoRenderableLayers()) + { + // add the ChunkPos for every rendered chunk + BlockPos bpos = worldRenderer$LocalRenderInformationContainer.chunk.getOrigin(); + + loadedPos.add(new ChunkPosWrapper(bpos)); + } + } + */ } - */ return loadedPos; } diff --git a/core b/core index 9e882951e..c811e6bad 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 9e882951efccf9b2949a40badbe78d28735b2ebc +Subproject commit c811e6bad67699262a2bbc5c047de643f2e3ee77