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

72 lines
2.9 KiB
Java

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.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
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;
@Environment(EnvType.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 minecraft) {
this.minecraft = minecraft;
}
public void addUpdate(long gameTime, BlockPos pos) {
Map<BlockPos, Integer> map = (Map<BlockPos, Integer>)this.lastUpdate.computeIfAbsent(gameTime, long_ -> Maps.newHashMap());
int i = (Integer)map.getOrDefault(pos, 0);
map.put(pos, i + 1);
}
@Override
public void render(PoseStack poseStack, MultiBufferSource bufferSource, double camX, double camY, double camZ) {
long l = this.minecraft.level.getGameTime();
int i = 200;
double d = 0.0025;
Set<BlockPos> set = Sets.<BlockPos>newHashSet();
Map<BlockPos, Integer> map = Maps.<BlockPos, Integer>newHashMap();
VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.lines());
Iterator<Entry<Long, Map<BlockPos, Integer>>> iterator = this.lastUpdate.entrySet().iterator();
while (iterator.hasNext()) {
Entry<Long, Map<BlockPos, Integer>> entry = (Entry<Long, Map<BlockPos, Integer>>)iterator.next();
Long long_ = (Long)entry.getKey();
Map<BlockPos, Integer> map2 = (Map<BlockPos, Integer>)entry.getValue();
long m = l - long_;
if (m > 200L) {
iterator.remove();
} else {
for (Entry<BlockPos, Integer> entry2 : map2.entrySet()) {
BlockPos blockPos = (BlockPos)entry2.getKey();
Integer integer = (Integer)entry2.getValue();
if (set.add(blockPos)) {
AABB aABB = new AABB(BlockPos.ZERO).inflate(0.002).deflate(0.0025 * m).move(blockPos.getX(), blockPos.getY(), blockPos.getZ()).move(-camX, -camY, -camZ);
ShapeRenderer.renderLineBox(poseStack, 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> entry : map.entrySet()) {
BlockPos blockPos2 = (BlockPos)entry.getKey();
Integer integer2 = (Integer)entry.getValue();
DebugRenderer.renderFloatingText(poseStack, bufferSource, String.valueOf(integer2), blockPos2.getX(), blockPos2.getY(), blockPos2.getZ(), -1);
}
}
}