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

89 lines
3.6 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.Maps;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
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.phys.AABB;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class NeighborsUpdateRenderer implements DebugRenderer.SimpleDebugRenderer {
private final Minecraft minecraft;
private final Map<Long, Map<BlockPos, Integer>> lastUpdate = Maps.newTreeMap(Ordering.natural().reverse());
NeighborsUpdateRenderer(Minecraft p_113595_) {
this.minecraft = p_113595_;
}
public void addUpdate(long p_113597_, BlockPos p_113598_) {
Map<BlockPos, Integer> map = this.lastUpdate.computeIfAbsent(p_113597_, p_113606_ -> Maps.newHashMap());
int i = map.getOrDefault(p_113598_, 0);
map.put(p_113598_, i + 1);
}
@Override
public void render(PoseStack p_113600_, MultiBufferSource p_113601_, double p_113602_, double p_113603_, double p_113604_) {
long i = this.minecraft.level.getGameTime();
int j = 200;
double d0 = 0.0025;
Set<BlockPos> set = Sets.newHashSet();
Map<BlockPos, Integer> map = Maps.newHashMap();
VertexConsumer vertexconsumer = p_113601_.getBuffer(RenderType.lines());
Iterator<Entry<Long, Map<BlockPos, Integer>>> iterator = this.lastUpdate.entrySet().iterator();
while (iterator.hasNext()) {
Entry<Long, Map<BlockPos, Integer>> entry = iterator.next();
Long olong = entry.getKey();
Map<BlockPos, Integer> map1 = entry.getValue();
long k = i - olong;
if (k > 200L) {
iterator.remove();
} else {
for (Entry<BlockPos, Integer> entry1 : map1.entrySet()) {
BlockPos blockpos = entry1.getKey();
Integer integer = entry1.getValue();
if (set.add(blockpos)) {
AABB aabb = new AABB(BlockPos.ZERO)
.inflate(0.002)
.deflate(0.0025 * k)
.move(blockpos.getX(), blockpos.getY(), blockpos.getZ())
.move(-p_113602_, -p_113603_, -p_113604_);
ShapeRenderer.renderLineBox(
p_113600_,
vertexconsumer,
aabb.minX,
aabb.minY,
aabb.minZ,
aabb.maxX,
aabb.maxY,
aabb.maxZ,
1.0F,
1.0F,
1.0F,
1.0F
);
map.put(blockpos, integer);
}
}
}
}
for (Entry<BlockPos, Integer> entry2 : map.entrySet()) {
BlockPos blockpos1 = entry2.getKey();
Integer integer1 = entry2.getValue();
DebugRenderer.renderFloatingText(p_113600_, p_113601_, String.valueOf(integer1), blockpos1.getX(), blockpos1.getY(), blockpos1.getZ(), -1);
}
}
}