package joshie.harvest.npcs.render;
import joshie.harvest.api.npc.INPCHelper;
import joshie.harvest.npcs.entity.EntityNPC;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.layers.LayerArrow;
import net.minecraft.client.renderer.entity.layers.LayerBipedArmor;
import net.minecraft.client.renderer.entity.layers.LayerCustomHead;
import net.minecraft.client.renderer.entity.layers.LayerHeldItem;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderNPC extends RenderLiving<EntityNPC> {
private static final ModelNPC STEVE = new ModelNPC(false);
private static final ModelNPC ALEX = new ModelNPC(true);
public RenderNPC(RenderManager renderManager) {
super(renderManager, STEVE, 0.5F);
this.addLayer(new LayerBipedArmor(this));
this.addLayer(new LayerHeldItem(this));
this.addLayer(new LayerArrow(this));
this.addLayer(new LayerCustomHead(this.getMainModel().bipedHead));
}
@Override
protected ResourceLocation getEntityTexture(EntityNPC npc) {
return npc.getNPC().getSkin();
}
@Override
public ModelNPC getMainModel() {
return (ModelNPC ) super.getMainModel();
}
@Override
protected void preRenderCallback(EntityNPC npc, float partialTickTime) {
GlStateManager.scale(0.9375F, 0.9375F, 0.9375F);
}
@Override
protected boolean canRenderName(EntityNPC npc) {
return false;
}
//Renders the Entity
@Override
public void doRender(EntityNPC npc, double x, double y, double z, float entityYaw, float partialTicks) {
updateModel(npc);
GlStateManager.pushMatrix();
if (npc.getNPC().getAge() == INPCHelper.Age.CHILD) {
getMainModel().isChild = true;
mainModel.isChild = true;
if (getMainModel() != null) {
getMainModel().isChild = true;
}
}
GlStateManager.scale(npc.getNPC().getHeight(), npc.getNPC().getHeight(), npc.getNPC().getHeight());
GlStateManager.translate(0F, npc.getNPC().getOffset(), 0F);
if (npc.isSneaking()) {
y -= npc.getYOffset();
}
super.doRender(npc, x, y, z, entityYaw, partialTicks);
GlStateManager.popMatrix();
}
private void updateModel(EntityNPC npc) {
mainModel = npc.getNPC().isAlexSkin() ? ALEX : STEVE;
}
}