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 }