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 static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED; 007 import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D; 008 import net.minecraftforge.client.IItemRenderer; 009 import net.minecraftforge.client.MinecraftForgeClient; 010 011 @SideOnly(Side.CLIENT) 012 public class RenderBiped extends RenderLiving 013 { 014 protected ModelBiped modelBipedMain; 015 protected float field_77070_b; 016 protected ModelBiped field_82423_g; 017 protected ModelBiped field_82425_h; 018 public static String[] field_82424_k = new String[] {"cloth", "chain", "iron", "diamond", "gold"}; 019 020 public RenderBiped(ModelBiped par1ModelBiped, float par2) 021 { 022 this(par1ModelBiped, par2, 1.0F); 023 } 024 025 public RenderBiped(ModelBiped par1ModelBiped, float par2, float par3) 026 { 027 super(par1ModelBiped, par2); 028 this.modelBipedMain = par1ModelBiped; 029 this.field_77070_b = par3; 030 this.func_82421_b(); 031 } 032 033 protected void func_82421_b() 034 { 035 this.field_82423_g = new ModelBiped(1.0F); 036 this.field_82425_h = new ModelBiped(0.5F); 037 } 038 039 /** 040 * Queries whether should render the specified pass or not. 041 */ 042 protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3) 043 { 044 ItemStack var4 = par1EntityLiving.func_82169_q(3 - par2); 045 046 if (var4 != null) 047 { 048 Item var5 = var4.getItem(); 049 050 if (var5 instanceof ItemArmor) 051 { 052 ItemArmor var6 = (ItemArmor)var5; 053 this.loadTexture("/armor/" + field_82424_k[var6.renderIndex] + "_" + (par2 == 2 ? 2 : 1) + ".png"); 054 ModelBiped var7 = par2 == 2 ? this.field_82425_h : this.field_82423_g; 055 var7.bipedHead.showModel = par2 == 0; 056 var7.bipedHeadwear.showModel = par2 == 0; 057 var7.bipedBody.showModel = par2 == 1 || par2 == 2; 058 var7.bipedRightArm.showModel = par2 == 1; 059 var7.bipedLeftArm.showModel = par2 == 1; 060 var7.bipedRightLeg.showModel = par2 == 2 || par2 == 3; 061 var7.bipedLeftLeg.showModel = par2 == 2 || par2 == 3; 062 this.setRenderPassModel(var7); 063 064 if (var7 != null) 065 { 066 var7.onGround = this.mainModel.onGround; 067 } 068 069 if (var7 != null) 070 { 071 var7.isRiding = this.mainModel.isRiding; 072 } 073 074 if (var7 != null) 075 { 076 var7.isChild = this.mainModel.isChild; 077 } 078 079 float var8 = 1.0F; 080 081 if (var6.func_82812_d() == EnumArmorMaterial.CLOTH) 082 { 083 int var9 = var6.func_82814_b(var4); 084 float var10 = (float)(var9 >> 16 & 255) / 255.0F; 085 float var11 = (float)(var9 >> 8 & 255) / 255.0F; 086 float var12 = (float)(var9 & 255) / 255.0F; 087 GL11.glColor3f(var8 * var10, var8 * var11, var8 * var12); 088 089 if (var4.isItemEnchanted()) 090 { 091 return 31; 092 } 093 094 return 16; 095 } 096 097 GL11.glColor3f(var8, var8, var8); 098 099 if (var4.isItemEnchanted()) 100 { 101 return 15; 102 } 103 104 return 1; 105 } 106 } 107 108 return -1; 109 } 110 111 protected void func_82408_c(EntityLiving par1EntityLiving, int par2, float par3) 112 { 113 ItemStack var4 = par1EntityLiving.func_82169_q(3 - par2); 114 115 if (var4 != null) 116 { 117 Item var5 = var4.getItem(); 118 119 if (var5 instanceof ItemArmor) 120 { 121 ItemArmor var6 = (ItemArmor)var5; 122 this.loadTexture("/armor/" + field_82424_k[var6.renderIndex] + "_" + (par2 == 2 ? 2 : 1) + "_b.png"); 123 float var7 = 1.0F; 124 GL11.glColor3f(var7, var7, var7); 125 } 126 } 127 } 128 129 public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) 130 { 131 float var10 = 1.0F; 132 GL11.glColor3f(var10, var10, var10); 133 ItemStack var11 = par1EntityLiving.getHeldItem(); 134 this.func_82420_a(par1EntityLiving, var11); 135 double var12 = par4 - (double)par1EntityLiving.yOffset; 136 137 if (par1EntityLiving.isSneaking() && !(par1EntityLiving instanceof EntityPlayerSP)) 138 { 139 var12 -= 0.125D; 140 } 141 142 super.doRenderLiving(par1EntityLiving, par2, var12, par6, par8, par9); 143 this.field_82423_g.aimedBow = this.field_82425_h.aimedBow = this.modelBipedMain.aimedBow = false; 144 this.field_82423_g.isSneak = this.field_82425_h.isSneak = this.modelBipedMain.isSneak = false; 145 this.field_82423_g.heldItemRight = this.field_82425_h.heldItemRight = this.modelBipedMain.heldItemRight = 0; 146 } 147 148 protected void func_82420_a(EntityLiving par1EntityLiving, ItemStack par2ItemStack) 149 { 150 this.field_82423_g.heldItemRight = this.field_82425_h.heldItemRight = this.modelBipedMain.heldItemRight = par2ItemStack != null ? 1 : 0; 151 this.field_82423_g.isSneak = this.field_82425_h.isSneak = this.modelBipedMain.isSneak = par1EntityLiving.isSneaking(); 152 } 153 154 protected void renderEquippedItems(EntityLiving par1EntityLiving, float par2) 155 { 156 float var3 = 1.0F; 157 GL11.glColor3f(var3, var3, var3); 158 super.renderEquippedItems(par1EntityLiving, par2); 159 ItemStack var4 = par1EntityLiving.getHeldItem(); 160 ItemStack var5 = par1EntityLiving.func_82169_q(3); 161 float var6; 162 163 if (var5 != null) 164 { 165 GL11.glPushMatrix(); 166 this.modelBipedMain.bipedHead.postRender(0.0625F); 167 168 IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var5, EQUIPPED); 169 boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var5, BLOCK_3D)); 170 171 if (var5.getItem() instanceof ItemBlock) 172 { 173 if (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var5.itemID].getRenderType())) 174 { 175 var6 = 0.625F; 176 GL11.glTranslatef(0.0F, -0.25F, 0.0F); 177 GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); 178 GL11.glScalef(var6, -var6, -var6); 179 } 180 181 this.renderManager.itemRenderer.renderItem(par1EntityLiving, var5, 0); 182 } 183 else if (var5.getItem().shiftedIndex == Item.field_82799_bQ.shiftedIndex) 184 { 185 var6 = 1.0625F; 186 GL11.glScalef(var6, -var6, -var6); 187 String var7 = ""; 188 189 if (var5.hasTagCompound() && var5.getTagCompound().hasKey("SkullOwner")) 190 { 191 var7 = var5.getTagCompound().getString("SkullOwner"); 192 } 193 194 TileEntitySkullRenderer.field_82397_a.func_82393_a(-0.5F, 0.0F, -0.5F, 1, 180.0F, var5.getItemDamage(), var7); 195 } 196 197 GL11.glPopMatrix(); 198 } 199 200 if (var4 != null) 201 { 202 GL11.glPushMatrix(); 203 204 if (this.mainModel.isChild) 205 { 206 var6 = 0.5F; 207 GL11.glTranslatef(0.0F, 0.625F, 0.0F); 208 GL11.glRotatef(-20.0F, -1.0F, 0.0F, 0.0F); 209 GL11.glScalef(var6, var6, var6); 210 } 211 212 this.modelBipedMain.bipedRightArm.postRender(0.0625F); 213 GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F); 214 215 IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var4, EQUIPPED); 216 boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var4, BLOCK_3D)); 217 218 if (var4.getItem() instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var4.itemID].getRenderType()))) 219 { 220 var6 = 0.5F; 221 GL11.glTranslatef(0.0F, 0.1875F, -0.3125F); 222 var6 *= 0.75F; 223 GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); 224 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 225 GL11.glScalef(var6, -var6, var6); 226 } 227 else if (var4.itemID == Item.bow.shiftedIndex) 228 { 229 var6 = 0.625F; 230 GL11.glTranslatef(0.0F, 0.125F, 0.3125F); 231 GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); 232 GL11.glScalef(var6, -var6, var6); 233 GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); 234 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 235 } 236 else if (Item.itemsList[var4.itemID].isFull3D()) 237 { 238 var6 = 0.625F; 239 240 if (Item.itemsList[var4.itemID].shouldRotateAroundWhenRendering()) 241 { 242 GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); 243 GL11.glTranslatef(0.0F, -0.125F, 0.0F); 244 } 245 246 this.func_82422_c(); 247 GL11.glScalef(var6, -var6, var6); 248 GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); 249 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 250 } 251 else 252 { 253 var6 = 0.375F; 254 GL11.glTranslatef(0.25F, 0.1875F, -0.1875F); 255 GL11.glScalef(var6, var6, var6); 256 GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F); 257 GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); 258 GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); 259 } 260 261 this.renderManager.itemRenderer.renderItem(par1EntityLiving, var4, 0); 262 263 if (var4.getItem().requiresMultipleRenderPasses()) 264 { 265 for (int x = 1; x < var4.getItem().getRenderPasses(var4.getItemDamage()); x++) 266 { 267 this.renderManager.itemRenderer.renderItem(par1EntityLiving, var4, x); 268 } 269 } 270 271 GL11.glPopMatrix(); 272 } 273 } 274 275 protected void func_82422_c() 276 { 277 GL11.glTranslatef(0.0F, 0.1875F, 0.0F); 278 } 279 280 /** 281 * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then 282 * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic 283 * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1, 284 * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that. 285 */ 286 public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) 287 { 288 this.doRenderLiving((EntityLiving)par1Entity, par2, par4, par6, par8, par9); 289 } 290 }