Impl a getVanillaRenderedChunk

This commit is contained in:
tom lee
2022-01-08 15:02:43 +08:00
parent f9f9f98750
commit fa2702209c
3 changed files with 35 additions and 2 deletions
@@ -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<AbstractChunkPosWrapper> getVanillaRenderedChunks() {
LevelRenderer levelRenderer = MC.levelRenderer;
LinkedHashSet<LevelRenderer.RenderChunkInfo> 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<AbstractChunkPosWrapper> getSodiumRenderedChunks() {
LevelRenderer levelRenderer = MC.levelRenderer;
LinkedHashSet<LevelRenderer.RenderChunkInfo> 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<AbstractChunkPosWrapper> getMaximumRenderedChunks() {
@@ -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) {}
}
@@ -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;