RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/client/other/OreFinderRenderer.java
branch: 1.21
back to repo
package rearth.oritech.client.other;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.BlockPos;

import java.util.List;

import static net.minecraft.client.render.RenderPhase.*;

@SuppressWarnings("DataFlowIssue")
public class OreFinderRenderer {
    
    public static List<BlockPos> renderedBlocks;
    public static long receivedAt;
    
    private static final RenderLayer OVERLAY = RenderLayer.of("testoverlay", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 786432, true, false, RenderLayer.MultiPhaseParameters.builder().lightmap(ENABLE_LIGHTMAP).program(SOLID_PROGRAM).texture(BLOCK_ATLAS_TEXTURE).depthTest(ALWAYS_DEPTH_TEST).target(OUTLINE_TARGET).cull(ENABLE_CULLING).build(false));
    
    public static void doRender(MatrixStack matrices, Camera camera, VertexConsumerProvider vertexConsumers) {
        var world = MinecraftClient.getInstance().world;
        if (world == null || renderedBlocks == null) return;
        var age = world.getTime() - receivedAt;
        
        if (age > 40) return;
        
        for (var pos : renderedBlocks) {
            var state = world.getBlockState(pos);
            
            matrices.push();
            //Offset by the camera position so that the render is relative to the camera
            matrices.translate(pos.getX() - camera.getPos().x, pos.getY() - camera.getPos().y, pos.getZ() - camera.getPos().z);
            
            var renderer = MinecraftClient.getInstance().getBlockRenderManager().getModelRenderer();
            var vertexProvider = vertexConsumers.getBuffer(OVERLAY);
            
            renderer.renderFlat(world, MinecraftClient.getInstance().getBlockRenderManager().getModel(state), state, pos, matrices, vertexProvider, false, world.random, 0, LightmapTextureManager.MAX_LIGHT_COORDINATE);
            
            matrices.pop();
        }
    }
}