    001package net.minecraft.client.renderer.tileentity;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import net.minecraft.client.renderer.Tessellator;
    006import net.minecraft.tileentity.TileEntity;
    007import net.minecraft.tileentity.TileEntityBeacon;
    008import net.minecraft.util.MathHelper;
    009import org.lwjgl.opengl.GL11;
    010
    011@SideOnly(Side.CLIENT)
    012public class TileEntityBeaconRenderer extends TileEntitySpecialRenderer
    013{
    014    /**
    015     * Render a beacon tile entity.
    016     */
    017    public void renderTileEntityBeaconAt(TileEntityBeacon par1TileEntityBeacon, double par2, double par4, double par6, float par8)
    018    {
    019        float f1 = par1TileEntityBeacon.func_82125_v_();
    020
    021        if (f1 > 0.0F)
    022        {
    023            Tessellator tessellator = Tessellator.instance;
    024            this.bindTextureByName("/misc/beam.png");
    025            GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F);
    026            GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F);
    027            GL11.glDisable(GL11.GL_LIGHTING);
    028            GL11.glDisable(GL11.GL_CULL_FACE);
    029            GL11.glDisable(GL11.GL_BLEND);
    030            GL11.glDepthMask(true);
    031            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
    032            float f2 = (float)par1TileEntityBeacon.getWorldObj().getTotalWorldTime() + par8;
    033            float f3 = -f2 * 0.2F - (float)MathHelper.floor_float(-f2 * 0.1F);
    034            byte b0 = 1;
    035            double d3 = (double)f2 * 0.025D * (1.0D - (double)(b0 & 1) * 2.5D);
    036            tessellator.startDrawingQuads();
    037            tessellator.setColorRGBA(255, 255, 255, 32);
    038            double d4 = (double)b0 * 0.2D;
    039            double d5 = 0.5D + Math.cos(d3 + 2.356194490192345D) * d4;
    040            double d6 = 0.5D + Math.sin(d3 + 2.356194490192345D) * d4;
    041            double d7 = 0.5D + Math.cos(d3 + (Math.PI / 4D)) * d4;
    042            double d8 = 0.5D + Math.sin(d3 + (Math.PI / 4D)) * d4;
    043            double d9 = 0.5D + Math.cos(d3 + 3.9269908169872414D) * d4;
    044            double d10 = 0.5D + Math.sin(d3 + 3.9269908169872414D) * d4;
    045            double d11 = 0.5D + Math.cos(d3 + 5.497787143782138D) * d4;
    046            double d12 = 0.5D + Math.sin(d3 + 5.497787143782138D) * d4;
    047            double d13 = (double)(256.0F * f1);
    048            double d14 = 0.0D;
    049            double d15 = 1.0D;
    050            double d16 = (double)(-1.0F + f3);
    051            double d17 = (double)(256.0F * f1) * (0.5D / d4) + d16;
    052            tessellator.addVertexWithUV(par2 + d5, par4 + d13, par6 + d6, d15, d17);
    053            tessellator.addVertexWithUV(par2 + d5, par4, par6 + d6, d15, d16);
    054            tessellator.addVertexWithUV(par2 + d7, par4, par6 + d8, d14, d16);
    055            tessellator.addVertexWithUV(par2 + d7, par4 + d13, par6 + d8, d14, d17);
    056            tessellator.addVertexWithUV(par2 + d11, par4 + d13, par6 + d12, d15, d17);
    057            tessellator.addVertexWithUV(par2 + d11, par4, par6 + d12, d15, d16);
    058            tessellator.addVertexWithUV(par2 + d9, par4, par6 + d10, d14, d16);
    059            tessellator.addVertexWithUV(par2 + d9, par4 + d13, par6 + d10, d14, d17);
    060            tessellator.addVertexWithUV(par2 + d7, par4 + d13, par6 + d8, d15, d17);
    061            tessellator.addVertexWithUV(par2 + d7, par4, par6 + d8, d15, d16);
    062            tessellator.addVertexWithUV(par2 + d11, par4, par6 + d12, d14, d16);
    063            tessellator.addVertexWithUV(par2 + d11, par4 + d13, par6 + d12, d14, d17);
    064            tessellator.addVertexWithUV(par2 + d9, par4 + d13, par6 + d10, d15, d17);
    065            tessellator.addVertexWithUV(par2 + d9, par4, par6 + d10, d15, d16);
    066            tessellator.addVertexWithUV(par2 + d5, par4, par6 + d6, d14, d16);
    067            tessellator.addVertexWithUV(par2 + d5, par4 + d13, par6 + d6, d14, d17);
    068            tessellator.draw();
    069            GL11.glEnable(GL11.GL_BLEND);
    070            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    071            GL11.glDepthMask(false);
    072            tessellator.startDrawingQuads();
    073            tessellator.setColorRGBA(255, 255, 255, 32);
    074            double d18 = 0.2D;
    075            double d19 = 0.2D;
    076            double d20 = 0.8D;
    077            double d21 = 0.2D;
    078            double d22 = 0.2D;
    079            double d23 = 0.8D;
    080            double d24 = 0.8D;
    081            double d25 = 0.8D;
    082            double d26 = (double)(256.0F * f1);
    083            double d27 = 0.0D;
    084            double d28 = 1.0D;
    085            double d29 = (double)(-1.0F + f3);
    086            double d30 = (double)(256.0F * f1) + d29;
    087            tessellator.addVertexWithUV(par2 + d18, par4 + d26, par6 + d19, d28, d30);
    088            tessellator.addVertexWithUV(par2 + d18, par4, par6 + d19, d28, d29);
    089            tessellator.addVertexWithUV(par2 + d20, par4, par6 + d21, d27, d29);
    090            tessellator.addVertexWithUV(par2 + d20, par4 + d26, par6 + d21, d27, d30);
    091            tessellator.addVertexWithUV(par2 + d24, par4 + d26, par6 + d25, d28, d30);
    092            tessellator.addVertexWithUV(par2 + d24, par4, par6 + d25, d28, d29);
    093            tessellator.addVertexWithUV(par2 + d22, par4, par6 + d23, d27, d29);
    094            tessellator.addVertexWithUV(par2 + d22, par4 + d26, par6 + d23, d27, d30);
    095            tessellator.addVertexWithUV(par2 + d20, par4 + d26, par6 + d21, d28, d30);
    096            tessellator.addVertexWithUV(par2 + d20, par4, par6 + d21, d28, d29);
    097            tessellator.addVertexWithUV(par2 + d24, par4, par6 + d25, d27, d29);
    098            tessellator.addVertexWithUV(par2 + d24, par4 + d26, par6 + d25, d27, d30);
    099            tessellator.addVertexWithUV(par2 + d22, par4 + d26, par6 + d23, d28, d30);
    100            tessellator.addVertexWithUV(par2 + d22, par4, par6 + d23, d28, d29);
    101            tessellator.addVertexWithUV(par2 + d18, par4, par6 + d19, d27, d29);
    102            tessellator.addVertexWithUV(par2 + d18, par4 + d26, par6 + d19, d27, d30);
    103            tessellator.draw();
    104            GL11.glEnable(GL11.GL_LIGHTING);
    105            GL11.glEnable(GL11.GL_TEXTURE_2D);
    106            GL11.glDepthMask(true);
    107        }
    108    }
    109
    110    public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8)
    111    {
    112        this.renderTileEntityBeaconAt((TileEntityBeacon)par1TileEntity, par2, par4, par6, par8);
    113    }
    114}