package net.minecraft.client.renderer.entity;
import net.minecraft.client.model.ModelGuardian;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.culling.ICamera;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityGuardian;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
import org.lwjgl.opengl.GL11;
public class RenderGuardian extends RenderLiving
{
private static final ResourceLocation field_177114_e = new ResourceLocation("textures/entity/guardian.png");
private static final ResourceLocation field_177116_j = new ResourceLocation("textures/entity/guardian_elder.png");
private static final ResourceLocation field_177117_k = new ResourceLocation("textures/entity/guardian_beam.png");
int field_177115_a;
private static final String __OBFID = "CL_00002443";
public RenderGuardian(RenderManager p_i46171_1_)
{
super(p_i46171_1_, new ModelGuardian(), 0.5F);
this.field_177115_a = ((ModelGuardian)this.mainModel).func_178706_a();
}
public boolean func_177113_a(EntityGuardian p_177113_1_, ICamera p_177113_2_, double p_177113_3_, double p_177113_5_, double p_177113_7_)
{
if (super.func_177104_a(p_177113_1_, p_177113_2_, p_177113_3_, p_177113_5_, p_177113_7_))
{
return true;
}
else
{
if (p_177113_1_.func_175474_cn())
{
EntityLivingBase var9 = p_177113_1_.func_175466_co();
if (var9 != null)
{
Vec3 var10 = this.func_177110_a(var9, (double)var9.height * 0.5D, 1.0F);
Vec3 var11 = this.func_177110_a(p_177113_1_, (double)p_177113_1_.getEyeHeight(), 1.0F);
if (p_177113_2_.isBoundingBoxInFrustum(AxisAlignedBB.fromBounds(var11.xCoord, var11.yCoord, var11.zCoord, var10.xCoord, var10.yCoord, var10.zCoord)))
{
return true;
}
}
}
return false;
}
}
private Vec3 func_177110_a(EntityLivingBase p_177110_1_, double p_177110_2_, float p_177110_4_)
{
double var5 = p_177110_1_.lastTickPosX + (p_177110_1_.posX - p_177110_1_.lastTickPosX) * (double)p_177110_4_;
double var7 = p_177110_2_ + p_177110_1_.lastTickPosY + (p_177110_1_.posY - p_177110_1_.lastTickPosY) * (double)p_177110_4_;
double var9 = p_177110_1_.lastTickPosZ + (p_177110_1_.posZ - p_177110_1_.lastTickPosZ) * (double)p_177110_4_;
return new Vec3(var5, var7, var9);
}
public void func_177109_a(EntityGuardian p_177109_1_, double p_177109_2_, double p_177109_4_, double p_177109_6_, float p_177109_8_, float p_177109_9_)
{
if (this.field_177115_a != ((ModelGuardian)this.mainModel).func_178706_a())
{
this.mainModel = new ModelGuardian();
this.field_177115_a = ((ModelGuardian)this.mainModel).func_178706_a();
}
super.doRender((EntityLiving)p_177109_1_, p_177109_2_, p_177109_4_, p_177109_6_, p_177109_8_, p_177109_9_);
EntityLivingBase var10 = p_177109_1_.func_175466_co();
if (var10 != null)
{
float var11 = p_177109_1_.func_175477_p(p_177109_9_);
Tessellator var12 = Tessellator.getInstance();
WorldRenderer var13 = var12.getWorldRenderer();
this.bindTexture(field_177117_k);
GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F);
GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F);
GlStateManager.disableLighting();
GlStateManager.disableCull();
GlStateManager.disableBlend();
GlStateManager.depthMask(true);
float var14 = 240.0F;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, var14, var14);
GlStateManager.tryBlendFuncSeparate(770, 1, 1, 0);
float var15 = (float)p_177109_1_.worldObj.getTotalWorldTime() + p_177109_9_;
float var16 = var15 * 0.5F % 1.0F;
float var17 = p_177109_1_.getEyeHeight();
GlStateManager.pushMatrix();
GlStateManager.translate((float)p_177109_2_, (float)p_177109_4_ + var17, (float)p_177109_6_);
Vec3 var18 = this.func_177110_a(var10, (double)var10.height * 0.5D, p_177109_9_);
Vec3 var19 = this.func_177110_a(p_177109_1_, (double)var17, p_177109_9_);
Vec3 var20 = var18.subtract(var19);
double var21 = var20.lengthVector() + 1.0D;
var20 = var20.normalize();
float var23 = (float)Math.acos(var20.yCoord);
float var24 = (float)Math.atan2(var20.zCoord, var20.xCoord);
GlStateManager.rotate((((float)Math.PI / 2F) + -var24) * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(var23 * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F);
byte var25 = 1;
double var26 = (double)var15 * 0.05D * (1.0D - (double)(var25 & 1) * 2.5D);
var13.startDrawingQuads();
float var28 = var11 * var11;
var13.func_178961_b(64 + (int)(var28 * 240.0F), 32 + (int)(var28 * 192.0F), 128 - (int)(var28 * 64.0F), 255);
double var29 = (double)var25 * 0.2D;
double var31 = var29 * 1.41D;
double var33 = 0.0D + Math.cos(var26 + 2.356194490192345D) * var31;
double var35 = 0.0D + Math.sin(var26 + 2.356194490192345D) * var31;
double var37 = 0.0D + Math.cos(var26 + (Math.PI / 4D)) * var31;
double var39 = 0.0D + Math.sin(var26 + (Math.PI / 4D)) * var31;
double var41 = 0.0D + Math.cos(var26 + 3.9269908169872414D) * var31;
double var43 = 0.0D + Math.sin(var26 + 3.9269908169872414D) * var31;
double var45 = 0.0D + Math.cos(var26 + 5.497787143782138D) * var31;
double var47 = 0.0D + Math.sin(var26 + 5.497787143782138D) * var31;
double var49 = 0.0D + Math.cos(var26 + Math.PI) * var29;
double var51 = 0.0D + Math.sin(var26 + Math.PI) * var29;
double var53 = 0.0D + Math.cos(var26 + 0.0D) * var29;
double var55 = 0.0D + Math.sin(var26 + 0.0D) * var29;
double var57 = 0.0D + Math.cos(var26 + (Math.PI / 2D)) * var29;
double var59 = 0.0D + Math.sin(var26 + (Math.PI / 2D)) * var29;
double var61 = 0.0D + Math.cos(var26 + (Math.PI * 3D / 2D)) * var29;
double var63 = 0.0D + Math.sin(var26 + (Math.PI * 3D / 2D)) * var29;
double var67 = 0.0D;
double var69 = 0.4999D;
double var71 = (double)(-1.0F + var16);
double var73 = var21 * (0.5D / var29) + var71;
var13.addVertexWithUV(var49, var21, var51, var69, var73);
var13.addVertexWithUV(var49, 0.0D, var51, var69, var71);
var13.addVertexWithUV(var53, 0.0D, var55, var67, var71);
var13.addVertexWithUV(var53, var21, var55, var67, var73);
var13.addVertexWithUV(var57, var21, var59, var69, var73);
var13.addVertexWithUV(var57, 0.0D, var59, var69, var71);
var13.addVertexWithUV(var61, 0.0D, var63, var67, var71);
var13.addVertexWithUV(var61, var21, var63, var67, var73);
double var75 = 0.0D;
if (p_177109_1_.ticksExisted % 2 == 0)
{
var75 = 0.5D;
}
var13.addVertexWithUV(var33, var21, var35, 0.5D, var75 + 0.5D);
var13.addVertexWithUV(var37, var21, var39, 1.0D, var75 + 0.5D);
var13.addVertexWithUV(var45, var21, var47, 1.0D, var75);
var13.addVertexWithUV(var41, var21, var43, 0.5D, var75);
var12.draw();
GlStateManager.popMatrix();
}
}
protected void func_177112_a(EntityGuardian p_177112_1_, float p_177112_2_)
{
if (p_177112_1_.func_175461_cl())
{
GlStateManager.scale(2.35F, 2.35F, 2.35F);
}
}
protected ResourceLocation func_177111_a(EntityGuardian p_177111_1_)
{
return p_177111_1_.func_175461_cl() ? field_177116_j : field_177114_e;
}
/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(EntityLiving p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
{
this.func_177109_a((EntityGuardian)p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_);
}
public boolean func_177104_a(EntityLiving p_177104_1_, ICamera p_177104_2_, double p_177104_3_, double p_177104_5_, double p_177104_7_)
{
return this.func_177113_a((EntityGuardian)p_177104_1_, p_177104_2_, p_177104_3_, p_177104_5_, p_177104_7_);
}
/**
* Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args:
* entityLiving, partialTickTime
*/
protected void preRenderCallback(EntityLivingBase p_77041_1_, float p_77041_2_)
{
this.func_177112_a((EntityGuardian)p_77041_1_, p_77041_2_);
}
/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(EntityLivingBase p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
{
this.func_177109_a((EntityGuardian)p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_);
}
/**
* Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
*/
protected ResourceLocation getEntityTexture(Entity p_110775_1_)
{
return this.func_177111_a((EntityGuardian)p_110775_1_);
}
/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(Entity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
{
this.func_177109_a((EntityGuardian)p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_);
}
public boolean func_177071_a(Entity p_177071_1_, ICamera p_177071_2_, double p_177071_3_, double p_177071_5_, double p_177071_7_)
{
return this.func_177113_a((EntityGuardian)p_177071_1_, p_177071_2_, p_177071_3_, p_177071_5_, p_177071_7_);
}
}