aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchNaquadah.java
blob: adcf85c7751620082df187527d6e5e8dd1cc59d7 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations;

import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;

import gregtech.api.enums.Materials;
import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.MTEHatchInput;
import gregtech.api.objects.GTRenderedTexture;
import gregtech.api.util.GTUtility;
import gtPlusPlus.core.lib.GTPPCore;

public class MTEHatchNaquadah extends MTEHatchInput {

    public final FluidStack[] mFluidsToUse = new FluidStack[3];
    public final int mFluidCapacity;

    public MTEHatchNaquadah(final int aID, final String aName, final String aNameRegional) {
        super(aID, aName, aNameRegional, 6);
        mFluidCapacity = 32000;
        initHatch();
    }

    public MTEHatchNaquadah(final String aName, final String[] aDescription, final ITexture[][][] aTextures) {
        super(aName, 6, aDescription[0], aTextures);
        mFluidCapacity = 32000;
        initHatch();
    }

    private void initHatch() {
        if (mFluidsToUse[0] == null) {
            mFluidsToUse[0] = Materials.Naquadah.getMolten(1);
        }
        if (mFluidsToUse[1] == null) {
            mFluidsToUse[1] = Materials.NaquadahEnriched.getMolten(1);
        }
        if (mFluidsToUse[2] == null) {
            mFluidsToUse[2] = Materials.Naquadria.getMolten(1);
        }
    }

    @Override
    public ITexture[] getTexturesActive(final ITexture aBaseTexture) {
        return new ITexture[] { aBaseTexture, new GTRenderedTexture(BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE) };
    }

    @Override
    public ITexture[] getTexturesInactive(final ITexture aBaseTexture) {
        return new ITexture[] { aBaseTexture, new GTRenderedTexture(BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE) };
    }

    public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex,
        final ForgeDirection side, final ItemStack aStack) {
        if (side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0) {
            for (FluidStack f : mFluidsToUse) {
                if (f != null) {
                    if (GTUtility.getFluidForFilledItem(aStack, true)
                        .getFluid() == f.getFluid()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    @Override
    public boolean isFluidInputAllowed(final FluidStack aFluid) {
        for (FluidStack f : mFluidsToUse) {
            if (f != null) {
                if (aFluid.getFluid() == f.getFluid()) {
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    public int getCapacity() {
        return this.mFluidCapacity;
    }

    @Override
    public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) {
        return new MTEHatchNaquadah(this.mName, this.mDescriptionArray, this.mTextures);
    }

    private static final String[] aDescCache = new String[3];

    @Override
    public String[] getDescription() {
        if (aDescCache[0] == null || aDescCache[0].contains(".name") || aDescCache[0].contains("fluid.")) {
            aDescCache[0] = formatFluidString(this.mFluidsToUse[0]);
        }
        if (aDescCache[1] == null || aDescCache[1].contains(".name") || aDescCache[1].contains("fluid.")) {
            aDescCache[1] = formatFluidString(this.mFluidsToUse[1]);
        }
        if (aDescCache[2] == null || aDescCache[2].contains(".name") || aDescCache[2].contains("fluid.")) {
            aDescCache[2] = formatFluidString(this.mFluidsToUse[2]);
        }
        String aNaq = aDescCache[0];
        String aEnrNaq = aDescCache[1];
        String aNaquad = aDescCache[2];
        return new String[] { "Fluid Input for Multiblocks", "Capacity: " + getCapacity() + "L",
            "Accepted Fluid: " + aNaq, "Accepted Fluid: " + aEnrNaq, "Accepted Fluid: " + aNaquad,
            GTPPCore.GT_Tooltip.get() };
    }

    private String formatFluidString(FluidStack fluidStack) {
        String mTempMod = EnumChatFormatting.RESET.toString();
        int mLockedTemp = fluidStack.getFluid()
            .getTemperature();
        if (mLockedTemp <= -3000) {
            mTempMod = "" + EnumChatFormatting.DARK_PURPLE;
        } else if (mLockedTemp <= -500) {
            mTempMod = "" + EnumChatFormatting.DARK_BLUE;
        } else if (mLockedTemp <= -50) {
            mTempMod = "" + EnumChatFormatting.BLUE;
        } else if (mLockedTemp >= 30 && mLockedTemp <= 300) {
            mTempMod = "" + EnumChatFormatting.AQUA;
        } else if (mLockedTemp >= 301 && mLockedTemp <= 800) {
            mTempMod = "" + EnumChatFormatting.YELLOW;
        } else if (mLockedTemp >= 801 && mLockedTemp <= 1500) {
            mTempMod = "" + EnumChatFormatting.GOLD;
        } else if (mLockedTemp >= 1501) {
            mTempMod = "" + EnumChatFormatting.RED;
        }
        return mTempMod + fluidStack.getLocalizedName();
    }

    @Override
    public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
        int aColorIndex, boolean aActive, boolean aRedstone) {
        byte a1 = this.getActualTexture();
        byte a2 = this.getmTexturePage();
        int textureIndex = a1 | a2 << 7;
        byte texturePointer = (byte) (a1 & 127);
        if (side == ForgeDirection.UP || side == ForgeDirection.DOWN) {
            ITexture g = textureIndex > 0 ? BlockIcons.casingTexturePages[a2][texturePointer]
                : BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1];
            return new ITexture[] { g, new GTRenderedTexture(BlockIcons.NAQUADAH_REACTOR_FLUID_TOP_ACTIVE) };
        }
        return side != facing
            ? (textureIndex > 0 ? new ITexture[] { BlockIcons.casingTexturePages[a2][texturePointer] }
                : new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1] })
            : (textureIndex > 0
                ? (aActive ? this.getTexturesActive(BlockIcons.casingTexturePages[a2][texturePointer])
                    : this.getTexturesInactive(BlockIcons.casingTexturePages[a2][texturePointer]))
                : (aActive ? this.getTexturesActive(BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1])
                    : this.getTexturesInactive(BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1])));
    }
}