package minefantasy.client.entityrender;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import minefantasy.api.hound.*;
import minefantasy.client.TextureHelperMF;
import minefantasy.entity.EntityHound;
import minefantasy.entity.IGrowable;
import minefantasy.item.ItemHoundPackMF;
import minefantasy.system.data_minefantasy;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.entity.passive.EntityWolf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.ForgeHooksClient;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class RenderHound extends RenderLivingMF
{
private ModelHound mail = new ModelHound(0.5F);
private ModelHound plate = new ModelHound(0.65F);
private ModelHoundPack pack = new ModelHoundPack();
private static Minecraft mc = Minecraft.getMinecraft();
public RenderHound(ModelBase base, float shadow)
{
super(base, shadow);
this.setRenderPassModel(base);
}
protected float getTailRotation(EntityHound wolf, float angle)
{
return wolf.getTailRotation();
}
@Override
public int getRenderPasses()
{
return 10;
}
protected int renderSpecial(EntityHound wolf, int render, float f)
{
this.setRenderPassModel(this.mainModel);
float var4;
this.setRenderPassModel(mainModel);
if (render == 0 && wolf.getWolfShaking())
{
var4 = wolf.getBrightness(f) * wolf.getShadingWhileShaking(f);
this.loadTexture(wolf.getTexture());
GL11.glColor3f(var4, var4, var4);
return 1;
}
else if (render == 1 && wolf.isTamed())
{
this.loadTexture(data_minefantasy.image("/mob/Hound/houndCollar.png"));
var4 = 1.0F;
int var5 = wolf.getCollarColour();
GL11.glColor3f(var4 * EntitySheep.fleeceColorTable[var5][0], var4 * EntitySheep.fleeceColorTable[var5][1], var4 * EntitySheep.fleeceColorTable[var5][2]);
return 1;
}
else if (render == 2 || render == 3) // Body Mail
{
GL11.glColor3f(1.0F, 1.0F, 1.0F);
ItemStack stack = wolf.getStackInSlot(render-2);
if (stack != null)
{
Item item = stack.getItem();
if (item instanceof IHoundApparel)
{
IHoundApparel armour = (IHoundApparel)item;
if(armour.getTexture() != null)
{
this.loadTexture(armour.getTexture());
ModelHound model = mail;
int type = render == 2 ? 1 : 0;
//HEAD
model.WolfHead.showModel = type == 1;
model.Nose.showModel = type == 1;
model.Ear1.showModel = type == 1;
model.Ear2.showModel = type == 1;
model.Jaw.showModel = type == 1;
//BODY
model.Leg1.showModel = type == 0;
model.Leg2.showModel = type == 0;
model.Leg3.showModel = type == 0;
model.Leg4.showModel = type == 0;
model.Mane.showModel = type == 0;
model.Body.showModel = type == 0;
model.Tail.showModel = type == 0;
this.setRenderPassModel(model);
if (model != null)
{
model.onGround = this.mainModel.onGround;
}
if (model != null)
{
model.isRiding = this.mainModel.isRiding;
}
if (model != null)
{
model.isChild = this.mainModel.isChild;
}
if (stack.isItemEnchanted())
{
return 15;
}
}
return 1;
}
}
}
else if (render == 4 || render == 5) // Body Plate
{
GL11.glColor3f(1.0F, 1.0F, 1.0F);
ItemStack stack = wolf.getStackInSlot(render-4);
if (stack != null)
{
Item item = stack.getItem();
if (item instanceof IHoundApparel)
{
IHoundApparel armour = (IHoundApparel)item;
boolean r = armour.getOverlay() != null;
if(r)
this.loadTexture(armour.getOverlay());
ModelHound model = r ? plate : mail;
int type = render == 4 ? 1 : 0;
//HEAD
model.WolfHead.showModel = type == 1;
model.Nose.showModel = type == 1;
model.Ear1.showModel = type == 1;
model.Ear2.showModel = type == 1;
model.Jaw.showModel = type == 1;
//BODY
model.Leg1.showModel = type == 0;
model.Leg2.showModel = type == 0;
model.Leg3.showModel = type == 0;
model.Leg4.showModel = type == 0;
model.Mane.showModel = type == 0;
model.Body.showModel = type == 0;
model.Tail.showModel = type == 0;
this.setRenderPassModel(model);
if (model != null)
{
model.onGround = this.mainModel.onGround;
}
if (model != null)
{
model.isRiding = this.mainModel.isRiding;
}
if (model != null)
{
model.isChild = this.mainModel.isChild;
}
if (stack.isItemEnchanted())
{
return 15;
}
return 1;
}
}
}
else if (render == 6 || render == 7) // Pack
{
GL11.glColor3f(1.0F, 1.0F, 1.0F);
ItemStack stack = wolf.getStackInSlot(render - 6);
if (stack != null)
{
Item item = stack.getItem();
if (item instanceof IHoundPackItem)
{
IHoundPackItem pack = (IHoundPackItem)item;
this.loadTexture(pack.getTexture());
ModelHoundPack model = this.pack;
int type = render == 6 ? 1 : 0;
//HEAD
model.feedbag.showModel = type == 1;
//BODY
model.bigPack.showModel = type == 0;
model.pack1.showModel = type == 0;
model.pack2.showModel = type == 0;
model.pack3.showModel = type == 0;
model.pack4.showModel = type == 0;
model.smlPack.showModel = type == 0;
model.PaxkBase.showModel = type == 0;
float offset = (float)Math.toRadians(-90) + ((ModelHound)mainModel).Mane.rotateAngleX;
model.feedbag.rotateAngleX = offset;
model.bigPack.rotateAngleX = offset;
model.pack1.rotateAngleX = offset;
model.pack2.rotateAngleX = offset;
model.pack3.rotateAngleX = offset;
model.pack4.rotateAngleX = offset;
model.smlPack.rotateAngleX = offset;
model.PaxkBase.rotateAngleX = offset;
model.PackBand.rotateAngleX = offset;
this.setRenderPassModel(model);
if (model != null)
{
model.onGround = this.mainModel.onGround;
}
if (model != null)
{
model.isRiding = this.mainModel.isRiding;
}
if (model != null)
{
model.isChild = this.mainModel.isChild;
}
if (stack.isItemEnchanted())
{
return 15;
}
return 1;
}
}
}
else if (render == 8 && wolf.isAngry())
{
this.loadTexture(data_minefantasy.image("/mob/Hound/houndAnger.png"));
return 1;
}
else if (render == 9 && wolf.getSpots() != null)
{
this.loadTexture(data_minefantasy.image("/mob/Hound/spots" + (wolf.invertSpots == 1 ? wolf.getFurTex() : wolf.getSpots()) + ".png"));
return 1;
}
return -1;
}
private void loadTexture(String image)
{
bindTexture(TextureHelperMF.getResource(image));
}
/**
* Queries whether should render the specified pass or not.
*/
@Override
protected int shouldRenderPass(EntityLivingBase entity, int render, float f)
{
return this.renderSpecial((EntityHound)entity, render, f);
}
/**
* Defines what float the third param in setRotationAngles of ModelBase is
*/
@Override
protected float handleRotationFloat(EntityLivingBase entity, float angle)
{
return this.getTailRotation((EntityHound)entity, angle);
}
@Override
protected boolean func_110813_b(EntityLivingBase entity)
{
return shouldRenderLabel((EntityHound)entity);
}
private boolean shouldRenderLabel(EntityHound dog)
{
return dog.isTamed() && dog.hasCustomNameTag() && dog.canSeeName(mc.thePlayer);
}
@Override
protected void preRenderCallback(EntityLivingBase living, float f)
{
this.buffAlpha((EntityHound)living, f);
}
private void buffAlpha(EntityHound dog, float f) {
if(dog.isAlpha())
{
GL11.glScalef(1.25F, 1.2F, 1.2F);
}
}
@Override
protected ResourceLocation getEntityTexture(Entity entity)
{
return getHoundTex((EntityHound)entity);
}
private ResourceLocation getHoundTex(EntityHound entity)
{
return TextureHelperMF.getResource(entity.getTexture());
}
}