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.entity.passive.EntitySheep; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ModelHarvestSheep extends ModelBase { private final Wooly wooly; private final Sheared sheared; private final Child child; public ModelHarvestSheep() { wooly = new Wooly(); sheared = new Sheared(); 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 { EntitySheep sheep = (EntitySheep) entity; if (sheep != null && sheep.getSheared()) sheared.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); else wooly.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); } } public static class Wooly extends ModelHF { private ModelRenderer bodyTop; private ModelRenderer backRightLeg; private ModelRenderer frontLeftLeg; private ModelRenderer backLeftLeg; private ModelRenderer frontRightLeg; private ModelRenderer bodyLeft; private ModelRenderer bodyBack; private ModelRenderer bodyRight; private ModelRenderer hornLeft; private ModelRenderer body; private ModelRenderer neck; private ModelRenderer hair; private ModelRenderer hornRight; private ModelRenderer earLeft; private ModelRenderer bodyMiddle; private ModelRenderer earRight; private ModelRenderer head; public Wooly() { textureWidth = 128; textureHeight = 64; head = new ModelRenderer(this, 0, 33); head.setRotationPoint(0.0F, 14.0F, -8.0F); head.addBox(-5.0F, -6.0F, -5.0F, 10, 10, 4, 0.0F); bodyMiddle = new ModelRenderer(this, 64, 19); bodyMiddle.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyMiddle.addBox(-4.0F, -11.0F, -9.0F, 10, 2, 14, 0.0F); bodyTop = new ModelRenderer(this, 0, 0); bodyTop.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyTop.addBox(-4.0F, -13.0F, -10.0F, 10, 2, 14, 0.0F); hair = new ModelRenderer(this, 71, 40); hair.setRotationPoint(0.0F, 14.0F, -8.0F); hair.addBox(-6.0F, -7.0F, -5.0F, 12, 1, 4, 0.0F); hornLeft = new ModelRenderer(this, 64, 10); hornLeft.setRotationPoint(0.0F, 14.0F, -8.0F); hornLeft.addBox(5.0F, -6.0F, -4.0F, 4, 4, 2, 0.0F); neck = new ModelRenderer(this, 0, 22); neck.setRotationPoint(0.0F, 14.0F, -8.0F); neck.addBox(-6.0F, -4.0F, -1.0F, 12, 6, 1, 0.0F); body = new ModelRenderer(this, 22, 33); body.setRotationPoint(-1.0F, 19.0F, 0.0F); body.addBox(-5.0F, -9.0F, -8.0F, 12, 10, 15, 0.0F); backRightLeg = new ModelRenderer(this, 0, 52); backRightLeg.setRotationPoint(-5.0F, 18.0F, 3.0F); backRightLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); frontLeftLeg = new ModelRenderer(this, 0, 52); frontLeftLeg.setRotationPoint(2.0F, 18.0F, -7.0F); frontLeftLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); bodyLeft = new ModelRenderer(this, 38, 8); bodyLeft.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyLeft.addBox(7.0F, -8.0F, -7.0F, 2, 8, 13, 0.0F); backLeftLeg = new ModelRenderer(this, 0, 52); backLeftLeg.setRotationPoint(2.0F, 18.0F, 3.0F); backLeftLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); frontRightLeg = new ModelRenderer(this, 0, 52); frontRightLeg.setRotationPoint(-5.0F, 18.0F, -7.0F); frontRightLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); hornRight = new ModelRenderer(this, 64, 10); hornRight.mirror = true; hornRight.setRotationPoint(0.0F, 14.0F, -8.0F); hornRight.addBox(-9.0F, -6.0F, -4.0F, 4, 4, 2, 0.0F); bodyRight = new ModelRenderer(this, 38, 8); bodyRight.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyRight.addBox(-7.0F, -8.0F, -7.0F, 2, 8, 13, 0.0F); bodyBack = new ModelRenderer(this, 95, 5); bodyBack.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyBack.addBox(-4.0F, -8.0F, 6.0F, 10, 8, 2, 0.0F); earRight = new ModelRenderer(this, 64, 0); earRight.mirror = true; earRight.setRotationPoint(0.0F, 14.0F, -8.0F); earRight.addBox(-9.0F, -3.0F, -4.0F, 5, 3, 2, 0.0F); setRotateAngle(earRight, 0.0F, 0.0F, -0.18203784098300857F); earLeft = new ModelRenderer(this, 64, 0); earLeft.setRotationPoint(0.0F, 14.0F, -8.0F); earLeft.addBox(3.0F, -3.0F, -4.0F, 5, 3, 2, 0.0F); setRotateAngle(earLeft, 0.0F, 0.0F, 0.18203784098300857F); } @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); head.render(scale); bodyMiddle.render(scale); bodyTop.render(scale); hair.render(scale); hornLeft.render(scale); neck.render(scale); body.render(scale); backRightLeg.render(scale); frontLeftLeg.render(scale); bodyLeft.render(scale); backLeftLeg.render(scale); frontRightLeg.render(scale); hornRight.render(scale); bodyRight.render(scale); bodyBack.render(scale); earRight.render(scale); earLeft.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; hair.rotateAngleX = head.rotateAngleX; hair.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; frontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; frontRightLeg.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 Sheared extends ModelHF { private ModelRenderer backRightLeg; private ModelRenderer frontLeftLeg; private ModelRenderer backLeftLeg; private ModelRenderer frontRightLeg; private ModelRenderer bodyTop; private ModelRenderer bodyMiddle; private ModelRenderer tail; private ModelRenderer hair; private ModelRenderer earLeft; private ModelRenderer earRight; private ModelRenderer head; private ModelRenderer neck; private ModelRenderer hornLeft; private ModelRenderer hornRight; public Sheared() { textureWidth = 128; textureHeight = 64; frontLeftLeg = new ModelRenderer(this, 0, 52); frontLeftLeg.setRotationPoint(2.0F, 18.0F, -7.0F); frontLeftLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); backLeftLeg = new ModelRenderer(this, 0, 52); backLeftLeg.setRotationPoint(2.0F, 18.0F, 3.0F); backLeftLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); tail = new ModelRenderer(this, 64, 20); tail.setRotationPoint(-1.0F, 19.0F, 0.0F); tail.addBox(-0.4F, -6.0F, 7.0F, 3, 3, 2, 0.0F); frontRightLeg = new ModelRenderer(this, 0, 52); frontRightLeg.setRotationPoint(-5.0F, 18.0F, -7.0F); frontRightLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); bodyTop = new ModelRenderer(this, 64, 19); bodyTop.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyTop.addBox(-4.0F, -10.0F, -9.0F, 10, 1, 14, 0.0F); backRightLeg = new ModelRenderer(this, 0, 52); backRightLeg.setRotationPoint(-5.0F, 18.0F, 3.0F); backRightLeg.addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, 0.0F); bodyMiddle = new ModelRenderer(this, 64, 40); bodyMiddle.setRotationPoint(-1.0F, 19.0F, 0.0F); bodyMiddle.addBox(-4.4F, -9.0F, -8.0F, 11, 8, 15, 0.0F); hair = new ModelRenderer(this, 71, 35); hair.setRotationPoint(0.0F, 14.0F, -8.0F); hair.addBox(-6.0F, -7.0F, -5.0F, 12, 1, 4, 0.0F); earRight = new ModelRenderer(this, 64, 0); earRight.mirror = true; earRight.setRotationPoint(0.0F, 14.0F, -8.0F); earRight.addBox(-9.0F, -3.0F, -4.0F, 5, 3, 2, 0.0F); setRotateAngle(earRight, 0.0F, 0.0F, -0.18203784098300857F); earLeft = new ModelRenderer(this, 64, 0); earLeft.setRotationPoint(0.0F, 14.0F, -8.0F); earLeft.addBox(3.0F, -3.0F, -4.0F, 5, 3, 2, 0.0F); setRotateAngle(earLeft, 0.0F, 0.0F, 0.18203784098300857F); head = new ModelRenderer(this, 0, 33); head.setRotationPoint(0.0F, 14.0F, -8.0F); head.addBox(-5.0F, -6.0F, -5.0F, 10, 10, 4, 0.0F); neck = new ModelRenderer(this, 0, 22); neck.setRotationPoint(0.0F, 14.0F, -8.0F); neck.addBox(-6.0F, -4.0F, -1.0F, 12, 6, 1, 0.0F); hornLeft = new ModelRenderer(this, 64, 10); hornLeft.setRotationPoint(0.0F, 14.0F, -8.0F); hornLeft.addBox(5.0F, -6.0F, -4.0F, 4, 4, 2, 0.0F); hornRight = new ModelRenderer(this, 64, 10); hornRight.mirror = true; hornRight.setRotationPoint(0.0F, 14.0F, -8.0F); hornRight.addBox(-9.0F, -6.0F, -4.0F, 4, 4, 2, 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); frontLeftLeg.render(scale); earLeft.render(scale); hair.render(scale); earRight.render(scale); backLeftLeg.render(scale); tail.render(scale); hornLeft.render(scale); hornRight.render(scale); head.render(scale); frontRightLeg.render(scale); neck.render(scale); bodyTop.render(scale); backRightLeg.render(scale); bodyMiddle.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; hair.rotateAngleX = head.rotateAngleX; hair.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; frontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; frontRightLeg.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 backRightLeg; private ModelRenderer frontLeftLeg; private ModelRenderer backLeftLeg; private ModelRenderer frontRightLeg; private ModelRenderer neck; private ModelRenderer earLeft; private ModelRenderer child_tail; private ModelRenderer earRight; private ModelRenderer head; private ModelRenderer child_bodyTop; private ModelRenderer child_bodyMiddle; public Child() { textureWidth = 128; textureHeight = 64; head = new ModelRenderer(this, 0, 33); head.setRotationPoint(0.0F, 14.0F, -8.0F); head.addBox(-5.0F, -7.0F, -4.0F, 10, 10, 4, -1.0F); child_bodyMiddle = new ModelRenderer(this, 64, 40); child_bodyMiddle.setRotationPoint(-1.0F, 19.0F, 0.0F); child_bodyMiddle.addBox(-3.4F, -9.0F, -8.0F, 9, 8, 12, 0.0F); frontLeftLeg = new ModelRenderer(this, 0, 52); frontLeftLeg.setRotationPoint(1.0F, 17.0F, -7.0F); frontLeftLeg.addBox(0.0F, 0.0F, 0.0F, 3, 7, 3, 0.0F); earLeft = new ModelRenderer(this, 64, 0); earLeft.setRotationPoint(0.0F, 14.0F, -8.0F); earLeft.addBox(3.0F, -4.0F, -3.0F, 5, 3, 2, -0.5F); setRotateAngle(earLeft, 0.0F, 0.0F, 0.18203784098300857F); frontRightLeg = new ModelRenderer(this, 0, 52); frontRightLeg.setRotationPoint(-4.0F, 17.0F, -7.0F); frontRightLeg.addBox(0.0F, 0.0F, 0.0F, 3, 7, 3, 0.0F); child_bodyTop = new ModelRenderer(this, 64, 19); child_bodyTop.setRotationPoint(-1.0F, 19.0F, 0.0F); child_bodyTop.addBox(-3.5F, -10.0F, -9.0F, 9, 1, 11, 0.0F); neck = new ModelRenderer(this, 0, 22); neck.setRotationPoint(0.0F, 14.0F, -8.0F); neck.addBox(-4.0F, -4.0F, -1.0F, 8, 6, 1, 0.0F); earRight = new ModelRenderer(this, 64, 0); earRight.mirror = true; earRight.setRotationPoint(0.0F, 14.0F, -8.0F); earRight.addBox(-8.0F, -4.0F, -3.0F, 5, 3, 2, -0.5F); setRotateAngle(earRight, 0.0F, 0.0F, -0.18203784098300857F); child_tail = new ModelRenderer(this, 64, 20); child_tail.setRotationPoint(-1.0F, 19.0F, 0.0F); child_tail.addBox(-0.4F, -6.0F, 4.0F, 3, 3, 2, 0.0F); backLeftLeg = new ModelRenderer(this, 0, 52); backLeftLeg.setRotationPoint(1.0F, 17.0F, 0.5F); backLeftLeg.addBox(0.0F, 0.0F, 0.0F, 3, 7, 3, 0.0F); backRightLeg = new ModelRenderer(this, 0, 52); backRightLeg.setRotationPoint(-4.0F, 17.0F, 0.5F); backRightLeg.addBox(0.0F, 0.0F, 0.0F, 3, 7, 3, 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.7F, 0.7F, 0.7F); GlStateManager.translate(0F, 0.6F, 0F); head.render(scale); child_bodyMiddle.render(scale); frontLeftLeg.render(scale); earLeft.render(scale); frontRightLeg.render(scale); child_bodyTop.render(scale); neck.render(scale); earRight.render(scale); child_tail.render(scale); backLeftLeg.render(scale); backRightLeg.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; neck.rotateAngleX = head.rotateAngleX; neck.rotateAngleY = head.rotateAngleY; frontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; frontRightLeg.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; } } }