blusunrize.immersiveengineering.client.render.TileRenderSheetmetalTank.java Source code

Java tutorial

Introduction

Here is the source code for blusunrize.immersiveengineering.client.render.TileRenderSheetmetalTank.java

Source

/*
 * BluSunrize
 * Copyright (c) 2017
 *
 * This code is licensed under "Blu's License of Common Sense"
 * Details can be found in the license file in the root folder of this project
 */

package blusunrize.immersiveengineering.client.render;

import blusunrize.immersiveengineering.client.ClientUtils;
import blusunrize.immersiveengineering.common.blocks.metal.TileEntitySheetmetalTank;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;

public class TileRenderSheetmetalTank extends TileEntitySpecialRenderer<TileEntitySheetmetalTank> {
    @Override
    public void render(TileEntitySheetmetalTank tile, double x, double y, double z, float partialTicks,
            int destroyStage, float alpha) {
        if (!tile.formed || tile.pos != 4 || !tile.getWorld().isBlockLoaded(tile.getPos(), false))
            return;
        GlStateManager.pushMatrix();

        GlStateManager.translate(x + .5, y, z + .5);

        FluidStack fs = tile.tank.getFluid();
        GlStateManager.translate(0, 3.5f, 0);
        float baseScale = .0625f;
        GlStateManager.scale(baseScale, -baseScale, baseScale);

        float xx = -.5f;
        float zz = 1.5f - .004f;
        xx /= baseScale;
        zz /= baseScale;
        for (int i = 0; i < 4; i++) {
            GlStateManager.translate(xx, 0, zz);

            GlStateManager.disableTexture2D();
            GlStateManager.enableBlend();
            GlStateManager.disableAlpha();
            OpenGlHelper.glBlendFunc(770, 771, 1, 0);
            GlStateManager.shadeModel(GL11.GL_SMOOTH);
            GlStateManager.disableLighting();

            BufferBuilder worldrenderer = ClientUtils.tes().getBuffer();
            worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR);
            worldrenderer.pos(-4, -4, 0).color(0x22, 0x22, 0x22, 0xff).endVertex();
            worldrenderer.pos(-4, 20, 0).color(0x22, 0x22, 0x22, 0xff).endVertex();
            worldrenderer.pos(20, 20, 0).color(0x22, 0x22, 0x22, 0xff).endVertex();
            worldrenderer.pos(20, -4, 0).color(0x22, 0x22, 0x22, 0xff).endVertex();
            ClientUtils.tes().draw();
            GlStateManager.shadeModel(GL11.GL_FLAT);
            GlStateManager.disableBlend();
            GlStateManager.enableAlpha();
            GlStateManager.enableTexture2D();

            if (fs != null) {
                float h = fs.amount / (float) tile.tank.getCapacity();
                GlStateManager.depthMask(false);
                GlStateManager.translate(0, 0, .004f);
                ClientUtils.drawRepeatedFluidSprite(fs, 0, 0 + (1 - h) * 16, 16, h * 16);
                GlStateManager.translate(0, 0, -.004f);
                GlStateManager.depthMask(true);
            }

            GlStateManager.translate(-xx, 0, -zz);
            GlStateManager.rotate(90, 0, 1, 0);
            GlStateManager.enableAlpha();
            GlStateManager.alphaFunc(516, 0.1F);
            GlStateManager.enableBlend();
            OpenGlHelper.glBlendFunc(770, 771, 1, 0);
        }
        GlStateManager.popMatrix();
    }

}