ChunkDebugRenderer.java

net.minecraft.client.renderer.debug.ChunkDebugRenderer

信息

  • 全限定名:net.minecraft.client.renderer.debug.ChunkDebugRenderer
  • 类型:public class
  • 包:net.minecraft.client.renderer.debug
  • 源码路径:src/main/java/net/minecraft/client/renderer/debug/ChunkDebugRenderer.java
  • 起始行号:L31
  • 实现:DebugRenderer.SimpleDebugRenderer
  • 职责:

    TODO

字段/常量

  • minecraft

    • 类型: Minecraft
    • 修饰符: private final
    • 源码定位: L32
    • 说明:

      TODO

  • lastUpdateTime

    • 类型: double
    • 修饰符: private
    • 源码定位: L33
    • 说明:

      TODO

  • radius

    • 类型: int
    • 修饰符: private final
    • 源码定位: L34
    • 说明:

      TODO

  • data

    • 类型: ChunkDebugRenderer.ChunkData
    • 修饰符: private
    • 源码定位: L35
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.renderer.debug.ChunkDebugRenderer.ChunkData
    • 类型: class
    • 修饰符: private final
    • 源码定位: L82
    • 说明:

      TODO

构造器

public ChunkDebugRenderer(Minecraft minecraft) @ L37

  • 构造器名:ChunkDebugRenderer
  • 源码定位:L37
  • 修饰符:public

参数:

  • minecraft: Minecraft

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) @ L41

  • 方法名:emitGizmos
  • 源码定位:L41
  • 返回类型:void
  • 修饰符:public

参数:

  • camX: double
  • camY: double
  • camZ: double
  • debugValues: DebugValueAccess
  • frustum: Frustum
  • partialTicks: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ChunkDebugRenderer implements DebugRenderer.SimpleDebugRenderer {
    private final Minecraft minecraft;
    private double lastUpdateTime = Double.MIN_VALUE;
    private final int radius = 12;
    private ChunkDebugRenderer.@Nullable ChunkData data;
 
    public ChunkDebugRenderer(Minecraft minecraft) {
        this.minecraft = minecraft;
    }
 
    @Override
    public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) {
        double time = Util.getNanos();
        if (time - this.lastUpdateTime > 3.0E9) {
            this.lastUpdateTime = time;
            IntegratedServer server = this.minecraft.getSingleplayerServer();
            if (server != null) {
                this.data = new ChunkDebugRenderer.ChunkData(server, camX, camZ);
            } else {
                this.data = null;
            }
        }
 
        if (this.data != null) {
            Map<ChunkPos, String> serverData = this.data.serverData.getNow(null);
            double y = this.minecraft.gameRenderer.getMainCamera().position().y * 0.85;
 
            for (Entry<ChunkPos, String> entry : this.data.clientData.entrySet()) {
                ChunkPos pos = entry.getKey();
                String value = entry.getValue();
                if (serverData != null) {
                    value = value + serverData.get(pos);
                }
 
                String[] parts = value.split("\n");
                int yOffset = 0;
 
                for (String part : parts) {
                    Gizmos.billboardText(
                            part,
                            new Vec3(SectionPos.sectionToBlockCoord(pos.x(), 8), y + yOffset, SectionPos.sectionToBlockCoord(pos.z(), 8)),
                            TextGizmo.Style.whiteAndCentered().withScale(2.4F)
                        )
                        .setAlwaysOnTop();
                    yOffset -= 2;
                }
            }
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    private final class ChunkData {
        private final Map<ChunkPos, String> clientData;
        private final CompletableFuture<Map<ChunkPos, String>> serverData;
 
        private ChunkData(IntegratedServer server, double camX, double camZ) {
            Objects.requireNonNull(ChunkDebugRenderer.this);
            super();
            ClientLevel clientLevel = ChunkDebugRenderer.this.minecraft.level;
            ResourceKey<Level> dimension = clientLevel.dimension();
            int cx = SectionPos.posToSectionCoord(camX);
            int cz = SectionPos.posToSectionCoord(camZ);
            Builder<ChunkPos, String> builder = ImmutableMap.builder();
            ClientChunkCache clientChunkSource = clientLevel.getChunkSource();
 
            for (int x = cx - 12; x <= cx + 12; x++) {
                for (int z = cz - 12; z <= cz + 12; z++) {
                    ChunkPos pos = new ChunkPos(x, z);
                    String result = "";
                    LevelChunk clientChunk = clientChunkSource.getChunk(x, z, false);
                    result = result + "Client: ";
                    if (clientChunk == null) {
                        result = result + "0n/a\n";
                    } else {
                        result = result + (clientChunk.isEmpty() ? " E" : "");
                        result = result + "\n";
                    }
 
                    builder.put(pos, result);
                }
            }
 
            this.clientData = builder.build();
            this.serverData = server.submit(() -> {
                ServerLevel serverLevel = server.getLevel(dimension);
                if (serverLevel == null) {
                    return ImmutableMap.of();
                } else {
                    Builder<ChunkPos, String> serverBuilder = ImmutableMap.builder();
                    ServerChunkCache serverChunkSource = serverLevel.getChunkSource();
 
                    for (int xx = cx - 12; xx <= cx + 12; xx++) {
                        for (int zx = cz - 12; zx <= cz + 12; zx++) {
                            ChunkPos posx = new ChunkPos(xx, zx);
                            serverBuilder.put(posx, "Server: " + serverChunkSource.getChunkDebugData(posx));
                        }
                    }
 
                    return serverBuilder.build();
                }
            });
        }
    }
}

引用的其他类

  • Minecraft

    • 引用位置: 参数/字段
  • Frustum

    • 引用位置: 参数
  • DebugRenderer

    • 引用位置: 实现
  • SectionPos

    • 引用位置: 方法调用
    • 关联成员: SectionPos.posToSectionCoord(), SectionPos.sectionToBlockCoord()
  • Gizmos

    • 引用位置: 方法调用
    • 关联成员: Gizmos.billboardText()
  • TextGizmo

    • 引用位置: 方法调用
    • 关联成员: TextGizmo.Style.whiteAndCentered()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.getNanos()
  • DebugValueAccess

    • 引用位置: 参数
  • ChunkPos

    • 引用位置: 构造调用
    • 关联成员: ChunkPos()
  • Vec3

    • 引用位置: 构造调用
    • 关联成员: Vec3()