mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 06:07:27 +00:00
433 lines
19 KiB
Java
433 lines
19 KiB
Java
package noppes.npcs.client.renderer;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.client.model.ModelBiped;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.RenderBlocks;
|
|
import net.minecraft.client.renderer.entity.RenderBiped;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLiving;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.item.*;
|
|
import net.minecraftforge.client.ForgeHooksClient;
|
|
import net.minecraftforge.client.IItemRenderer;
|
|
import net.minecraftforge.client.MinecraftForgeClient;
|
|
import noppes.npcs.client.model.ModelMPM;
|
|
import noppes.npcs.client.model.ModelNPCMale;
|
|
import noppes.npcs.constants.EnumAnimation;
|
|
import noppes.npcs.entity.EntityCustomNpc;
|
|
import noppes.npcs.entity.EntityNPCInterface;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED;
|
|
import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D;
|
|
|
|
public class RenderNPCHumanMale extends RenderNPCInterface
|
|
{
|
|
|
|
private ModelNPCMale modelBipedMain;
|
|
protected ModelNPCMale modelArmorChestplate;
|
|
protected ModelNPCMale modelArmor;
|
|
|
|
protected final ModelNPCMale originalBipedMain;
|
|
protected final static ModelMPM steve64 = new ModelMPM(0, false);
|
|
protected final static ModelMPM alex = new ModelMPM(0, true);
|
|
|
|
protected final static ModelMPM steveArmorChest = new ModelMPM(1,0);
|
|
protected final static ModelMPM steveArmor = new ModelMPM(0.5F,0);
|
|
|
|
protected final static ModelMPM alex32armorChest = new ModelMPM(1,1);
|
|
protected final static ModelMPM alex32armor = new ModelMPM(0.5F,1);
|
|
|
|
public RenderNPCHumanMale(ModelNPCMale mainmodel, ModelNPCMale armorChest, ModelNPCMale armor)
|
|
{
|
|
super(mainmodel, 0.5F);
|
|
modelBipedMain = mainmodel;
|
|
originalBipedMain = mainmodel;
|
|
modelArmorChestplate = armorChest;
|
|
modelArmor = armor;
|
|
}
|
|
|
|
protected int func_130006_a(EntityLiving par1EntityLiving, int par2, float par3)
|
|
{
|
|
ItemStack itemstack = par1EntityLiving.func_130225_q(3 - par2);
|
|
|
|
if (itemstack != null)
|
|
{
|
|
Item item = itemstack.getItem();
|
|
|
|
if (item instanceof ItemArmor)
|
|
{
|
|
ItemArmor itemarmor = (ItemArmor)item;
|
|
this.bindTexture(RenderBiped.getArmorResource(par1EntityLiving, itemstack, par2, null));
|
|
ModelBiped modelbiped = par2 == 2 ? this.modelArmor : this.modelArmorChestplate;
|
|
modelbiped.bipedHead.showModel = par2 == 0;
|
|
modelbiped.bipedHeadwear.showModel = par2 == 0;
|
|
modelbiped.bipedBody.showModel = par2 == 1 || par2 == 2;
|
|
modelbiped.bipedRightArm.showModel = par2 == 1;
|
|
modelbiped.bipedLeftArm.showModel = par2 == 1;
|
|
modelbiped.bipedRightLeg.showModel = par2 == 2 || par2 == 3;
|
|
modelbiped.bipedLeftLeg.showModel = par2 == 2 || par2 == 3;
|
|
modelbiped = ForgeHooksClient.getArmorModel(par1EntityLiving, itemstack, par2, modelbiped);
|
|
this.setRenderPassModel(modelbiped);
|
|
modelbiped.onGround = this.mainModel.onGround;
|
|
modelbiped.isRiding = this.mainModel.isRiding;
|
|
modelbiped.isChild = this.mainModel.isChild;
|
|
float f1 = 1.0F;
|
|
|
|
//Move out of if to allow for more then just CLOTH to have color
|
|
int j = itemarmor.getColor(itemstack);
|
|
if (j != -1)
|
|
{
|
|
float f2 = (float)(j >> 16 & 255) / 255.0F;
|
|
float f3 = (float)(j >> 8 & 255) / 255.0F;
|
|
float f4 = (float)(j & 255) / 255.0F;
|
|
GL11.glColor3f(f1 * f2, f1 * f3, f1 * f4);
|
|
|
|
if (itemstack.isItemEnchanted())
|
|
{
|
|
return 31;
|
|
}
|
|
|
|
return 16;
|
|
}
|
|
|
|
GL11.glColor3f(f1, f1, f1);
|
|
|
|
if (itemstack.isItemEnchanted())
|
|
{
|
|
return 15;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
@Override
|
|
protected int shouldRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3){
|
|
return this.func_130006_a((EntityLiving)par1EntityLivingBase, par2, par3);
|
|
}
|
|
|
|
public void renderPlayer(EntityNPCInterface npc, double d, double d1, double d2,
|
|
float f, float f1)
|
|
{
|
|
if(npc instanceof EntityCustomNpc){
|
|
EntityCustomNpc test = (EntityCustomNpc) npc;
|
|
if(test.modelData.entityClass == null){
|
|
int modelVal = npc.display.modelType;
|
|
if(modelVal == 1){
|
|
this.mainModel = steve64;
|
|
this.modelBipedMain = steve64;
|
|
this.modelArmorChestplate = steveArmorChest;
|
|
this.modelArmor = steveArmor;
|
|
}
|
|
else if(modelVal == 2){
|
|
this.mainModel = alex;
|
|
this.modelBipedMain = alex;
|
|
this.modelArmorChestplate = alex32armorChest;
|
|
this.modelArmor = alex32armor;
|
|
}
|
|
else{
|
|
((EntityCustomNpc) npc).modelData.bodywear = 0;
|
|
((EntityCustomNpc) npc).modelData.armwear = 0;
|
|
((EntityCustomNpc) npc).modelData.legwear = 0;
|
|
this.mainModel = originalModel;
|
|
this.modelBipedMain = originalBipedMain;
|
|
this.modelArmorChestplate = steveArmorChest;
|
|
this.modelArmor = steveArmor;
|
|
}
|
|
}
|
|
}
|
|
|
|
ItemStack itemstack = npc.getHeldItem();
|
|
modelArmorChestplate.heldItemRight = modelArmor.heldItemRight = modelBipedMain.heldItemRight =
|
|
itemstack == null ? 0 : npc.hurtResistantTime > 0 ? 3 : 1;
|
|
|
|
modelArmorChestplate.heldItemLeft = modelArmor.heldItemLeft = modelBipedMain.heldItemLeft =
|
|
npc.getOffHand() == null ? 0 : npc.hurtResistantTime > 0 ? 3 : 1;
|
|
|
|
modelArmorChestplate.isSneak = modelArmor.isSneak = modelBipedMain.isSneak = npc.isSneaking();
|
|
|
|
modelArmorChestplate.isSleeping = modelArmor.isSleeping = modelBipedMain.isSleeping = npc.isPlayerSleeping();
|
|
modelArmorChestplate.isDancing = modelArmor.isDancing = modelBipedMain.isDancing = npc.currentAnimation == EnumAnimation.DANCING;
|
|
modelArmorChestplate.aimedBow = modelArmor.aimedBow = modelBipedMain.aimedBow = npc.currentAnimation == EnumAnimation.AIMING;
|
|
|
|
modelArmorChestplate.isRiding = modelArmor.isRiding = modelBipedMain.isRiding = npc.isRiding();
|
|
|
|
double d3 = d1 - (double)npc.yOffset;
|
|
if(npc.isSneaking())
|
|
{
|
|
d3 -= 0.125D;
|
|
}
|
|
super.doRender(npc, d, d3, d2, f, f1);
|
|
modelArmorChestplate.aimedBow = modelArmor.aimedBow = modelBipedMain.aimedBow = false;
|
|
modelArmorChestplate.isSneak = modelArmor.isSneak = modelBipedMain.isSneak = false;
|
|
modelArmorChestplate.heldItemRight = modelArmor.heldItemRight = modelBipedMain.heldItemRight = 0;
|
|
modelArmorChestplate.heldItemLeft = modelArmor.heldItemLeft = modelBipedMain.heldItemLeft = 0;
|
|
}
|
|
|
|
protected void renderSpecials(EntityNPCInterface npc, float f)
|
|
{
|
|
super.renderEquippedItems(npc, f);
|
|
GL11.glColor3f(1,1,1);
|
|
int i = npc.getBrightnessForRender(f);
|
|
int j = i % 65536;
|
|
int k = i / 65536;
|
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
|
|
GL11.glColor3f(1,1,1);
|
|
ItemStack itemstack = npc.inventory.armorItemInSlot(0);
|
|
if(itemstack != null)
|
|
{
|
|
GL11.glPushMatrix();
|
|
if(npc instanceof EntityCustomNpc){
|
|
EntityCustomNpc cnpc = (EntityCustomNpc) npc;
|
|
GL11.glTranslatef(0, cnpc.modelData.getBodyY(), 0);
|
|
this.modelBipedMain.bipedHead.postRender(0.0625F);
|
|
GL11.glScalef(cnpc.modelData.modelScale.head.scaleX, cnpc.modelData.modelScale.head.scaleY, cnpc.modelData.modelScale.head.scaleZ);
|
|
}
|
|
else
|
|
this.modelBipedMain.bipedHead.postRender(0.0625F);
|
|
|
|
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(itemstack, EQUIPPED);
|
|
boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, itemstack, BLOCK_3D));
|
|
|
|
if (itemstack.getItem() instanceof ItemBlock)
|
|
{
|
|
if (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemstack.getItem()).getRenderType()))
|
|
{
|
|
float var6 = 0.625F;
|
|
GL11.glTranslatef(0.0F, -0.25F, 0.0F);
|
|
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glScalef(var6, -var6, -var6);
|
|
}
|
|
|
|
this.renderManager.itemRenderer.renderItem(npc, itemstack, 0);
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
}
|
|
GL11.glColor3f(1,1,1);
|
|
ItemStack itemstack2 = npc.getHeldItem();
|
|
if(itemstack2 != null)
|
|
{
|
|
float var6;
|
|
GL11.glPushMatrix();
|
|
float y = 0;
|
|
float x = 0;
|
|
if(npc instanceof EntityCustomNpc){
|
|
EntityCustomNpc cnpc = (EntityCustomNpc) npc;
|
|
y = (cnpc.modelData.modelScale.arms.scaleY - 1) * 0.7f;
|
|
x = (1 - cnpc.modelData.modelScale.body.scaleX) * 0.28f + (1 - cnpc.modelData.modelScale.arms.scaleX) * 0.175f;
|
|
GL11.glTranslatef(x, cnpc.modelData.getBodyY(), 0);
|
|
}
|
|
this.modelBipedMain.bipedRightArm.postRender(0.0625F);
|
|
|
|
if(npc.getModelType() == 2){
|
|
GL11.glTranslatef(-0.0125F, 0.4375F + y, 0.0625F);
|
|
}
|
|
else {
|
|
GL11.glTranslatef(-0.0625F, 0.4375F + y, 0.0625F);
|
|
}
|
|
|
|
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(itemstack2, EQUIPPED);
|
|
boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, itemstack2, BLOCK_3D));
|
|
Class<?> clazz = itemstack2.getItem().getClass();
|
|
boolean pluginMod = itemstack2.getItem().getUnlocalizedName().contains("plug:");
|
|
|
|
if (itemstack2.getItem() instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemstack2.getItem()).getRenderType())))
|
|
{
|
|
var6 = 0.5F;
|
|
GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
|
|
var6 *= 0.75F;
|
|
GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glScalef(-var6, -var6, var6);
|
|
}
|
|
else if (itemstack2.getItem() instanceof ItemBow && (customRenderer == null || pluginMod))
|
|
{
|
|
var6 = 0.625F;
|
|
GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
|
|
GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glScalef(var6, -var6, var6);
|
|
GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
}
|
|
else if (itemstack2.getItem().isFull3D() && !is3D)
|
|
{
|
|
var6 = 0.625F;
|
|
|
|
if (itemstack2.getItem().shouldRotateAroundWhenRendering())
|
|
{
|
|
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
|
|
GL11.glTranslatef(0.0F, -0.125F, 0.0F);
|
|
}
|
|
|
|
if (npc.hurtResistantTime > 0 && npc.stats.resistances.playermelee > 1f)
|
|
{
|
|
GL11.glTranslatef(0.05F, 0.0F, -0.1F);
|
|
GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glRotatef(-10.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(-60.0F, 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
GL11.glTranslatef(0.0F, 0.1875F, 0.0F);
|
|
GL11.glScalef(var6, -var6, var6);
|
|
GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
}
|
|
else if(is3D){
|
|
var6 = 0.5F;
|
|
GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
|
|
var6 *= 0.75F;
|
|
GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glScalef(-var6, -var6, var6);
|
|
}
|
|
else
|
|
{
|
|
var6 = 0.375F;
|
|
GL11.glTranslatef(0.25F, 0.1875F, -0.1875F);
|
|
GL11.glScalef(var6, var6, var6);
|
|
GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F);
|
|
GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
if (itemstack2.getItem().requiresMultipleRenderPasses())
|
|
{
|
|
for (int var25 = 0; var25 < itemstack2.getItem().getRenderPasses(itemstack2.getItemDamage()); ++var25)
|
|
{
|
|
int var24 = itemstack2.getItem().getColorFromItemStack(itemstack2, var25);
|
|
float var26 = (float)(var24 >> 16 & 255) / 255.0F;
|
|
float var9 = (float)(var24 >> 8 & 255) / 255.0F;
|
|
float var10 = (float)(var24 & 255) / 255.0F;
|
|
GL11.glColor4f(var26, var9, var10, 1.0F);
|
|
this.renderManager.itemRenderer.renderItem(npc, itemstack2, var25);
|
|
}
|
|
}
|
|
else
|
|
renderManager.itemRenderer.renderItem(npc, itemstack2, 0);
|
|
|
|
GL11.glPopMatrix();
|
|
}
|
|
GL11.glColor4f(1, 1, 1, 1.0F);
|
|
itemstack2 = npc.getOffHand();
|
|
if(itemstack2 != null)
|
|
{
|
|
GL11.glPushMatrix();
|
|
float y = 0;
|
|
float x = 0;
|
|
if(npc instanceof EntityCustomNpc){
|
|
EntityCustomNpc cnpc = (EntityCustomNpc) npc;
|
|
y = (cnpc.modelData.modelScale.arms.scaleY - 1) * 0.7f;
|
|
x = (1 - cnpc.modelData.modelScale.body.scaleX) * -0.28f + (1 - cnpc.modelData.modelScale.arms.scaleX) * -0.175f;
|
|
GL11.glTranslatef(x, cnpc.modelData.getBodyY(), 0);
|
|
}
|
|
this.modelBipedMain.bipedLeftArm.postRender(0.0625F);
|
|
|
|
if(npc.getModelType() == 2){
|
|
GL11.glTranslatef(0.0125F, 0.4375F + y, 0.0625F);
|
|
}
|
|
else {
|
|
GL11.glTranslatef(0.0625F, 0.4375F + y, 0.0625F);
|
|
}
|
|
|
|
float var6;
|
|
|
|
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(itemstack2, EQUIPPED);
|
|
boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, itemstack2, BLOCK_3D));
|
|
|
|
Class<?> clazz = itemstack2.getItem().getClass();
|
|
boolean pluginMod = itemstack2.getItem().getUnlocalizedName().contains("plug:");
|
|
if(clazz.getSimpleName().equals("ItemShield") || clazz.getSimpleName().equals("ItemRotatedShield") || clazz.getSimpleName().equals("ItemClaw"))
|
|
GL11.glTranslatef(0.30f, 0, 0f);
|
|
|
|
if (itemstack2.getItem() instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemstack2.getItem()).getRenderType())))
|
|
{
|
|
var6 = 0.5F;
|
|
GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
|
|
var6 *= 0.75F;
|
|
GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glScalef(var6, -var6, var6);
|
|
}
|
|
else if (itemstack2.getItem() instanceof ItemBow && (customRenderer == null || pluginMod))
|
|
{
|
|
var6 = 0.625F;
|
|
GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
|
|
GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glScalef(var6, -var6, var6);
|
|
GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
}
|
|
else if (itemstack2.getItem().isFull3D() && !is3D)
|
|
{
|
|
var6 = 0.625F;
|
|
|
|
if (itemstack2.getItem().shouldRotateAroundWhenRendering())
|
|
{
|
|
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
|
|
GL11.glTranslatef(0.0F, -0.125F, 0.0F);
|
|
}
|
|
|
|
if (npc.hurtResistantTime > 0 && npc.stats.resistances.arrow > 1f)
|
|
{
|
|
GL11.glTranslatef(0.05F, 0.0F, -0.1F);
|
|
GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
|
|
GL11.glRotatef(-10.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
GL11.glTranslatef(0.0F, 0.1875F, 0.0F);
|
|
GL11.glScalef(var6, -var6, var6);
|
|
GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
|
}
|
|
else
|
|
{
|
|
var6 = 0.375F;
|
|
GL11.glTranslatef(0.25F, 0.1875F, -0.1875F);
|
|
GL11.glScalef(var6, var6, var6);
|
|
GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F);
|
|
GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
|
|
GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
if (itemstack2.getItem().requiresMultipleRenderPasses())
|
|
{
|
|
for (int var25 = 0; var25 < itemstack2.getItem().getRenderPasses(itemstack2.getItemDamage()); ++var25)
|
|
{
|
|
int var24 = itemstack2.getItem().getColorFromItemStack(itemstack2, var25);
|
|
float var26 = (float)(var24 >> 16 & 255) / 255.0F;
|
|
float var9 = (float)(var24 >> 8 & 255) / 255.0F;
|
|
float var10 = (float)(var24 & 255) / 255.0F;
|
|
GL11.glColor4f(var26, var9, var10, 1.0F);
|
|
this.renderManager.itemRenderer.renderItem(npc, itemstack2, var25);
|
|
}
|
|
}else
|
|
{
|
|
renderManager.itemRenderer.renderItem(npc, itemstack2, 0);
|
|
}
|
|
GL11.glPopMatrix();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void renderEquippedItems(EntityLivingBase entityliving, float f){
|
|
renderSpecials((EntityNPCInterface)entityliving, f);
|
|
}
|
|
|
|
@Override
|
|
public void doRender(EntityLiving entityliving, double d, double d1, double d2, float f, float f1){
|
|
renderPlayer((EntityNPCInterface)entityliving, d, d1, d2, f, f1);
|
|
}
|
|
|
|
@Override
|
|
public void doRender(Entity entity, double d, double d1, double d2, float f, float f1){
|
|
renderPlayer((EntityNPCInterface)entity, d, d1, d2, f, f1);
|
|
}
|
|
|
|
}
|