aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java
blob: 0fa4d733f0574af819817d7f09b36caa40a4f451 (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
package gregtech.common.render.items;

import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;

import org.lwjgl.opengl.GL11;

import codechicken.lib.render.TextureUtils;
import gregtech.GT_Mod;
import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer;
import gregtech.api.util.GT_Util;

public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer {

    @Override
    protected void renderRegularItem(ItemRenderType type, ItemStack itemStack, IIcon icon,
        boolean shouldModulateColor) {

        if (!(itemStack.getItem() instanceof final IGT_ItemWithMaterialRenderer itemRenderer)) return;

        GL11.glPushMatrix();
        applyEffect(type, itemRenderer.getRGBa(itemStack), shouldModulateColor);

        if (shouldModulateColor) {
            short[] tModulation = itemRenderer.getRGBa(itemStack);
            GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F);
        }

        if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
            GL11.glScalef(16, 16, 32);
        }
        ItemRenderer.renderItemIn2D(
            Tessellator.instance,
            icon.getMaxU(),
            icon.getMinV(),
            icon.getMinU(),
            icon.getMaxV(),
            icon.getIconWidth(),
            icon.getIconHeight(),
            0.0625F);

        GL11.glPopMatrix();
    }

    @Override
    protected void renderContainedFluid(ItemRenderType type, FluidStack fluidStack, IIcon fluidIcon) {
        GL11.glPushMatrix();

        Fluid fluid = fluidStack.getFluid();
        applyEffect(type, GT_Util.getRGBaArray(fluid.getColor()), true);

        TextureUtils.bindAtlas(fluid.getSpriteNumber());
        GL11.glDepthFunc(GL11.GL_EQUAL);
        if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
            GL11.glScalef(16, 16, 32);
        }

        ItemRenderer.renderItemIn2D(
            Tessellator.instance,
            fluidIcon.getMaxU(),
            fluidIcon.getMinV(),
            fluidIcon.getMinU(),
            fluidIcon.getMaxV(),
            fluidIcon.getIconWidth(),
            fluidIcon.getIconHeight(),
            0.0625F);

        GL11.glDepthFunc(GL11.GL_LEQUAL);
        GL11.glPopMatrix();
    }

    @Override
    protected void renderItemOverlay(ItemRenderType type, IIcon overlay) {
        GL11.glPushMatrix();
        applyEffect(type, null, false);

        if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
            GL11.glScalef(16, 16, 32);
        }
        ItemRenderer.renderItemIn2D(
            Tessellator.instance,
            overlay.getMaxU(),
            overlay.getMinV(),
            overlay.getMinU(),
            overlay.getMaxV(),
            overlay.getIconWidth(),
            overlay.getIconHeight(),
            0.0625F);

        GL11.glPopMatrix();
    }

    private void applyEffect(ItemRenderType type, short[] modulation, boolean shouldModulateColor) {

        if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
            GL11.glTranslatef(8f, 8f, 0f);
        } else {
            GL11.glTranslatef(0.5f, 0.5f, 0.0f);
        }

        GL11.glRotatef((GT_Mod.gregtechproxy.getAnimationTicks() * 3.5f) % 360, 0.3f, 0.5f, 0.2f);
        GL11.glRotatef(180, 0.5f, 0.0f, 0.0f);

        if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
            GL11.glTranslatef(-8f, -8f, 0f);
        } else {
            GL11.glTranslatef(-0.5f, -0.5f, 0.0f);
        }

        if (shouldModulateColor) {
            GL11.glColor4f(modulation[0] / 255.0F, modulation[1] / 255.0F, modulation[2] / 255.0F, 255);
        } else {
            GL11.glColor4f(1f, 1f, 1f, 255);
        }
    }
}