DebugRenderer.java

net.minecraft.client.renderer.debug.DebugRenderer

信息

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

    TODO

字段/常量

  • renderers

    • 类型: List<DebugRenderer.SimpleDebugRenderer>
    • 修饰符: private final
    • 源码定位: L25
    • 说明:

      TODO

  • lastDebugEntriesVersion

    • 类型: long
    • 修饰符: private
    • 源码定位: L26
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.renderer.debug.DebugRenderer.SimpleDebugRenderer
    • 类型: interface
    • 修饰符: public
    • 源码定位: L199
    • 说明:

      TODO

构造器

public DebugRenderer() @ L28

  • 构造器名:DebugRenderer
  • 源码定位:L28
  • 修饰符:public

参数:

说明:

TODO

方法

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

public void refreshRendererList() @ L32

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

参数:

说明:

TODO

public void emitGizmos(Frustum frustum, double camX, double camY, double camZ, float partialTicks) @ L142

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

参数:

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

说明:

TODO

public static Optional<Entity> getTargetedEntity(Entity cameraEntity, int maxTargetingRange) @ L155

  • 方法名:getTargetedEntity
  • 源码定位:L155
  • 返回类型:Optional
  • 修饰符:public static

参数:

  • cameraEntity: Entity
  • maxTargetingRange: int

说明:

TODO

private static Vec3 mixColor(float hueShift) @ L173

  • 方法名:mixColor
  • 源码定位:L173
  • 返回类型:Vec3
  • 修饰符:private static

参数:

  • hueShift: float

说明:

TODO

private static Vec3 shiftHue(float r, float g, float b, float hs) @ L189

  • 方法名:shiftHue
  • 源码定位:L189
  • 返回类型:Vec3
  • 修饰符:private static

参数:

  • r: float
  • g: float
  • b: float
  • hs: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class DebugRenderer {
    private final List<DebugRenderer.SimpleDebugRenderer> renderers = new ArrayList<>();
    private long lastDebugEntriesVersion;
 
    public DebugRenderer() {
        this.refreshRendererList();
    }
 
    public void refreshRendererList() {
        Minecraft minecraft = Minecraft.getInstance();
        this.renderers.clear();
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.CHUNK_BORDERS)) {
            this.renderers.add(new ChunkBorderRenderer(minecraft));
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.CHUNK_SECTION_OCTREE)) {
            this.renderers.add(new OctreeDebugRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_PATHFINDING) {
            this.renderers.add(new PathfindingRenderer());
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_WATER_LEVELS)) {
            this.renderers.add(new WaterDebugRenderer(minecraft));
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_HEIGHTMAP)) {
            this.renderers.add(new HeightMapRenderer(minecraft));
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_COLLISION_BOXES)) {
            this.renderers.add(new CollisionBoxRenderer(minecraft));
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_ENTITY_SUPPORTING_BLOCKS)) {
            this.renderers.add(new SupportBlockRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_NEIGHBORSUPDATE) {
            this.renderers.add(new NeighborsUpdateRenderer());
        }
 
        if (SharedConstants.DEBUG_EXPERIMENTAL_REDSTONEWIRE_UPDATE_ORDER) {
            this.renderers.add(new RedstoneWireOrientationsRenderer());
        }
 
        if (SharedConstants.DEBUG_STRUCTURES) {
            this.renderers.add(new StructureRenderer());
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_BLOCK_LIGHT_LEVELS)
            || minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_SKY_LIGHT_LEVELS)) {
            this.renderers
                .add(
                    new LightDebugRenderer(
                        minecraft,
                        minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_BLOCK_LIGHT_LEVELS),
                        minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_SKY_LIGHT_LEVELS)
                    )
                );
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_SOLID_FACES)) {
            this.renderers.add(new SolidFaceRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_VILLAGE_SECTIONS) {
            this.renderers.add(new VillageSectionsDebugRenderer());
        }
 
        if (SharedConstants.DEBUG_BRAIN) {
            this.renderers.add(new BrainDebugRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_POI) {
            this.renderers.add(new PoiDebugRenderer(new BrainDebugRenderer(minecraft)));
        }
 
        if (SharedConstants.DEBUG_BEES) {
            this.renderers.add(new BeeDebugRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_RAIDS) {
            this.renderers.add(new RaidDebugRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_GOAL_SELECTOR) {
            this.renderers.add(new GoalSelectorDebugRenderer(minecraft));
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_CHUNKS_ON_SERVER)) {
            this.renderers.add(new ChunkDebugRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_GAME_EVENT_LISTENERS) {
            this.renderers.add(new GameEventListenerRenderer());
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.VISUALIZE_SKY_LIGHT_SECTIONS)) {
            this.renderers.add(new LightSectionDebugRenderer(minecraft, LightLayer.SKY));
        }
 
        if (SharedConstants.DEBUG_BREEZE_MOB) {
            this.renderers.add(new BreezeDebugRenderer(minecraft));
        }
 
        if (SharedConstants.DEBUG_ENTITY_BLOCK_INTERSECTION) {
            this.renderers.add(new EntityBlockIntersectionDebugRenderer());
        }
 
        if (minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.ENTITY_HITBOXES)) {
            this.renderers.add(new EntityHitboxDebugRenderer(minecraft));
        }
 
        this.renderers.add(new ChunkCullingDebugRenderer(minecraft));
    }
 
    public void emitGizmos(Frustum frustum, double camX, double camY, double camZ, float partialTicks) {
        Minecraft minecraft = Minecraft.getInstance();
        DebugValueAccess debugValues = minecraft.getConnection().createDebugValueAccess();
        if (minecraft.debugEntries.getCurrentlyEnabledVersion() != this.lastDebugEntriesVersion) {
            this.lastDebugEntriesVersion = minecraft.debugEntries.getCurrentlyEnabledVersion();
            this.refreshRendererList();
        }
 
        for (DebugRenderer.SimpleDebugRenderer renderer : this.renderers) {
            renderer.emitGizmos(camX, camY, camZ, debugValues, frustum, partialTicks);
        }
    }
 
    public static Optional<Entity> getTargetedEntity(@Nullable Entity cameraEntity, int maxTargetingRange) {
        if (cameraEntity == null) {
            return Optional.empty();
        } else {
            Vec3 from = cameraEntity.getEyePosition();
            Vec3 pick = cameraEntity.getViewVector(1.0F).scale(maxTargetingRange);
            Vec3 to = from.add(pick);
            AABB box = cameraEntity.getBoundingBox().expandTowards(pick).inflate(1.0);
            int rangeSquared = maxTargetingRange * maxTargetingRange;
            EntityHitResult hitResult = ProjectileUtil.getEntityHitResult(cameraEntity, from, to, box, EntitySelector.CAN_BE_PICKED, rangeSquared);
            if (hitResult == null) {
                return Optional.empty();
            } else {
                return from.distanceToSqr(hitResult.getLocation()) > rangeSquared ? Optional.empty() : Optional.of(hitResult.getEntity());
            }
        }
    }
 
    private static Vec3 mixColor(float hueShift) {
        float regions = 5.99999F;
        int region = (int)(Mth.clamp(hueShift, 0.0F, 1.0F) * 5.99999F);
        float progress = hueShift * 5.99999F - region;
 
        return switch (region) {
            case 0 -> new Vec3(1.0, progress, 0.0);
            case 1 -> new Vec3(1.0F - progress, 1.0, 0.0);
            case 2 -> new Vec3(0.0, 1.0, progress);
            case 3 -> new Vec3(0.0, 1.0 - progress, 1.0);
            case 4 -> new Vec3(progress, 0.0, 1.0);
            case 5 -> new Vec3(1.0, 0.0, 1.0 - progress);
            default -> throw new IllegalStateException("Unexpected value: " + region);
        };
    }
 
    private static Vec3 shiftHue(float r, float g, float b, float hs) {
        Vec3 rshifted = mixColor(hs).scale(r);
        Vec3 gshifted = mixColor((hs + 0.33333334F) % 1.0F).scale(g);
        Vec3 bshifted = mixColor((hs + 0.6666667F) % 1.0F).scale(b);
        Vec3 combined = rshifted.add(gshifted).add(bshifted);
        double max = Math.max(Math.max(1.0, combined.x), Math.max(combined.y, combined.z));
        return new Vec3(combined.x / max, combined.y / max, combined.z / max);
    }
 
    @OnlyIn(Dist.CLIENT)
    public interface SimpleDebugRenderer {
        void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, final Frustum frustum, final float partialTicks);
    }
}

引用的其他类