minecraft-src/net/minecraft/util/ARGB.java
2025-07-04 03:15:13 +03:00

142 lines
3.8 KiB
Java

package net.minecraft.util;
import net.minecraft.world.phys.Vec3;
import org.joml.Vector3f;
public class ARGB {
public static int alpha(int color) {
return color >>> 24;
}
public static int red(int color) {
return color >> 16 & 0xFF;
}
public static int green(int color) {
return color >> 8 & 0xFF;
}
public static int blue(int color) {
return color & 0xFF;
}
public static int color(int alpha, int red, int green, int blue) {
return alpha << 24 | red << 16 | green << 8 | blue;
}
public static int color(int red, int green, int blue) {
return color(255, red, green, blue);
}
public static int color(Vec3 color) {
return color(as8BitChannel((float)color.x()), as8BitChannel((float)color.y()), as8BitChannel((float)color.z()));
}
public static int multiply(int color1, int color2) {
if (color1 == -1) {
return color2;
} else {
return color2 == -1
? color1
: color(alpha(color1) * alpha(color2) / 255, red(color1) * red(color2) / 255, green(color1) * green(color2) / 255, blue(color1) * blue(color2) / 255);
}
}
public static int scaleRGB(int color, float scale) {
return scaleRGB(color, scale, scale, scale);
}
public static int scaleRGB(int color, float redScale, float greenScale, float blueScale) {
return color(
alpha(color),
Math.clamp((int)(red(color) * redScale), 0, 255),
Math.clamp((int)(green(color) * greenScale), 0, 255),
Math.clamp((int)(blue(color) * blueScale), 0, 255)
);
}
public static int scaleRGB(int color, int scale) {
return color(
alpha(color),
Math.clamp((long)red(color) * scale / 255L, 0, 255),
Math.clamp((long)green(color) * scale / 255L, 0, 255),
Math.clamp((long)blue(color) * scale / 255L, 0, 255)
);
}
public static int greyscale(int color) {
int i = (int)(red(color) * 0.3F + green(color) * 0.59F + blue(color) * 0.11F);
return color(i, i, i);
}
public static int lerp(float delta, int color1, int color2) {
int i = Mth.lerpInt(delta, alpha(color1), alpha(color2));
int j = Mth.lerpInt(delta, red(color1), red(color2));
int k = Mth.lerpInt(delta, green(color1), green(color2));
int l = Mth.lerpInt(delta, blue(color1), blue(color2));
return color(i, j, k, l);
}
public static int opaque(int color) {
return color | 0xFF000000;
}
public static int transparent(int color) {
return color & 16777215;
}
public static int color(int alpha, int color) {
return alpha << 24 | color & 16777215;
}
public static int white(float alpha) {
return as8BitChannel(alpha) << 24 | 16777215;
}
public static int colorFromFloat(float alpha, float red, float green, float blue) {
return color(as8BitChannel(alpha), as8BitChannel(red), as8BitChannel(green), as8BitChannel(blue));
}
public static Vector3f vector3fFromRGB24(int color) {
float f = red(color) / 255.0F;
float g = green(color) / 255.0F;
float h = blue(color) / 255.0F;
return new Vector3f(f, g, h);
}
public static int average(int color1, int color2) {
return color((alpha(color1) + alpha(color2)) / 2, (red(color1) + red(color2)) / 2, (green(color1) + green(color2)) / 2, (blue(color1) + blue(color2)) / 2);
}
public static int as8BitChannel(float value) {
return Mth.floor(value * 255.0F);
}
public static float alphaFloat(int color) {
return from8BitChannel(alpha(color));
}
public static float redFloat(int color) {
return from8BitChannel(red(color));
}
public static float greenFloat(int color) {
return from8BitChannel(green(color));
}
public static float blueFloat(int color) {
return from8BitChannel(blue(color));
}
private static float from8BitChannel(int value) {
return value / 255.0F;
}
public static int toABGR(int color) {
return color & -16711936 | (color & 0xFF0000) >> 16 | (color & 0xFF) << 16;
}
public static int fromABGR(int color) {
return toABGR(color);
}
}