mirror of
https://github.com/XevianLight/Aphelion.git
synced 2026-05-11 01:50:56 +01:00
67 lines
2.6 KiB
Java
67 lines
2.6 KiB
Java
package net.xevianlight.aphelion.client;
|
|
|
|
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
|
import net.minecraft.client.renderer.RenderStateShard;
|
|
import net.minecraft.client.renderer.RenderType;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.neoforged.api.distmarker.Dist;
|
|
import net.neoforged.bus.api.SubscribeEvent;
|
|
import net.neoforged.fml.common.EventBusSubscriber;
|
|
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
|
|
import net.xevianlight.aphelion.Aphelion;
|
|
import org.joml.Matrix4f;
|
|
|
|
import java.util.Collection;
|
|
|
|
@EventBusSubscriber(modid = Aphelion.MOD_ID, value = Dist.CLIENT)
|
|
public final class OxygenDebugRender {
|
|
|
|
// Untextured translucent quads (POSITION_COLOR only)
|
|
private static final RenderType OXYGEN_FILL = RenderType.create(
|
|
"aphelion_oxygen_fill",
|
|
DefaultVertexFormat.POSITION_COLOR,
|
|
VertexFormat.Mode.QUADS,
|
|
256,
|
|
false,
|
|
true,
|
|
RenderType.CompositeState.builder()
|
|
.setShaderState(RenderStateShard.POSITION_COLOR_SHADER)
|
|
.setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY)
|
|
.setCullState(RenderStateShard.NO_CULL)
|
|
.setDepthTestState(RenderStateShard.LEQUAL_DEPTH_TEST)
|
|
.setWriteMaskState(RenderStateShard.COLOR_DEPTH_WRITE)
|
|
.createCompositeState(true)
|
|
);
|
|
|
|
@SubscribeEvent
|
|
public static void onRenderLevel(RenderLevelStageEvent event) {
|
|
// One stage only (pick one that exists and looks good)
|
|
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) return;
|
|
|
|
Minecraft mc = Minecraft.getInstance();
|
|
if (mc.level == null || mc.player == null) return;
|
|
if (!mc.gui.getDebugOverlay().showDebugScreen()) return;
|
|
|
|
PoseStack poseStack = event.getPoseStack();
|
|
var cam = mc.gameRenderer.getMainCamera();
|
|
var camPos = cam.getPosition();
|
|
|
|
poseStack.pushPose();
|
|
poseStack.translate(-camPos.x, -camPos.y, -camPos.z);
|
|
|
|
MultiBufferSource.BufferSource bufferSource = mc.renderBuffers().bufferSource();
|
|
VertexConsumer vc = bufferSource.getBuffer(OXYGEN_FILL);
|
|
|
|
DebugRenderUtils.drawBlockArea(poseStack, vc, ClientOxygenCache.OXYGEN);
|
|
|
|
poseStack.popPose();
|
|
bufferSource.endBatch(OXYGEN_FILL);
|
|
}
|
|
}
|