BrainDebugRenderer.java

net.minecraft.client.renderer.debug.BrainDebugRenderer

信息

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

    TODO

字段/常量

  • SHOW_NAME_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L25
    • 说明:

      TODO

  • SHOW_PROFESSION_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L26
    • 说明:

      TODO

  • SHOW_BEHAVIORS_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L27
    • 说明:

      TODO

  • SHOW_ACTIVITIES_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L28
    • 说明:

      TODO

  • SHOW_INVENTORY_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L29
    • 说明:

      TODO

  • SHOW_GOSSIPS_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • SHOW_HEALTH_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L31
    • 说明:

      TODO

  • SHOW_WANTS_GOLEM_FOR_ALL

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

      TODO

  • SHOW_ANGER_LEVEL_FOR_ALL

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L33
    • 说明:

      TODO

  • SHOW_NAME_FOR_SELECTED

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

      TODO

  • SHOW_PROFESSION_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L35
    • 说明:

      TODO

  • SHOW_BEHAVIORS_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L36
    • 说明:

      TODO

  • SHOW_ACTIVITIES_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L37
    • 说明:

      TODO

  • SHOW_MEMORIES_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L38
    • 说明:

      TODO

  • SHOW_INVENTORY_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L39
    • 说明:

      TODO

  • SHOW_GOSSIPS_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L40
    • 说明:

      TODO

  • SHOW_HEALTH_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L41
    • 说明:

      TODO

  • SHOW_WANTS_GOLEM_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L42
    • 说明:

      TODO

  • SHOW_ANGER_LEVEL_FOR_SELECTED

    • 类型: boolean
    • 修饰符: private static final
    • 源码定位: L43
    • 说明:

      TODO

  • MAX_RENDER_DIST_FOR_BRAIN_INFO

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

      TODO

  • MAX_TARGETING_DIST

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

      TODO

  • TEXT_SCALE

    • 类型: float
    • 修饰符: private static final
    • 源码定位: L46
    • 说明:

      TODO

  • CYAN

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

      TODO

  • GRAY

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

      TODO

  • PINK

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

      TODO

  • ORANGE

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

      TODO

  • minecraft

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

      TODO

  • lastLookedAtUuid

    • 类型: UUID
    • 修饰符: private
    • 源码定位: L52
    • 说明:

      TODO

内部类/嵌套类型

构造器

public BrainDebugRenderer(Minecraft minecraft) @ L54

  • 构造器名:BrainDebugRenderer
  • 源码定位:L54
  • 修饰符:public

参数:

  • minecraft: Minecraft

说明:

TODO

方法

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

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

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

参数:

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

说明:

TODO

private void doRender(DebugValueAccess debugValues) @ L66

  • 方法名:doRender
  • 源码定位:L66
  • 返回类型:void
  • 修饰符:private

参数:

  • debugValues: DebugValueAccess

说明:

TODO

private void renderBrainInfo(Entity entity, DebugBrainDump brainDump) @ L74

  • 方法名:renderBrainInfo
  • 源码定位:L74
  • 返回类型:void
  • 修饰符:private

参数:

  • entity: Entity
  • brainDump: DebugBrainDump

说明:

TODO

private boolean isMobSelected(Entity entity) @ L145

  • 方法名:isMobSelected
  • 源码定位:L145
  • 返回类型:boolean
  • 修饰符:private

参数:

  • entity: Entity

说明:

TODO

public Map<BlockPos,List<String>> getGhostPois(DebugValueAccess debugValues) @ L149

  • 方法名:getGhostPois
  • 源码定位:L149
  • 返回类型:Map<BlockPos,List>
  • 修饰符:public

参数:

  • debugValues: DebugValueAccess

说明:

TODO

private void updateLastLookedAtUuid() @ L159

  • 方法名:updateLastLookedAtUuid
  • 源码定位:L159
  • 返回类型:void
  • 修饰符:private

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class BrainDebugRenderer implements DebugRenderer.SimpleDebugRenderer {
    private static final boolean SHOW_NAME_FOR_ALL = true;
    private static final boolean SHOW_PROFESSION_FOR_ALL = false;
    private static final boolean SHOW_BEHAVIORS_FOR_ALL = false;
    private static final boolean SHOW_ACTIVITIES_FOR_ALL = false;
    private static final boolean SHOW_INVENTORY_FOR_ALL = false;
    private static final boolean SHOW_GOSSIPS_FOR_ALL = false;
    private static final boolean SHOW_HEALTH_FOR_ALL = false;
    private static final boolean SHOW_WANTS_GOLEM_FOR_ALL = true;
    private static final boolean SHOW_ANGER_LEVEL_FOR_ALL = false;
    private static final boolean SHOW_NAME_FOR_SELECTED = true;
    private static final boolean SHOW_PROFESSION_FOR_SELECTED = true;
    private static final boolean SHOW_BEHAVIORS_FOR_SELECTED = true;
    private static final boolean SHOW_ACTIVITIES_FOR_SELECTED = true;
    private static final boolean SHOW_MEMORIES_FOR_SELECTED = true;
    private static final boolean SHOW_INVENTORY_FOR_SELECTED = true;
    private static final boolean SHOW_GOSSIPS_FOR_SELECTED = true;
    private static final boolean SHOW_HEALTH_FOR_SELECTED = true;
    private static final boolean SHOW_WANTS_GOLEM_FOR_SELECTED = true;
    private static final boolean SHOW_ANGER_LEVEL_FOR_SELECTED = true;
    private static final int MAX_RENDER_DIST_FOR_BRAIN_INFO = 30;
    private static final int MAX_TARGETING_DIST = 8;
    private static final float TEXT_SCALE = 0.32F;
    private static final int CYAN = -16711681;
    private static final int GRAY = -3355444;
    private static final int PINK = -98404;
    private static final int ORANGE = -23296;
    private final Minecraft minecraft;
    private @Nullable UUID lastLookedAtUuid;
 
    public BrainDebugRenderer(Minecraft minecraft) {
        this.minecraft = minecraft;
    }
 
    @Override
    public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) {
        this.doRender(debugValues);
        if (!this.minecraft.player.isSpectator()) {
            this.updateLastLookedAtUuid();
        }
    }
 
    private void doRender(DebugValueAccess debugValues) {
        debugValues.forEachEntity(DebugSubscriptions.BRAINS, (entity, brainDump) -> {
            if (this.minecraft.player.closerThan(entity, 30.0)) {
                this.renderBrainInfo(entity, brainDump);
            }
        });
    }
 
    private void renderBrainInfo(Entity entity, DebugBrainDump brainDump) {
        boolean selected = this.isMobSelected(entity);
        int row = 0;
        Gizmos.billboardTextOverMob(entity, row, brainDump.name(), -1, 0.48F);
        row++;
        if (selected) {
            Gizmos.billboardTextOverMob(entity, row, brainDump.profession() + " " + brainDump.xp() + " xp", -1, 0.32F);
            row++;
        }
 
        if (selected) {
            int color = brainDump.health() < brainDump.maxHealth() ? -23296 : -1;
            Gizmos.billboardTextOverMob(
                entity,
                row,
                "health: " + String.format(Locale.ROOT, "%.1f", brainDump.health()) + " / " + String.format(Locale.ROOT, "%.1f", brainDump.maxHealth()),
                color,
                0.32F
            );
            row++;
        }
 
        if (selected && !brainDump.inventory().equals("")) {
            Gizmos.billboardTextOverMob(entity, row, brainDump.inventory(), -98404, 0.32F);
            row++;
        }
 
        if (selected) {
            for (String goal : brainDump.behaviors()) {
                Gizmos.billboardTextOverMob(entity, row, goal, -16711681, 0.32F);
                row++;
            }
        }
 
        if (selected) {
            for (String activity : brainDump.activities()) {
                Gizmos.billboardTextOverMob(entity, row, activity, -16711936, 0.32F);
                row++;
            }
        }
 
        if (brainDump.wantsGolem()) {
            Gizmos.billboardTextOverMob(entity, row, "Wants Golem", -23296, 0.32F);
            row++;
        }
 
        if (selected && brainDump.angerLevel() != -1) {
            Gizmos.billboardTextOverMob(entity, row, "Anger Level: " + brainDump.angerLevel(), -98404, 0.32F);
            row++;
        }
 
        if (selected) {
            for (String gossip : brainDump.gossips()) {
                if (gossip.startsWith(brainDump.name())) {
                    Gizmos.billboardTextOverMob(entity, row, gossip, -1, 0.32F);
                } else {
                    Gizmos.billboardTextOverMob(entity, row, gossip, -23296, 0.32F);
                }
 
                row++;
            }
        }
 
        if (selected) {
            for (String memory : Lists.reverse(brainDump.memories())) {
                Gizmos.billboardTextOverMob(entity, row, memory, -3355444, 0.32F);
                row++;
            }
        }
    }
 
    private boolean isMobSelected(Entity entity) {
        return Objects.equals(this.lastLookedAtUuid, entity.getUUID());
    }
 
    public Map<BlockPos, List<String>> getGhostPois(DebugValueAccess debugValues) {
        Map<BlockPos, List<String>> ghostPois = Maps.newHashMap();
        debugValues.forEachEntity(DebugSubscriptions.BRAINS, (entity, brainDump) -> {
            for (BlockPos poiPos : Iterables.concat(brainDump.pois(), brainDump.potentialPois())) {
                ghostPois.computeIfAbsent(poiPos, k -> Lists.newArrayList()).add(brainDump.name());
            }
        });
        return ghostPois;
    }
 
    private void updateLastLookedAtUuid() {
        DebugRenderer.getTargetedEntity(this.minecraft.getCameraEntity(), 8).ifPresent(entity -> this.lastLookedAtUuid = entity.getUUID());
    }
}

引用的其他类