package joshie.harvest.npcs.render;
import joshie.harvest.api.npc.INPCHelper;
import joshie.harvest.api.npc.NPC;
import joshie.harvest.core.base.render.FakeEntityRenderer.EntityItemRenderer;
import joshie.harvest.core.helpers.MCClientHelper;
import joshie.harvest.core.helpers.StackRenderHelper;
import joshie.harvest.npcs.HFNPCs;
import joshie.harvest.npcs.entity.EntityNPC;
import joshie.harvest.npcs.entity.EntityNPCVillager;
import joshie.harvest.npcs.render.NPCItemRenderer.NPCTile;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import javax.annotation.Nullable;
import static joshie.harvest.core.base.render.FakeEntityRenderer.SHADOW;
public class NPCItemRenderer extends TileEntitySpecialRenderer<NPCTile> {
private final ModelNPC modelAlex;
private final ModelNPC modelSteve;
private EntityNPC fake;
public NPCItemRenderer() {
this.modelAlex = new ModelNPC(true);
this.modelSteve = new ModelNPC(false);
}
@Override
public void renderTileEntityAt(@Nullable NPCTile fake, double x, double y, double z, float partialTicks, int destroyStage) {
if (fake != null) { //DEBUG
/*GlStateManager.pushMatrix();
GlStateManager.enableLighting();
GlStateManager.translate(0.5F, -0.05F, 0.5F);
GlStateManager.scale(-5F, 5F, 5F);
GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(180F, 1.0F, 0.0F, 0.0F);
GlStateManager.pushMatrix();
GlStateManager.disableCull();
GlStateManager.enableRescaleNormal();
GlStateManager.scale(-1.0F, -1.0F, 1.0F);
GlStateManager.translate(0.0F, -1.501F, 0.0F);
if (renderShadow) bindTexture(SHADOW);
else bindTexture(fake.npc.getSkin());
ModelNPC model = fake.npc.isAlexSkin() ? modelAlex : modelSteve;
model.isChild = fake.npc.getAge() == INPCHelper.Age.CHILD;
model.render(getNPC(), 0F, 0F, 0F, 0F, 0F, 0.0625F);
GlStateManager.disableRescaleNormal();
GlStateManager.enableCull();
GlStateManager.popMatrix();
GlStateManager.popMatrix(); */
GlStateManager.pushMatrix();
GlStateManager.translate(0.5F, -0.05F, 0.5F);
GlStateManager.scale(-0.75F, 0.75F, 0.75F);
GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(180F, 1.0F, 0.0F, 0.0F);
GlStateManager.pushMatrix();
GlStateManager.disableCull();
GlStateManager.enableRescaleNormal();
GlStateManager.scale(-1.0F, -1.0F, 1.0F);
GlStateManager.translate(0.0F, -1.501F, 0.0F);
if (StackRenderHelper.renderShadow) {
bindTexture(SHADOW);
GlStateManager.disableLighting();
} else bindTexture(fake.npc.getSkin());
ModelNPC model = fake.npc.isAlexSkin() ? modelAlex : modelSteve;
model.isChild = fake.npc.getAge() == INPCHelper.Age.CHILD;
model.render(getNPC(), 0F, 0F, 0F, 0F, 0F, 0.0625F);
if (StackRenderHelper.renderShadow) GlStateManager.enableLighting();
GlStateManager.disableRescaleNormal();
GlStateManager.enableCull();
GlStateManager.popMatrix();
GlStateManager.popMatrix();
}
}
private EntityNPC getNPC() {
if (fake == null) fake = new EntityNPCVillager(MCClientHelper.getWorld());
return fake;
}
public static class NPCTile extends EntityItemRenderer {
public static final NPCTile INSTANCE = new NPCTile();
public NPC npc;
@Override
public void setStack(ItemStack stack) {
this.npc = HFNPCs.SPAWNER_NPC.getObjectFromStack(stack);
}
}
}