72 lines
2.9 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|