001 package net.minecraft.client.renderer.entity;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.block.Block;
006 import net.minecraft.client.model.ModelWitch;
007 import net.minecraft.client.renderer.RenderBlocks;
008 import net.minecraft.entity.Entity;
009 import net.minecraft.entity.EntityLiving;
010 import net.minecraft.entity.monster.EntityWitch;
011 import net.minecraft.item.Item;
012 import net.minecraft.item.ItemStack;
013 import org.lwjgl.opengl.GL11;
014
015 @SideOnly(Side.CLIENT)
016 public class RenderWitch extends RenderLiving
017 {
018 private ModelWitch field_82414_a;
019 private int field_82413_f;
020
021 public RenderWitch()
022 {
023 super(new ModelWitch(0.0F), 0.5F);
024 this.field_82414_a = (ModelWitch)this.mainModel;
025 this.field_82413_f = this.field_82414_a.func_82899_a();
026 }
027
028 public void func_82412_a(EntityWitch par1EntityWitch, double par2, double par4, double par6, float par8, float par9)
029 {
030 ItemStack var10 = par1EntityWitch.getHeldItem();
031
032 if (this.field_82414_a.func_82899_a() != this.field_82413_f)
033 {
034 System.out.println("Updating witch model");
035 this.mainModel = this.field_82414_a = new ModelWitch(0.0F);
036 this.field_82413_f = this.field_82414_a.func_82899_a();
037 }
038
039 this.field_82414_a.field_82900_g = var10 != null;
040 super.doRenderLiving(par1EntityWitch, par2, par4, par6, par8, par9);
041 }
042
043 protected void func_82411_a(EntityWitch par1EntityWitch, float par2)
044 {
045 float var3 = 1.0F;
046 GL11.glColor3f(var3, var3, var3);
047 super.renderEquippedItems(par1EntityWitch, par2);
048 ItemStack var4 = par1EntityWitch.getHeldItem();
049
050 if (var4 != null)
051 {
052 GL11.glPushMatrix();
053 float var5;
054
055 if (this.mainModel.isChild)
056 {
057 var5 = 0.5F;
058 GL11.glTranslatef(0.0F, 0.625F, 0.0F);
059 GL11.glRotatef(-20.0F, -1.0F, 0.0F, 0.0F);
060 GL11.glScalef(var5, var5, var5);
061 }
062
063 this.field_82414_a.field_82898_f.postRender(0.0625F);
064 GL11.glTranslatef(-0.0625F, 0.53125F, 0.21875F);
065
066 if (var4.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var4.itemID].getRenderType()))
067 {
068 var5 = 0.5F;
069 GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
070 var5 *= 0.75F;
071 GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
072 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
073 GL11.glScalef(var5, -var5, var5);
074 }
075 else if (var4.itemID == Item.bow.itemID)
076 {
077 var5 = 0.625F;
078 GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
079 GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
080 GL11.glScalef(var5, -var5, var5);
081 GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
082 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
083 }
084 else if (Item.itemsList[var4.itemID].isFull3D())
085 {
086 var5 = 0.625F;
087
088 if (Item.itemsList[var4.itemID].shouldRotateAroundWhenRendering())
089 {
090 GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
091 GL11.glTranslatef(0.0F, -0.125F, 0.0F);
092 }
093
094 this.func_82410_b();
095 GL11.glScalef(var5, -var5, var5);
096 GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
097 GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
098 }
099 else
100 {
101 var5 = 0.375F;
102 GL11.glTranslatef(0.25F, 0.1875F, -0.1875F);
103 GL11.glScalef(var5, var5, var5);
104 GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F);
105 GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
106 GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F);
107 }
108
109 GL11.glRotatef(-15.0F, 1.0F, 0.0F, 0.0F);
110 GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F);
111 this.renderManager.itemRenderer.renderItem(par1EntityWitch, var4, 0);
112
113 if (var4.getItem().requiresMultipleRenderPasses())
114 {
115 this.renderManager.itemRenderer.renderItem(par1EntityWitch, var4, 1);
116 }
117
118 GL11.glPopMatrix();
119 }
120 }
121
122 protected void func_82410_b()
123 {
124 GL11.glTranslatef(0.0F, 0.1875F, 0.0F);
125 }
126
127 protected void func_82409_b(EntityWitch par1EntityWitch, float par2)
128 {
129 float var3 = 0.9375F;
130 GL11.glScalef(var3, var3, var3);
131 }
132
133 /**
134 * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args:
135 * entityLiving, partialTickTime
136 */
137 protected void preRenderCallback(EntityLiving par1EntityLiving, float par2)
138 {
139 this.func_82409_b((EntityWitch)par1EntityLiving, par2);
140 }
141
142 protected void renderEquippedItems(EntityLiving par1EntityLiving, float par2)
143 {
144 this.func_82411_a((EntityWitch)par1EntityLiving, par2);
145 }
146
147 public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9)
148 {
149 this.func_82412_a((EntityWitch)par1EntityLiving, par2, par4, par6, par8, par9);
150 }
151
152 /**
153 * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
154 * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
155 * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
156 * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
157 */
158 public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
159 {
160 this.func_82412_a((EntityWitch)par1Entity, par2, par4, par6, par8, par9);
161 }
162 }