001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import org.lwjgl.opengl.GL11;
006    import org.lwjgl.opengl.GL12;
007    
008    @SideOnly(Side.CLIENT)
009    public class TileEntitySkullRenderer extends TileEntitySpecialRenderer
010    {
011        public static TileEntitySkullRenderer skullRenderer;
012        private ModelSkeletonHead field_82396_c = new ModelSkeletonHead(0, 0, 64, 32);
013        private ModelSkeletonHead field_82395_d = new ModelSkeletonHead(0, 0, 64, 64);
014    
015        /**
016         * Render a skull tile entity.
017         */
018        public void renderTileEntitySkullAt(TileEntitySkull par1TileEntitySkull, double par2, double par4, double par6, float par8)
019        {
020            this.func_82393_a((float)par2, (float)par4, (float)par6, par1TileEntitySkull.getBlockMetadata() & 7, (float)(par1TileEntitySkull.func_82119_b() * 360) / 16.0F, par1TileEntitySkull.func_82117_a(), par1TileEntitySkull.func_82120_c());
021        }
022    
023        /**
024         * Associate a TileEntityRenderer with this TileEntitySpecialRenderer
025         */
026        public void setTileEntityRenderer(TileEntityRenderer par1TileEntityRenderer)
027        {
028            super.setTileEntityRenderer(par1TileEntityRenderer);
029            skullRenderer = this;
030        }
031    
032        public void func_82393_a(float par1, float par2, float par3, int par4, float par5, int par6, String par7Str)
033        {
034            ModelSkeletonHead var8 = this.field_82396_c;
035    
036            switch (par6)
037            {
038                case 0:
039                default:
040                    this.bindTextureByName("/mob/skeleton.png");
041                    break;
042                case 1:
043                    this.bindTextureByName("/mob/skeleton_wither.png");
044                    break;
045                case 2:
046                    this.bindTextureByName("/mob/zombie.png");
047                    var8 = this.field_82395_d;
048                    break;
049                case 3:
050                    if (par7Str != null && par7Str.length() > 0)
051                    {
052                        String var9 = "http://skins.minecraft.net/MinecraftSkins/" + StringUtils.stripControlCodes(par7Str) + ".png";
053    
054                        if (!skullRenderer.tileEntityRenderer.renderEngine.func_82773_c(var9))
055                        {
056                            skullRenderer.tileEntityRenderer.renderEngine.obtainImageData(var9, new ImageBufferDownload());
057                        }
058    
059                        this.func_82392_a(var9, "/mob/char.png");
060                    }
061                    else
062                    {
063                        this.bindTextureByName("/mob/char.png");
064                    }
065    
066                    break;
067                case 4:
068                    this.bindTextureByName("/mob/creeper.png");
069            }
070    
071            GL11.glPushMatrix();
072            GL11.glDisable(GL11.GL_CULL_FACE);
073    
074            if (par4 != 1)
075            {
076                switch (par4)
077                {
078                    case 2:
079                        GL11.glTranslatef(par1 + 0.5F, par2 + 0.25F, par3 + 0.74F);
080                        break;
081                    case 3:
082                        GL11.glTranslatef(par1 + 0.5F, par2 + 0.25F, par3 + 0.26F);
083                        par5 = 180.0F;
084                        break;
085                    case 4:
086                        GL11.glTranslatef(par1 + 0.74F, par2 + 0.25F, par3 + 0.5F);
087                        par5 = 270.0F;
088                        break;
089                    case 5:
090                    default:
091                        GL11.glTranslatef(par1 + 0.26F, par2 + 0.25F, par3 + 0.5F);
092                        par5 = 90.0F;
093                }
094            }
095            else
096            {
097                GL11.glTranslatef(par1 + 0.5F, par2, par3 + 0.5F);
098            }
099    
100            float var10 = 0.0625F;
101            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
102            GL11.glScalef(-1.0F, -1.0F, 1.0F);
103            GL11.glEnable(GL11.GL_ALPHA_TEST);
104            var8.render((Entity)null, 0.0F, 0.0F, 0.0F, par5, 0.0F, var10);
105            GL11.glPopMatrix();
106        }
107    
108        public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8)
109        {
110            this.renderTileEntitySkullAt((TileEntitySkull)par1TileEntity, par2, par4, par6, par8);
111        }
112    }