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 d9c2a5b95..8da550a70 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 @@ -2,10 +2,13 @@ package com.seibel.lod.common.wrappers.minecraft; import java.awt.*; import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.stream.Collectors; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.systems.RenderSystem; import com.seibel.lod.common.wrappers.misc.LightMapWrapper; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.handlers.IReflectionHandler; import com.seibel.lod.core.handlers.ReflectionHandler; import com.seibel.lod.core.util.LodUtil; @@ -37,6 +40,7 @@ import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher.CompiledChunk; import net.minecraft.core.BlockPos; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.level.material.FogType; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -150,6 +154,29 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper */ //TODO: impl this properly + @Override + public HashSet getVanillaRenderedChunks() { + LevelRenderer levelRenderer = MC.levelRenderer; + LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks; + ClientApi.LOGGER.info("getVanillaRenderedChunks: "+chunks.size()); + return (chunks.stream().map((chunk) -> { + AABB chunkBoundingBox = chunk.chunk.bb; + return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16), + Math.floorDiv((int) chunkBoundingBox.minZ, 16)); + }).collect(Collectors.toCollection(HashSet::new))); + } + @Override + public HashSet getSodiumRenderedChunks() { + LevelRenderer levelRenderer = MC.levelRenderer; + LinkedHashSet chunks = levelRenderer.renderChunkStorage.get().renderChunks; + ClientApi.LOGGER.info("gettSodiumRenderedChunks: "+chunks.size()); + return (chunks.stream().map((chunk) -> { + AABB chunkBoundingBox = chunk.chunk.bb; + return FACTORY.createChunkPos(Math.floorDiv((int) chunkBoundingBox.minX, 16), + Math.floorDiv((int) chunkBoundingBox.minZ, 16)); + }).collect(Collectors.toCollection(HashSet::new))); + } + @Override public HashSet getMaximumRenderedChunks() { diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ExperimentalGenerator.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ExperimentalGenerator.java index d0ecec155..bb29f89c6 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ExperimentalGenerator.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ExperimentalGenerator.java @@ -243,8 +243,8 @@ public class ExperimentalGenerator extends AbstractExperimentalWorldGeneratorWra ClientApi.LOGGER.info("1.18 Experimental Chunk Generator shutting down..."); generationGroup.executors.shutdownNow(); try { - if (!generationGroup.executors.awaitTermination(30, TimeUnit.SECONDS)) { - ClientApi.LOGGER.warn("1.18 Experimental Chunk Generator shutdown failed! Ignoring child threads..."); + if (!generationGroup.executors.awaitTermination(10, TimeUnit.SECONDS)) { + ClientApi.LOGGER.error("1.18 Experimental Chunk Generator shutdown failed! Ignoring child threads..."); } } catch (InterruptedException e) {} } diff --git a/common/src/main/resources/lod.accesswidener b/common/src/main/resources/lod.accesswidener index 6f7989856..a8fc4a282 100644 --- a/common/src/main/resources/lod.accesswidener +++ b/common/src/main/resources/lod.accesswidener @@ -8,6 +8,12 @@ accessible field com/mojang/blaze3d/vertex/VertexBuffer indexCount I accessible field com/mojang/blaze3d/vertex/VertexBuffer vertextBufferId I accessible method net/minecraft/client/renderer/GameRenderer getFov (Lnet/minecraft/client/Camera;FZ)D +# used for grabbing vanilla rendered chunks +accessible field net/minecraft/client/renderer/LevelRenderer renderChunkStorage Ljava/util/concurrent/atomic/AtomicReference; +accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkStorage +accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo +accessible field net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo chunk Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk; + # lighting accessible field net/minecraft/client/renderer/LightTexture lightPixels Lcom/mojang/blaze3d/platform/NativeImage; accessible field net/minecraft/world/level/lighting/LevelLightEngine blockEngine Lnet/minecraft/world/level/lighting/LayerLightEngine;