ICustomBackgroundColour

基本信息

属性 值
全限定名 betterachievements.api.components.achievement.ICustomBackgroundColour
类型 接口(Achievement 自定义图标背景颜色)
源文件 src/main/java/betterachievements/api/components/achievement/ICustomBackgroundColour.java

功能

Achievement 实现后,覆盖其成就方框背景色(默认按 depth/亮度灰度上色)。GuiBetterAchievements.drawAchievement 在每个成就绘制时调用。

方法签名

int recolourBackground(float greyScale);
参数 含义
greyScale 当前根据 depth/unlocked 推导出的灰度因子(0.1F ~ 1.0F)
返回 含义
int 要应用的颜色(packed RGBA)。注释推荐用 ColourHelper.RGB(r,g,b) 或 ColourHelper.blendWithGreyScale(...) 生成

调用点

if (achievement instanceof ICustomBackgroundColour) {
    int colour = ((ICustomBackgroundColour) achievement).recolourBackground(brightness);
    GL11.glColor4f(
        (colour >> 16 & 255) / 255.0F,
        (colour >> 8 & 255) / 255.0F,
        (colour & 255) / 255.0F, 1.0F);
} else GL11.glColor4f(brightness, brightness, brightness, 1.0F);

实现示例(来自 Demo mod)

// src/demo/java/betterachievementsdemo/registry/AchievementRegistry.java
private static Achievement blue = new DemoAchievement("demo.blue", "Blue", 0, 0, Blocks.wool, null) {
    @Override
    public int recolourBackground(float greyScale) {
        return ColourHelper.blendWithGreyScale(ColourHelper.RGB(0, 0, 255), greyScale);
    }
};
private static Achievement rainbow = new DemoAchievement("demo.rainbow", "Rainbow", 2, 1, Items.nether_star, red) {
    @Override
    public int recolourBackground(float greyScale) {
        return ColourHelper.blendWithGreyScale(
            ColourHelper.getRainbowColour(0.3F, 0.3F, 0.3F, 0, 2, 4, 128, 127, 50),
            greyScale);
    }
};

相关条目