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