GuiItemRenderState.java

net.minecraft.client.renderer.state.gui.GuiItemRenderState

信息

  • 全限定名:net.minecraft.client.renderer.state.gui.GuiItemRenderState
  • 类型:public final class
  • 包:net.minecraft.client.renderer.state.gui
  • 源码路径:src/main/java/net/minecraft/client/renderer/state/gui/GuiItemRenderState.java
  • 起始行号:L13
  • 实现:ScreenArea
  • 职责:

    TODO

字段/常量

  • pose

    • 类型: Matrix3x2f
    • 修饰符: private final
    • 源码定位: L14
    • 说明:

      TODO

  • itemStackRenderState

    • 类型: TrackingItemStackRenderState
    • 修饰符: private final
    • 源码定位: L15
    • 说明:

      TODO

  • x

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

      TODO

  • y

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

      TODO

  • scissorArea

    • 类型: ScreenRectangle
    • 修饰符: private final
    • 源码定位: L18
    • 说明:

      TODO

  • oversizedItemBounds

    • 类型: ScreenRectangle
    • 修饰符: private final
    • 源码定位: L19
    • 说明:

      TODO

  • bounds

    • 类型: ScreenRectangle
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

内部类/嵌套类型

构造器

public GuiItemRenderState(Matrix3x2f pose, TrackingItemStackRenderState itemStackRenderState, int x, int y, ScreenRectangle scissorArea) @ L22

  • 构造器名:GuiItemRenderState
  • 源码定位:L22
  • 修饰符:public

参数:

  • pose: Matrix3x2f
  • itemStackRenderState: TrackingItemStackRenderState
  • x: int
  • y: int
  • scissorArea: ScreenRectangle

说明:

TODO

方法

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

private ScreenRectangle calculateOversizedItemBounds() @ L32

  • 方法名:calculateOversizedItemBounds
  • 源码定位:L32
  • 返回类型:ScreenRectangle
  • 修饰符:private

参数:

说明:

TODO

private ScreenRectangle calculateBounds(ScreenRectangle itemBounds) @ L49

  • 方法名:calculateBounds
  • 源码定位:L49
  • 返回类型:ScreenRectangle
  • 修饰符:private

参数:

  • itemBounds: ScreenRectangle

说明:

TODO

public Matrix3x2f pose() @ L54

  • 方法名:pose
  • 源码定位:L54
  • 返回类型:Matrix3x2f
  • 修饰符:public

参数:

说明:

TODO

public TrackingItemStackRenderState itemStackRenderState() @ L58

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

参数:

说明:

TODO

public int x() @ L62

  • 方法名:x
  • 源码定位:L62
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

public int y() @ L66

  • 方法名:y
  • 源码定位:L66
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

public ScreenRectangle scissorArea() @ L70

  • 方法名:scissorArea
  • 源码定位:L70
  • 返回类型:ScreenRectangle
  • 修饰符:public

参数:

说明:

TODO

public ScreenRectangle oversizedItemBounds() @ L74

  • 方法名:oversizedItemBounds
  • 源码定位:L74
  • 返回类型:ScreenRectangle
  • 修饰符:public

参数:

说明:

TODO

public ScreenRectangle bounds() @ L78

  • 方法名:bounds
  • 源码定位:L78
  • 返回类型:ScreenRectangle
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public final class GuiItemRenderState implements ScreenArea {
    private final Matrix3x2f pose;
    private final TrackingItemStackRenderState itemStackRenderState;
    private final int x;
    private final int y;
    private final @Nullable ScreenRectangle scissorArea;
    private final @Nullable ScreenRectangle oversizedItemBounds;
    private final @Nullable ScreenRectangle bounds;
 
    public GuiItemRenderState(Matrix3x2f pose, TrackingItemStackRenderState itemStackRenderState, int x, int y, @Nullable ScreenRectangle scissorArea) {
        this.pose = pose;
        this.itemStackRenderState = itemStackRenderState;
        this.x = x;
        this.y = y;
        this.scissorArea = scissorArea;
        this.oversizedItemBounds = this.itemStackRenderState().isOversizedInGui() ? this.calculateOversizedItemBounds() : null;
        this.bounds = this.calculateBounds(this.oversizedItemBounds != null ? this.oversizedItemBounds : new ScreenRectangle(this.x, this.y, 16, 16));
    }
 
    private @Nullable ScreenRectangle calculateOversizedItemBounds() {
        AABB aabb = this.itemStackRenderState.getModelBoundingBox();
        int actualXSize = Mth.ceil(aabb.getXsize() * 16.0);
        int actualYSize = Mth.ceil(aabb.getYsize() * 16.0);
        if (actualXSize <= 16 && actualYSize <= 16) {
            return null;
        } else {
            float xOffset = (float)(aabb.minX * 16.0);
            float yOffset = (float)(aabb.maxY * 16.0);
            int flooredXOffset = Mth.floor(xOffset);
            int flooredYOffset = Mth.floor(yOffset);
            int actualX = this.x + flooredXOffset + 8;
            int actualY = this.y - flooredYOffset + 8;
            return new ScreenRectangle(actualX, actualY, actualXSize, actualYSize);
        }
    }
 
    private @Nullable ScreenRectangle calculateBounds(ScreenRectangle itemBounds) {
        ScreenRectangle bounds = itemBounds.transformMaxBounds(this.pose);
        return this.scissorArea != null ? this.scissorArea.intersection(bounds) : bounds;
    }
 
    public Matrix3x2f pose() {
        return this.pose;
    }
 
    public TrackingItemStackRenderState itemStackRenderState() {
        return this.itemStackRenderState;
    }
 
    public int x() {
        return this.x;
    }
 
    public int y() {
        return this.y;
    }
 
    public @Nullable ScreenRectangle scissorArea() {
        return this.scissorArea;
    }
 
    public @Nullable ScreenRectangle oversizedItemBounds() {
        return this.oversizedItemBounds;
    }
 
    @Override
    public @Nullable ScreenRectangle bounds() {
        return this.bounds;
    }
}

引用的其他类