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}