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 }