74 lines
2.4 KiB
Java
74 lines
2.4 KiB
Java
package net.minecraft.client.renderer.debug;
|
|
|
|
import com.google.common.collect.Maps;
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import java.util.Map;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.Util;
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
|
import net.minecraft.core.BlockPos;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class GameTestDebugRenderer implements DebugRenderer.SimpleDebugRenderer {
|
|
private static final float PADDING = 0.02F;
|
|
private final Map<BlockPos, GameTestDebugRenderer.Marker> markers = Maps.<BlockPos, GameTestDebugRenderer.Marker>newHashMap();
|
|
|
|
/**
|
|
* @param removeAfter how long after the current time to remove this marker, in milliseconds
|
|
*/
|
|
public void addMarker(BlockPos pos, int color, String text, int removeAfter) {
|
|
this.markers.put(pos, new GameTestDebugRenderer.Marker(color, text, Util.getMillis() + removeAfter));
|
|
}
|
|
|
|
@Override
|
|
public void clear() {
|
|
this.markers.clear();
|
|
}
|
|
|
|
@Override
|
|
public void render(PoseStack poseStack, MultiBufferSource bufferSource, double camX, double camY, double camZ) {
|
|
long l = Util.getMillis();
|
|
this.markers.entrySet().removeIf(entry -> l > ((GameTestDebugRenderer.Marker)entry.getValue()).removeAtTime);
|
|
this.markers.forEach((blockPos, marker) -> this.renderMarker(poseStack, bufferSource, blockPos, marker));
|
|
}
|
|
|
|
private void renderMarker(PoseStack poseStack, MultiBufferSource buffer, BlockPos pos, GameTestDebugRenderer.Marker marker) {
|
|
DebugRenderer.renderFilledBox(poseStack, buffer, pos, 0.02F, marker.getR(), marker.getG(), marker.getB(), marker.getA() * 0.75F);
|
|
if (!marker.text.isEmpty()) {
|
|
double d = pos.getX() + 0.5;
|
|
double e = pos.getY() + 1.2;
|
|
double f = pos.getZ() + 0.5;
|
|
DebugRenderer.renderFloatingText(poseStack, buffer, marker.text, d, e, f, -1, 0.01F, true, 0.0F, true);
|
|
}
|
|
}
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
static class Marker {
|
|
public int color;
|
|
public String text;
|
|
public long removeAtTime;
|
|
|
|
public Marker(int color, String text, long removeAtTime) {
|
|
this.color = color;
|
|
this.text = text;
|
|
this.removeAtTime = removeAtTime;
|
|
}
|
|
|
|
public float getR() {
|
|
return (this.color >> 16 & 0xFF) / 255.0F;
|
|
}
|
|
|
|
public float getG() {
|
|
return (this.color >> 8 & 0xFF) / 255.0F;
|
|
}
|
|
|
|
public float getB() {
|
|
return (this.color & 0xFF) / 255.0F;
|
|
}
|
|
|
|
public float getA() {
|
|
return (this.color >> 24 & 0xFF) / 255.0F;
|
|
}
|
|
}
|
|
}
|