ColorLerper.java

net.minecraft.client.color.ColorLerper

信息

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

    TODO

字段/常量

  • MUSIC_NOTE_COLORS
    • 类型: DyeColor[]
    • 修饰符: public static final
    • 源码定位: L15
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.color.ColorLerper.Type
    • 类型: enum
    • 修饰符: public static
    • 源码定位: L52
    • 说明:

      TODO

构造器

方法

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

public static int getLerpedColor(ColorLerper.Type type, float tick) @ L30

  • 方法名:getLerpedColor
  • 源码定位:L30
  • 返回类型:int
  • 修饰符:public static

参数:

  • type: ColorLerper.Type
  • tick: float

说明:

TODO

private static int getModifiedColor(DyeColor color, float brightness) @ L42

  • 方法名:getModifiedColor
  • 源码定位:L42
  • 返回类型:int
  • 修饰符:private static

参数:

  • color: DyeColor
  • brightness: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ColorLerper {
    public static final DyeColor[] MUSIC_NOTE_COLORS = new DyeColor[]{
        DyeColor.WHITE,
        DyeColor.LIGHT_GRAY,
        DyeColor.LIGHT_BLUE,
        DyeColor.BLUE,
        DyeColor.CYAN,
        DyeColor.GREEN,
        DyeColor.LIME,
        DyeColor.YELLOW,
        DyeColor.ORANGE,
        DyeColor.PINK,
        DyeColor.RED,
        DyeColor.MAGENTA
    };
 
    public static int getLerpedColor(ColorLerper.Type type, float tick) {
        int tickCount = Mth.floor(tick);
        int value = tickCount / type.colorDuration;
        int colorCount = type.colors.length;
        int c1 = value % colorCount;
        int c2 = (value + 1) % colorCount;
        float subStep = (tickCount % type.colorDuration + Mth.frac(tick)) / type.colorDuration;
        int color1 = type.getColor(type.colors[c1]);
        int color2 = type.getColor(type.colors[c2]);
        return ARGB.srgbLerp(subStep, color1, color2);
    }
 
    private static int getModifiedColor(DyeColor color, float brightness) {
        if (color == DyeColor.WHITE) {
            return -1644826;
        } else {
            int src = color.getTextureDiffuseColor();
            return ARGB.color(255, Mth.floor(ARGB.red(src) * brightness), Mth.floor(ARGB.green(src) * brightness), Mth.floor(ARGB.blue(src) * brightness));
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static enum Type {
        SHEEP(25, DyeColor.values(), 0.75F),
        MUSIC_NOTE(30, ColorLerper.MUSIC_NOTE_COLORS, 1.25F);
 
        private final int colorDuration;
        private final Map<DyeColor, Integer> colorByDye;
        private final DyeColor[] colors;
 
        private Type(int colorDuration, DyeColor[] colors, float brightness) {
            this.colorDuration = colorDuration;
            this.colorByDye = Maps.newHashMap(
                Arrays.stream(colors).collect(Collectors.toMap(d -> (DyeColor)d, color -> ColorLerper.getModifiedColor(color, brightness)))
            );
            this.colors = colors;
        }
 
        public final int getColor(DyeColor dyeColor) {
            return this.colorByDye.get(dyeColor);
        }
    }
}

引用的其他类

  • ARGB

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

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

    • 引用位置: 参数/字段/方法调用
    • 关联成员: DyeColor.values()