LocatorBarRenderer.java

net.minecraft.client.gui.contextualbar.LocatorBarRenderer

信息

  • 全限定名:net.minecraft.client.gui.contextualbar.LocatorBarRenderer
  • 类型:public class
  • 包:net.minecraft.client.gui.contextualbar
  • 源码路径:src/main/java/net/minecraft/client/gui/contextualbar/LocatorBarRenderer.java
  • 起始行号:L21
  • 实现:ContextualBarRenderer
  • 职责:

    TODO

字段/常量

  • LOCATOR_BAR_BACKGROUND

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

      TODO

  • LOCATOR_BAR_ARROW_UP

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

      TODO

  • LOCATOR_BAR_ARROW_DOWN

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

      TODO

  • DOT_SIZE

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

      TODO

  • VISIBLE_DEGREE_RANGE

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

      TODO

  • ARROW_WIDTH

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

      TODO

  • ARROW_HEIGHT

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

      TODO

  • ARROW_LEFT

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

      TODO

  • ARROW_PADDING

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

      TODO

  • minecraft

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

      TODO

内部类/嵌套类型

构造器

public LocatorBarRenderer(Minecraft minecraft) @ L33

  • 构造器名:LocatorBarRenderer
  • 源码定位:L33
  • 修饰符:public

参数:

  • minecraft: Minecraft

说明:

TODO

方法

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

public void extractBackground(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) @ L37

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

参数:

  • graphics: GuiGraphicsExtractor
  • deltaTracker: DeltaTracker

说明:

TODO

public void extractRenderState(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) @ L44

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

参数:

  • graphics: GuiGraphicsExtractor
  • deltaTracker: DeltaTracker

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LocatorBarRenderer implements ContextualBarRenderer {
    private static final Identifier LOCATOR_BAR_BACKGROUND = Identifier.withDefaultNamespace("hud/locator_bar_background");
    private static final Identifier LOCATOR_BAR_ARROW_UP = Identifier.withDefaultNamespace("hud/locator_bar_arrow_up");
    private static final Identifier LOCATOR_BAR_ARROW_DOWN = Identifier.withDefaultNamespace("hud/locator_bar_arrow_down");
    private static final int DOT_SIZE = 9;
    private static final int VISIBLE_DEGREE_RANGE = 60;
    private static final int ARROW_WIDTH = 7;
    private static final int ARROW_HEIGHT = 5;
    private static final int ARROW_LEFT = 1;
    private static final int ARROW_PADDING = 1;
    private final Minecraft minecraft;
 
    public LocatorBarRenderer(Minecraft minecraft) {
        this.minecraft = minecraft;
    }
 
    @Override
    public void extractBackground(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) {
        graphics.blitSprite(
            RenderPipelines.GUI_TEXTURED, LOCATOR_BAR_BACKGROUND, this.left(this.minecraft.getWindow()), this.top(this.minecraft.getWindow()), 182, 5
        );
    }
 
    @Override
    public void extractRenderState(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) {
        int top = this.top(this.minecraft.getWindow());
        Entity cameraEntity = this.minecraft.getCameraEntity();
        if (cameraEntity != null) {
            Level level = cameraEntity.level();
            TickRateManager tickRateManager = level.tickRateManager();
            PartialTickSupplier partialTickSupplier = entity -> deltaTracker.getGameTimeDeltaPartialTick(!tickRateManager.isEntityFrozen(entity));
            this.minecraft
                .player
                .connection
                .getWaypointManager()
                .forEachWaypoint(
                    cameraEntity,
                    waypoint -> {
                        if (!waypoint.id().left().map(uuid -> uuid.equals(cameraEntity.getUUID())).orElse(false)) {
                            double angle = waypoint.yawAngleToCamera(level, this.minecraft.gameRenderer.getMainCamera(), partialTickSupplier);
                            if (!(angle <= -60.0) && !(angle > 60.0)) {
                                int screenMiddle = Mth.ceil((graphics.guiWidth() - 9) / 2.0F);
                                Waypoint.Icon icon = waypoint.icon();
                                WaypointStyle style = this.minecraft.getWaypointStyles().get(icon.style);
                                float distance = Mth.sqrt((float)waypoint.distanceSquared(cameraEntity));
                                Identifier sprite = style.sprite(distance);
                                int color = icon.color
                                    .orElseGet(
                                        () -> waypoint.id()
                                            .map(
                                                uuid -> ARGB.setBrightness(ARGB.color(255, uuid.hashCode()), 0.9F),
                                                name -> ARGB.setBrightness(ARGB.color(255, name.hashCode()), 0.9F)
                                            )
                                    );
                                int dotPosition = Mth.floor(angle * 173.0 / 2.0 / 60.0);
                                graphics.blitSprite(RenderPipelines.GUI_TEXTURED, sprite, screenMiddle + dotPosition, top - 2, 9, 9, color);
                                TrackedWaypoint.PitchDirection pitchDirection = waypoint.pitchDirectionToCamera(
                                    level, this.minecraft.gameRenderer, partialTickSupplier
                                );
                                if (pitchDirection != TrackedWaypoint.PitchDirection.NONE) {
                                    int arrowTop;
                                    Identifier arrowSprite;
                                    if (pitchDirection == TrackedWaypoint.PitchDirection.DOWN) {
                                        arrowTop = 6;
                                        arrowSprite = LOCATOR_BAR_ARROW_DOWN;
                                    } else {
                                        arrowTop = -6;
                                        arrowSprite = LOCATOR_BAR_ARROW_UP;
                                    }
 
                                    graphics.blitSprite(RenderPipelines.GUI_TEXTURED, arrowSprite, screenMiddle + dotPosition + 1, top + arrowTop, 7, 5);
                                }
                            }
                        }
                    }
                );
        }
    }
}

引用的其他类

  • DeltaTracker

    • 引用位置: 参数
  • Minecraft

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

    • 引用位置: 参数
  • ContextualBarRenderer

    • 引用位置: 实现
  • Identifier

    • 引用位置: 字段/方法调用
    • 关联成员: Identifier.withDefaultNamespace()
  • ARGB

    • 引用位置: 方法调用
    • 关联成员: ARGB.color(), ARGB.setBrightness()
  • Mth

    • 引用位置: 方法调用
    • 关联成员: Mth.ceil(), Mth.floor(), Mth.sqrt()