Code/net/minecraft/client/renderer/debug/SupportBlockRenderer.java

111 lines
4.4 KiB
Java
Raw Permalink Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.client.renderer.debug;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.vertex.PoseStack;
import java.util.Collections;
import java.util.List;
import java.util.function.DoubleSupplier;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.ShapeRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class SupportBlockRenderer implements DebugRenderer.SimpleDebugRenderer {
private final Minecraft minecraft;
private double lastUpdateTime = Double.MIN_VALUE;
private List<Entity> surroundEntities = Collections.emptyList();
public SupportBlockRenderer(Minecraft p_286424_) {
this.minecraft = p_286424_;
}
@Override
public void render(PoseStack p_286297_, MultiBufferSource p_286436_, double p_286291_, double p_286388_, double p_286330_) {
double d0 = Util.getNanos();
if (d0 - this.lastUpdateTime > 1.0E8) {
this.lastUpdateTime = d0;
Entity entity = this.minecraft.gameRenderer.getMainCamera().getEntity();
this.surroundEntities = ImmutableList.copyOf(entity.level().getEntities(entity, entity.getBoundingBox().inflate(16.0)));
}
Player player = this.minecraft.player;
if (player != null && player.mainSupportingBlockPos.isPresent()) {
this.drawHighlights(p_286297_, p_286436_, p_286291_, p_286388_, p_286330_, player, () -> 0.0, 1.0F, 0.0F, 0.0F);
}
for (Entity entity1 : this.surroundEntities) {
if (entity1 != player) {
this.drawHighlights(p_286297_, p_286436_, p_286291_, p_286388_, p_286330_, entity1, () -> this.getBias(entity1), 0.0F, 1.0F, 0.0F);
}
}
}
private void drawHighlights(
PoseStack p_286525_,
MultiBufferSource p_286495_,
double p_286696_,
double p_286417_,
double p_286386_,
Entity p_286273_,
DoubleSupplier p_286458_,
float p_286487_,
float p_286710_,
float p_286793_
) {
p_286273_.mainSupportingBlockPos.ifPresent(p_286428_ -> {
double d0 = p_286458_.getAsDouble();
BlockPos blockpos = p_286273_.getOnPos();
this.highlightPosition(blockpos, p_286525_, p_286696_, p_286417_, p_286386_, p_286495_, 0.02 + d0, p_286487_, p_286710_, p_286793_);
BlockPos blockpos1 = p_286273_.getOnPosLegacy();
if (!blockpos1.equals(blockpos)) {
this.highlightPosition(blockpos1, p_286525_, p_286696_, p_286417_, p_286386_, p_286495_, 0.04 + d0, 0.0F, 1.0F, 1.0F);
}
});
}
private double getBias(Entity p_286713_) {
return 0.02 * (String.valueOf(p_286713_.getId() + 0.132453657).hashCode() % 1000) / 1000.0;
}
private void highlightPosition(
BlockPos p_286268_,
PoseStack p_286592_,
double p_286463_,
double p_286552_,
double p_286660_,
MultiBufferSource p_286314_,
double p_286880_,
float p_286918_,
float p_286304_,
float p_286672_
) {
double d0 = p_286268_.getX() - p_286463_ - 2.0 * p_286880_;
double d1 = p_286268_.getY() - p_286552_ - 2.0 * p_286880_;
double d2 = p_286268_.getZ() - p_286660_ - 2.0 * p_286880_;
double d3 = d0 + 1.0 + 4.0 * p_286880_;
double d4 = d1 + 1.0 + 4.0 * p_286880_;
double d5 = d2 + 1.0 + 4.0 * p_286880_;
ShapeRenderer.renderLineBox(p_286592_, p_286314_.getBuffer(RenderType.lines()), d0, d1, d2, d3, d4, d5, p_286918_, p_286304_, p_286672_, 0.4F);
DebugRenderer.renderVoxelShape(
p_286592_,
p_286314_.getBuffer(RenderType.lines()),
this.minecraft.level.getBlockState(p_286268_).getCollisionShape(this.minecraft.level, p_286268_, CollisionContext.empty()).move(p_286268_),
-p_286463_,
-p_286552_,
-p_286660_,
p_286918_,
p_286304_,
p_286672_,
1.0F,
false
);
}
}