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();
}
});
}
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SectionPos.posToSectionCoord(), SectionPos.sectionToBlockCoord()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Gizmos.billboardText()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TextGizmo.Style.whiteAndCentered()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getNanos()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ChunkPos()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
Vec3()
- 引用位置: