package joshie.harvest.animals.render; import joshie.harvest.core.base.render.ModelHF; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ModelHarvestCow extends ModelBase { private final Adult adult; private final Child child; public ModelHarvestCow() { adult = new Adult(); child = new Child(); } @Override public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { if (isChild) child.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); else adult.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); } public static class Adult extends ModelHF { private ModelRenderer frontRightLeg; private ModelRenderer backRightLeg; private ModelRenderer frontLeftLeg; private ModelRenderer backLeftLeg; private ModelRenderer udder; private ModelRenderer belly; private ModelRenderer backTop; private ModelRenderer snout; private ModelRenderer sideRight; private ModelRenderer tail; private ModelRenderer backMiddle; private ModelRenderer sideLeft; private ModelRenderer body; private ModelRenderer neck; private ModelRenderer earRight; private ModelRenderer earLeft; private ModelRenderer hornLeft; private ModelRenderer hornRight; private ModelRenderer head; public Adult() { textureWidth = 128; textureHeight = 128; earLeft = new ModelRenderer(this, 115, 38); earLeft.setRotationPoint(-1.0F, 17.0F, -9.0F); earLeft.addBox(6.5F, -15.5F, -4.5F, 4, 3, 2, 0.0F); setRotateAngle(earLeft, 0.0F, 0.0F, -0.091106186954104F); backRightLeg = new ModelRenderer(this, 64, 0); backRightLeg.setRotationPoint(-3.5F, 16.0F, 9.0F); backRightLeg.addBox(-1.5F, 0.0F, -0.5F, 3, 8, 3, 0.0F); frontLeftLeg = new ModelRenderer(this, 64, 0); frontLeftLeg.setRotationPoint(3.5F, 16.0F, -4.0F); frontLeftLeg.addBox(-1.5F, 0.0F, -1.5F, 3, 8, 3, 0.0F); snout = new ModelRenderer(this, 85, 0); snout.setRotationPoint(-1.0F, 17.0F, -9.0F); snout.addBox(-6.5F, -6.0F, -7.5F, 15, 7, 6, 0.0F); neck = new ModelRenderer(this, 87, 29); neck.setRotationPoint(-1.0F, 17.0F, -9.0F); neck.addBox(-3.5F, -14.0F, -1.5F, 9, 10, 2, 0.0F); sideLeft = new ModelRenderer(this, 64, 96); sideLeft.setRotationPoint(-1.0F, 17.0F, -5.0F); sideLeft.addBox(6.5F, -13.5F, -3.5F, 1, 11, 19, 0.0F); udder = new ModelRenderer(this, 0, 45); udder.setRotationPoint(-1.0F, 17.0F, -5.0F); udder.addBox(-0.5F, 1.0F, 9.0F, 3, 2, 3, 0.0F); earRight = new ModelRenderer(this, 115, 33); earRight.mirror = true; earRight.setRotationPoint(-1.0F, 17.0F, -7.0F); earRight.addBox(-8.5F, -15.5F, -6.5F, 4, 3, 2, 0.0F); setRotateAngle(earRight, 0.0F, 0.0F, 0.091106186954104F); frontRightLeg = new ModelRenderer(this, 64, 0); frontRightLeg.setRotationPoint(-3.5F, 16.0F, -4.0F); frontRightLeg.addBox(-1.5F, 0.0F, -1.5F, 3, 8, 3, 0.0F); backLeftLeg = new ModelRenderer(this, 64, 0); backLeftLeg.setRotationPoint(3.5F, 16.0F, 9.0F); backLeftLeg.addBox(-1.5F, 0.0F, -0.5F, 3, 8, 3, 0.0F); hornRight = new ModelRenderer(this, 117, 27); hornRight.mirror = true; hornRight.setRotationPoint(-1.0F, 17.0F, -7.0F); hornRight.addBox(-4.0F, -20.0F, -6.5F, 3, 4, 2, 0.0F); head = new ModelRenderer(this, 95, 13); head.setRotationPoint(-1.0F, 17.0F, -9.0F); head.addBox(-4.5F, -16.0F, -5.5F, 11, 10, 4, 0.0F); backMiddle = new ModelRenderer(this, 29, 40); backMiddle.setRotationPoint(-1.0F, 17.0F, -5.0F); backMiddle.addBox(-4.5F, -12.0F, -3.5F, 11, 3, 21, 0.0F); backTop = new ModelRenderer(this, 66, 67); backTop.setRotationPoint(-1.0F, 17.0F, -5.0F); backTop.addBox(-4.5F, -15.0F, -3.5F, 11, 3, 20, 0.0F); tail = new ModelRenderer(this, 35, 2); tail.setRotationPoint(3.0F, 18.0F, 19.0F); tail.addBox(-3.5F, -10.0F, -3.5F, 3, 3, 9, 0.0F); setRotateAngle(tail, 0.40980330836826856F, 0.0F, 0.0F); belly = new ModelRenderer(this, 0, 24); belly.setRotationPoint(-1.0F, 17.0F, -5.0F); belly.addBox(-1.5F, 0.0F, -1.5F, 5, 1, 13, 0.0F); hornLeft = new ModelRenderer(this, 117, 27); hornLeft.setRotationPoint(-1.0F, 17.0F, -9.0F); hornLeft.addBox(2.5F, -20.0F, -4.5F, 3, 4, 2, 0.0F); body = new ModelRenderer(this, 0, 71); body.setRotationPoint(-1.0F, 17.0F, -5.0F); body.addBox(-4.5F, -9.0F, -3.5F, 11, 9, 22, 0.0F); sideRight = new ModelRenderer(this, 64, 96); sideRight.setRotationPoint(-1.0F, 17.0F, -5.0F); sideRight.addBox(-5.5F, -13.5F, -3.5F, 1, 11, 19, 0.0F); } @Override public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); earLeft.render(scale); backRightLeg.render(scale); frontLeftLeg.render(scale); snout.render(scale); neck.render(scale); sideLeft.render(scale); udder.render(scale); earRight.render(scale); frontRightLeg.render(scale); backLeftLeg.render(scale); hornRight.render(scale); head.render(scale); backMiddle.render(scale); backTop.render(scale); tail.render(scale); belly.render(scale); hornLeft.render(scale); body.render(scale); sideRight.render(scale); } @Override public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entity) { head.rotateAngleX = headPitch / (360F / (float) Math.PI); head.rotateAngleY = netHeadYaw / (720F / (float) Math.PI); earLeft.rotateAngleX = head.rotateAngleX; earLeft.rotateAngleY = head.rotateAngleY; earRight.rotateAngleX = head.rotateAngleX; earRight.rotateAngleY = head.rotateAngleY; snout.rotateAngleX = head.rotateAngleX; snout.rotateAngleY = head.rotateAngleY; neck.rotateAngleX = head.rotateAngleX; neck.rotateAngleY = head.rotateAngleY; hornLeft.rotateAngleX = head.rotateAngleX; hornLeft.rotateAngleY = head.rotateAngleY; hornRight.rotateAngleX = head.rotateAngleX; hornRight.rotateAngleY = head.rotateAngleY; frontRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; frontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 1.4F * limbSwingAmount; backLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 1.4F * limbSwingAmount; backRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; } } public static class Child extends ModelHF { private ModelRenderer frontRightLeg; private ModelRenderer backRightLeg; private ModelRenderer frontLeftLeg; private ModelRenderer backLeftLeg; private ModelRenderer belly; private ModelRenderer backTop; private ModelRenderer snout; private ModelRenderer sideRight; private ModelRenderer tail; private ModelRenderer backMiddle; private ModelRenderer sideLeft; private ModelRenderer body; private ModelRenderer neck; private ModelRenderer earRight; private ModelRenderer earLeft; private ModelRenderer head; public Child() { textureWidth = 128; textureHeight = 128; backMiddle = new ModelRenderer(this, 47, 25); backMiddle.setRotationPoint(-1.0F, 18.0F, -5.0F); backMiddle.addBox(-4.5F, -12.0F, -3.5F, 11, 3, 16, 0.0F); neck = new ModelRenderer(this, 87, 29); neck.setRotationPoint(-1.0F, 18.0F, -9.0F); neck.addBox(-3.5F, -14.0F, -1.5F, 9, 10, 2, 0.0F); sideLeft = new ModelRenderer(this, 0, 0); sideLeft.setRotationPoint(-1.0F, 18.0F, -5.0F); sideLeft.addBox(6.5F, -10.5F, -3.5F, 1, 9, 14, 0.0F); frontRightLeg = new ModelRenderer(this, 64, 0); frontRightLeg.setRotationPoint(-3.5F, 17.0F, -4.0F); frontRightLeg.addBox(-1.5F, 0.0F, -1.5F, 3, 7, 3, 0.0F); backTop = new ModelRenderer(this, 80, 50); backTop.setRotationPoint(-1.0F, 18.0F, -5.0F); backTop.addBox(-4.5F, -13.0F, -3.5F, 11, 1, 13, 0.0F); body = new ModelRenderer(this, 0, 38); body.setRotationPoint(-1.0F, 18.0F, -5.0F); body.addBox(-4.5F, -9.0F, -3.5F, 11, 9, 17, 0.0F); tail = new ModelRenderer(this, 35, 2); tail.setRotationPoint(3.0F, 20.0F, 13.0F); tail.addBox(-3.5F, -10.0F, -3.5F, 3, 3, 9, 0.0F); setRotateAngle(tail, 0.40980330836826856F, 0.0F, 0.0F); earLeft = new ModelRenderer(this, 115, 38); earLeft.setRotationPoint(-1.0F, 18.0F, -9.0F); earLeft.addBox(6.5F, -15.5F, -4.5F, 4, 3, 2, 0.0F); setRotateAngle(earLeft, 0.0F, 0.0F, -0.091106186954104F); belly = new ModelRenderer(this, 0, 24); belly.setRotationPoint(-1.0F, 18.0F, -5.0F); belly.addBox(-1.5F, 0.0F, -1.5F, 5, 1, 13, 0.0F); head = new ModelRenderer(this, 95, 13); head.setRotationPoint(-1.0F, 18.0F, -9.0F); head.addBox(-4.5F, -16.0F, -5.5F, 11, 10, 4, 0.0F); backLeftLeg = new ModelRenderer(this, 64, 0); backLeftLeg.setRotationPoint(3.5F, 17.0F, 4.0F); backLeftLeg.addBox(-1.5F, 0.0F, -0.5F, 3, 7, 3, 0.0F); frontLeftLeg = new ModelRenderer(this, 64, 0); frontLeftLeg.setRotationPoint(3.5F, 17.0F, -4.0F); frontLeftLeg.addBox(-1.5F, 0.0F, -1.5F, 3, 7, 3, 0.0F); earRight = new ModelRenderer(this, 115, 33); earRight.mirror = true; earRight.setRotationPoint(-1.0F, 18.0F, -7.0F); earRight.addBox(-8.5F, -15.5F, -6.5F, 4, 3, 2, 0.0F); setRotateAngle(earRight, 0.0F, 0.0F, 0.091106186954104F); backRightLeg = new ModelRenderer(this, 64, 0); backRightLeg.setRotationPoint(-3.5F, 17.0F, 4.0F); backRightLeg.addBox(-1.5F, 0.0F, -0.5F, 3, 7, 3, 0.0F); snout = new ModelRenderer(this, 85, 0); snout.setRotationPoint(-1.0F, 18.0F, -9.0F); snout.addBox(-6.5F, -6.0F, -7.5F, 15, 7, 6, 0.0F); sideRight = new ModelRenderer(this, 0, 0); sideRight.setRotationPoint(-1.0F, 18.0F, -5.0F); sideRight.addBox(-5.5F, -10.5F, -3.5F, 1, 9, 14, 0.0F); } @Override public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); GlStateManager.pushMatrix(); GlStateManager.scale(0.5F, 0.5F, 0.5F); GlStateManager.translate(0F, 1.3F, 0F); frontLeftLeg.render(scale); frontRightLeg.render(scale); earLeft.render(scale); sideLeft.render(scale); snout.render(scale); backMiddle.render(scale); backRightLeg.render(scale); body.render(scale); backTop.render(scale); earRight.render(scale); head.render(scale); neck.render(scale); belly.render(scale); backLeftLeg.render(scale); sideRight.render(scale); tail.render(scale); GlStateManager.popMatrix(); } @Override public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entity) { head.rotateAngleX = headPitch / (360F / (float) Math.PI); head.rotateAngleY = netHeadYaw / (720F / (float) Math.PI); earLeft.rotateAngleX = head.rotateAngleX; earLeft.rotateAngleY = head.rotateAngleY; earRight.rotateAngleX = head.rotateAngleX; earRight.rotateAngleY = head.rotateAngleY; snout.rotateAngleX = head.rotateAngleX; snout.rotateAngleY = head.rotateAngleY; neck.rotateAngleY = head.rotateAngleY; neck.rotateAngleY = head.rotateAngleY; frontRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; frontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 1.4F * limbSwingAmount; backLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 1.4F * limbSwingAmount; backRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; } } }