minecraft-src/net/minecraft/client/renderer/debug/CollisionBoxRenderer.java
2025-07-04 02:00:41 +03:00

42 lines
1.6 KiB
Java

package net.minecraft.client.renderer.debug;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import java.util.Collections;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.shapes.VoxelShape;
@Environment(EnvType.CLIENT)
public class CollisionBoxRenderer implements DebugRenderer.SimpleDebugRenderer {
private final Minecraft minecraft;
private double lastUpdateTime = Double.MIN_VALUE;
private List<VoxelShape> shapes = Collections.emptyList();
public CollisionBoxRenderer(Minecraft minecraft) {
this.minecraft = minecraft;
}
@Override
public void render(PoseStack poseStack, MultiBufferSource bufferSource, double camX, double camY, double camZ) {
double d = Util.getNanos();
if (d - this.lastUpdateTime > 1.0E8) {
this.lastUpdateTime = d;
Entity entity = this.minecraft.gameRenderer.getMainCamera().getEntity();
this.shapes = ImmutableList.copyOf(entity.level().getCollisions(entity, entity.getBoundingBox().inflate(6.0)));
}
VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.lines());
for (VoxelShape voxelShape : this.shapes) {
DebugRenderer.renderVoxelShape(poseStack, vertexConsumer, voxelShape, -camX, -camY, -camZ, 1.0F, 1.0F, 1.0F, 1.0F, true);
}
}
}