aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/enums/Dyes.java
blob: 3f1bc31c21d771f57b0d12a97742126b221dcb6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package gregtech.api.enums;

import java.util.ArrayList;

import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;

import gregtech.api.interfaces.IColorModulationContainer;
import gregtech.api.objects.GT_ArrayList;
import gregtech.api.util.GT_Utility;

public enum Dyes implements IColorModulationContainer {

    /**
     * The valid Colors, see VALUES Array below
     */
    dyeBlack(0, 32, 32, 32, "Black", EnumChatFormatting.BLACK),
    dyeRed(1, 255, 0, 0, "Red", EnumChatFormatting.RED),
    dyeGreen(2, 0, 255, 0, "Green", EnumChatFormatting.DARK_GREEN),
    dyeBrown(3, 96, 64, 0, "Brown", EnumChatFormatting.GOLD),
    dyeBlue(4, 0, 32, 255, "Blue", EnumChatFormatting.DARK_BLUE),
    dyePurple(5, 128, 0, 128, "Purple", EnumChatFormatting.DARK_PURPLE),
    dyeCyan(6, 0, 255, 255, "Cyan", EnumChatFormatting.DARK_AQUA),
    dyeLightGray(7, 192, 192, 192, "Light Gray", EnumChatFormatting.GRAY),
    dyeGray(8, 128, 128, 128, "Gray", EnumChatFormatting.DARK_GRAY),
    dyePink(9, 255, 192, 192, "Pink", EnumChatFormatting.LIGHT_PURPLE),
    dyeLime(10, 128, 255, 128, "Lime", EnumChatFormatting.GREEN),
    dyeYellow(11, 255, 255, 0, "Yellow", EnumChatFormatting.YELLOW),
    dyeLightBlue(12, 96, 128, 255, "Light Blue", EnumChatFormatting.AQUA),
    dyeMagenta(13, 255, 0, 255, "Magenta", EnumChatFormatting.LIGHT_PURPLE),
    dyeOrange(14, 255, 128, 0, "Orange", EnumChatFormatting.GOLD),
    dyeWhite(15, 255, 255, 255, "White", EnumChatFormatting.WHITE),
    /**
     * The NULL Color
     */
    _NULL(-1, 255, 255, 255, "INVALID COLOR"),
    /**
     * Additional Colors only used for direct Color referencing
     */
    CABLE_INSULATION(-1, 64, 64, 64, "Cable Insulation"),
    CONSTRUCTION_FOAM(-1, 64, 64, 64, "Construction Foam"),
    MACHINE_METAL(-1, 210, 220, 255, "Machine Metal");

    public static final Dyes[] VALUES = { dyeBlack, dyeRed, dyeGreen, dyeBrown, dyeBlue, dyePurple, dyeCyan,
        dyeLightGray, dyeGray, dyePink, dyeLime, dyeYellow, dyeLightBlue, dyeMagenta, dyeOrange, dyeWhite };

    public final byte mIndex;
    public final String mName;
    public final short[] mRGBa;
    public final short[] mOriginalRGBa;
    public final EnumChatFormatting formatting;
    private final ArrayList<Fluid> mFluidDyes = new GT_ArrayList<>(false, 1);

    Dyes(int aIndex, int aR, int aG, int aB, String aName) {
        this(aIndex, aR, aG, aB, aName, EnumChatFormatting.GRAY);
    }

    Dyes(int aIndex, int aR, int aG, int aB, String aName, EnumChatFormatting formatting) {
        mIndex = (byte) aIndex;
        mName = aName;
        mRGBa = new short[] { (short) aR, (short) aG, (short) aB, 0 };
        mOriginalRGBa = mRGBa.clone();
        this.formatting = formatting;
    }

    public static Dyes get(int aColor) {
        if (aColor >= 0 && aColor < 16) return VALUES[aColor];
        return _NULL;
    }

    public static short[] getModulation(int aColor, short[] aDefaultModulation) {
        if (aColor >= 0 && aColor < 16) return VALUES[aColor].mRGBa;
        return aDefaultModulation;
    }

    public static Dyes get(String aColor) {
        Object tObject = GT_Utility.getFieldContent(Dyes.class, aColor, false, false);
        if (tObject instanceof Dyes) return (Dyes) tObject;
        return _NULL;
    }

    public static boolean isAnyFluidDye(FluidStack aFluid) {
        return aFluid != null && isAnyFluidDye(aFluid.getFluid());
    }

    public static boolean isAnyFluidDye(Fluid aFluid) {
        if (aFluid != null) for (Dyes tDye : VALUES) if (tDye.isFluidDye(aFluid)) return true;
        return false;
    }

    public boolean isFluidDye(FluidStack aFluid) {
        return aFluid != null && isFluidDye(aFluid.getFluid());
    }

    public boolean isFluidDye(Fluid aFluid) {
        return aFluid != null && mFluidDyes.contains(aFluid);
    }

    public boolean addFluidDye(Fluid aDye) {
        if (aDye == null || mFluidDyes.contains(aDye)) return false;
        mFluidDyes.add(aDye);
        return true;
    }

    public int getSizeOfFluidList() {
        return mFluidDyes.size();
    }

    /**
     * @param aAmount 1 Fluid Material Unit (144) = 1 Dye Item
     */
    public FluidStack getFluidDye(int aIndex, long aAmount) {
        if (aIndex >= mFluidDyes.size() || aIndex < 0) return null;
        return new FluidStack(mFluidDyes.get(aIndex), (int) aAmount);
    }

    @Override
    public short[] getRGBA() {
        return mRGBa;
    }

    public static Dyes getDyeFromIndex(short index) {
        return index != -1 ? Dyes.get(index) : Dyes.MACHINE_METAL;
    }
}