aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/enums/Dyes.java
blob: 2a546e6138d1a7f0f0900cda3c905a35e2f25e77 (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
127
128
129
130
131
132
package gregtech.api.enums;

import gregtech.api.interfaces.IColorModulationContainer;
import gregtech.api.objects.GT_ArrayList;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;

public enum Dyes implements IColorModulationContainer {
    /**
     * The valid Colors, see VALUES Array below
     */
    dyeBlack(0, 32, 32, 32, "Black"),
    dyeRed(1, 255, 0, 0, "Red"),
    dyeGreen(2, 0, 255, 0, "Green"),
    dyeBrown(3, 96, 64, 0, "Brown"),
    dyeBlue(4, 0, 32, 255, "Blue"),
    dyePurple(5, 128, 0, 128, "Purple"),
    dyeCyan(6, 0, 255, 255, "Cyan"),
    dyeLightGray(7, 192, 192, 192, "Light Gray"),
    dyeGray(8, 128, 128, 128, "Gray"),
    dyePink(9, 255, 192, 192, "Pink"),
    dyeLime(10, 128, 255, 128, "Lime"),
    dyeYellow(11, 255, 255, 0, "Yellow"),
    dyeLightBlue(12, 96, 128, 255, "Light Blue"),
    dyeMagenta(13, 255, 0, 255, "Magenta"),
    dyeOrange(14, 255, 128, 0, "Orange"),
    dyeWhite(15, 255, 255, 255, "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;
    private final ArrayList<Fluid> mFluidDyes = new GT_ArrayList<Fluid>(false, 1);

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

    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;
    }
}