    001package net.minecraft.client.renderer.tileentity;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import net.minecraft.client.model.ModelSkeletonHead;
    006import net.minecraft.client.renderer.ImageBufferDownload;
    007import net.minecraft.entity.Entity;
    008import net.minecraft.tileentity.TileEntity;
    009import net.minecraft.tileentity.TileEntitySkull;
    010import net.minecraft.util.StringUtils;
    011import org.lwjgl.opengl.GL11;
    012import org.lwjgl.opengl.GL12;
    013
    014@SideOnly(Side.CLIENT)
    015public 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 modelskeletonhead = 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                modelskeletonhead = this.field_82395_d;
    054                break;
    055            case 3:
    056                if (par7Str != null && par7Str.length() > 0)
    057                {
    058                    String s1 = "http://skins.minecraft.net/MinecraftSkins/" + StringUtils.stripControlCodes(par7Str) + ".png";
    059
    060                    if (!skullRenderer.tileEntityRenderer.renderEngine.hasImageData(s1))
    061                    {
    062                        skullRenderer.tileEntityRenderer.renderEngine.obtainImageData(s1, new ImageBufferDownload());
    063                    }
    064
    065                    this.bindTextureByURL(s1, "/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 f4 = 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        modelskeletonhead.render((Entity)null, 0.0F, 0.0F, 0.0F, par5, 0.0F, f4);
    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}