Java tutorial
/******************************************************************************************************************* * Authors: SanAndreasP * Copyright: SanAndreasP * License: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International * http://creativecommons.org/licenses/by-nc-sa/4.0/ *******************************************************************************************************************/ package de.sanandrew.core.manpack.mod.client.model; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import de.sanandrew.core.manpack.util.client.helpers.ModelBoxBuilder; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; import org.lwjgl.opengl.GL11; /** * Created using Tabula 4.1.1 */ @SideOnly(Side.CLIENT) public class ModelSanPlayer extends ModelBiped { public ModelRenderer legLeft; public ModelRenderer legRight; public ModelRenderer armLeft2; public ModelRenderer armRight2; public ModelRenderer body; public ModelRenderer breast; public ModelRenderer skirt1; public ModelRenderer skirt2; public ModelRenderer head; public ModelRenderer hair; public ModelRenderer quadTail1; public ModelRenderer quadTail2; public ModelRenderer quadTail3; public ModelRenderer quadTail4; public ModelRenderer hatBase; public boolean hideTails; private boolean isArmor; public ModelSanPlayer(float scaling, boolean isArmor) { super(scaling); this.isArmor = isArmor; this.textureWidth = 64; this.textureHeight = 64; this.legLeft = ModelBoxBuilder.newBuilder(this).setTexture(0, 16, true).setLocation(2.5F, 12.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-1.5F, 0.0F, -1.5F, 3, 12, 3, scaling); this.legRight = ModelBoxBuilder.newBuilder(this).setTexture(0, 16, false).setLocation(-2.5F, 12.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-1.5F, 0.0F, -1.5F, 3, 12, 3, scaling); this.bipedLeftArm = ModelBoxBuilder.newBuilder(this).setTexture(40, 16, true).setLocation(5.0F, 2.0F, 0.5F) .setRotation(-0.00331613F, 0.0F, -0.09983283F).getBox(-1.0F, -2.0F, -2.0F, 3, 12, 3, scaling); this.bipedRightArm = ModelBoxBuilder.newBuilder(this).setTexture(40, 16, false) .setLocation(-4.0F, 2.0F, 0.5F).setRotation(0.0F, 0.0F, 0.09983283F) .getBox(-3.0F, -2.0F, -2.0F, 3, 12, 3, scaling); this.armLeft2 = ModelBoxBuilder.newBuilder(this).setTexture(40, 32, true).setLocation(5.0F, 2.0F, 0.5F) .setRotation(-0.00331613F, 0.0F, -0.09983283F).getBox(-1.0F, 5.0F, -2.0F, 3, 5, 3, scaling); this.armRight2 = ModelBoxBuilder.newBuilder(this).setTexture(40, 32, false).setLocation(-4.0F, 2.0F, 0.5F) .setRotation(0.0F, 0.0F, 0.09983283F).getBox(-3.0F, 5.0F, -2.0F, 3, 5, 3, scaling); this.body = ModelBoxBuilder.newBuilder(this).setTexture(16, 16, false).setLocation(0.0F, 0.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, scaling); this.breast = ModelBoxBuilder.newBuilder(this).setTexture(0, 54, false).setLocation(0.0F, 3.0F, -3.5F) .setRotation(0.87266463F, 0.0F, 0.0F).getBox(-3.5F, 0.0F, 0.0F, 7, 3, 3, scaling); this.skirt1 = ModelBoxBuilder.newBuilder(this).setTexture(16, 36, false).setLocation(0.0F, 0.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-4.5F, 8.0F, -2.5F, 9, 3, 5, 0.0F); this.skirt2 = ModelBoxBuilder.newBuilder(this).setTexture(16, 44, false).setLocation(0.0F, 0.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-4.5F, 11.0F, -3.0F, 9, 4, 6, 0.0F); this.head = ModelBoxBuilder.newBuilder(this).setTexture(28, 0, false).setLocation(0.0F, 0.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-3.5F, -7.0F, -3.5F, 7, 7, 7, scaling); this.hair = ModelBoxBuilder.newBuilder(this).setTexture(0, 0, false).setLocation(0.0F, 0.0F, 0.0F) .setRotation(0.0F, 0.0F, 0.0F).getBox(-3.5F, -7.4F, -3.5F, 7, 7, 7, scaling + 0.4F); this.quadTail1 = ModelBoxBuilder.newBuilder(this).setTexture(0, 40, true).setLocation(0.0F, -3.0F, 0.0F) .setRotation(0.52359878F, 0.0F, -2.26892803F).getBox(-1.5F, 3.0F, 1.0F, 3, 10, 3, scaling); this.quadTail2 = ModelBoxBuilder.newBuilder(this).setTexture(0, 40, false).setLocation(0.0F, -3.0F, 0.0F) .setRotation(0.52359878F, 0.0F, 2.26892803F).getBox(-1.5F, 3.0F, 1.0F, 3, 10, 3, scaling); this.quadTail3 = ModelBoxBuilder.newBuilder(this).setTexture(0, 32, true).setLocation(0.0F, -3.0F, 0.0F) .setRotation(0.63739424F, 0.0F, -0.61086524F).getBox(-0.5F, 3.0F, 0.9F, 2, 6, 2, scaling); this.quadTail4 = ModelBoxBuilder.newBuilder(this).setTexture(0, 32, false).setLocation(0.0F, -3.0F, 0.0F) .setRotation(0.63739424F, 0.0F, 0.61086524F).getBox(-1.5F, 3.0F, 0.9F, 2, 6, 2, scaling); this.body.addChild(this.breast); this.head.addChild(this.quadTail1); this.head.addChild(this.quadTail2); this.head.addChild(this.quadTail3); this.head.addChild(this.quadTail4); } @Override public void render(Entity entity, float limbSwing, float limbSwingAmount, float rotFloat, float rotYaw, float rotPitch, float partTicks) { this.setRotationAngles(limbSwing, limbSwingAmount, rotFloat, rotYaw, rotPitch, partTicks, entity); this.quadTail1.isHidden = this.hideTails; this.quadTail2.isHidden = this.hideTails; this.quadTail3.isHidden = this.hideTails; this.quadTail4.isHidden = this.hideTails; if (!this.isArmor) { GL11.glPushMatrix(); GL11.glTranslatef(this.head.offsetX, this.head.offsetY, this.head.offsetZ); GL11.glTranslatef(this.head.rotationPointX * partTicks, this.head.rotationPointY * partTicks, this.head.rotationPointZ * partTicks); GL11.glScaled(1.1D, 1.1D, 1.1D); GL11.glTranslatef(-this.head.offsetX, -this.head.offsetY, -this.head.offsetZ); GL11.glTranslatef(-this.head.rotationPointX * partTicks, -this.head.rotationPointY * partTicks, -this.head.rotationPointZ * partTicks); this.head.render(partTicks); GL11.glPopMatrix(); this.hair.render(partTicks); } else if (this.hatBase != null) { this.hatBase.render(partTicks); } this.bipedLeftArm.render(partTicks); this.bipedRightArm.render(partTicks); this.legLeft.render(partTicks); this.legRight.render(partTicks); this.body.render(partTicks); this.skirt1.render(partTicks); this.skirt2.render(partTicks); GL11.glPushMatrix(); GL11.glTranslatef(this.armLeft2.offsetX, this.armLeft2.offsetY, this.armLeft2.offsetZ); GL11.glTranslatef(this.armLeft2.rotationPointX * partTicks + 0.025F, this.armLeft2.rotationPointY * partTicks, this.armLeft2.rotationPointZ * partTicks); GL11.glScaled(1.05D, 1.05D, 1.05D); GL11.glTranslatef(-this.armLeft2.offsetX, -this.armLeft2.offsetY, -this.armLeft2.offsetZ); GL11.glTranslatef(-this.armLeft2.rotationPointX * partTicks - 0.025F, -this.armLeft2.rotationPointY * partTicks, -this.armLeft2.rotationPointZ * partTicks); this.armLeft2.render(partTicks); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.armRight2.offsetX, this.armRight2.offsetY, this.armRight2.offsetZ); GL11.glTranslatef(this.armRight2.rotationPointX * partTicks - 0.025F, this.armRight2.rotationPointY * partTicks, this.armRight2.rotationPointZ * partTicks); GL11.glScaled(1.05D, 1.05D, 1.05D); GL11.glTranslatef(-this.armRight2.offsetX, -this.armRight2.offsetY, -this.armRight2.offsetZ); GL11.glTranslatef(-this.armRight2.rotationPointX * partTicks + 0.025F, -this.armRight2.rotationPointY * partTicks, -this.armRight2.rotationPointZ * partTicks); this.armRight2.render(partTicks); GL11.glPopMatrix(); } public void setRotationAngles(float limbSwing, float limbSwingAmount, float rotFloat, float rotYaw, float rotPitch, float partTicks, Entity entity) { float prevHeadPosY = this.bipedHead.rotationPointY; super.setRotationAngles(limbSwing, limbSwingAmount, rotFloat, rotYaw, rotPitch, partTicks, entity); float deltaHeadPosY = this.bipedHead.rotationPointY - prevHeadPosY; this.hair.rotationPointY += deltaHeadPosY; this.head.rotationPointY += deltaHeadPosY; if (this.hatBase != null) { this.hatBase.rotationPointY += deltaHeadPosY; this.setRotateAngle(this.hatBase, this.bipedHead.rotateAngleX, this.bipedHead.rotateAngleY, this.bipedHead.rotateAngleZ); } this.setRotateAngle(this.head, this.bipedHead.rotateAngleX, this.bipedHead.rotateAngleY, this.bipedHead.rotateAngleZ); this.setRotateAngle(this.hair, this.bipedHead.rotateAngleX, this.bipedHead.rotateAngleY, this.bipedHead.rotateAngleZ); this.setRotateAngle(this.body, this.bipedBody.rotateAngleX * 0.5F, this.bipedBody.rotateAngleY, this.bipedBody.rotateAngleZ); this.setRotateAngle(this.skirt1, this.bipedBody.rotateAngleX * 0.5F, this.bipedBody.rotateAngleY, this.bipedBody.rotateAngleZ); this.setRotateAngle(this.skirt2, this.bipedBody.rotateAngleX * 0.5F, this.bipedBody.rotateAngleY, this.bipedBody.rotateAngleZ); this.setRotateAngle(this.armLeft2, this.bipedLeftArm.rotateAngleX, this.bipedLeftArm.rotateAngleY, this.bipedLeftArm.rotateAngleZ); this.setRotateAngle(this.armRight2, this.bipedRightArm.rotateAngleX, this.bipedRightArm.rotateAngleY, this.bipedRightArm.rotateAngleZ); if (this.isRiding) { this.setRotateAngle(this.legLeft, this.bipedLeftLeg.rotateAngleX, this.bipedLeftLeg.rotateAngleY, this.bipedLeftLeg.rotateAngleZ); this.setRotateAngle(this.legRight, this.bipedRightLeg.rotateAngleX, this.bipedRightLeg.rotateAngleY, this.bipedRightLeg.rotateAngleZ); } else { this.setRotateAngle(this.legLeft, this.bipedLeftLeg.rotateAngleX * 0.5F, this.bipedLeftLeg.rotateAngleY, this.bipedLeftLeg.rotateAngleZ); this.setRotateAngle(this.legRight, this.bipedRightLeg.rotateAngleX * 0.5F, this.bipedRightLeg.rotateAngleY, this.bipedRightLeg.rotateAngleZ); } this.bipedLeftArm.rotateAngleZ -= 0.1F; this.bipedRightArm.rotateAngleZ += 0.1F; this.armLeft2.rotateAngleZ -= 0.1F; this.armRight2.rotateAngleZ += 0.1F; if (this.isSneak) { this.legLeft.rotationPointZ = 3.0F; this.legRight.rotationPointZ = 3.0F; this.legLeft.rotateAngleX -= 0.15F; this.legRight.rotateAngleX -= 0.15F; this.bipedLeftArm.rotateAngleX += 0.2F; this.armLeft2.rotateAngleX += 0.2F; this.bipedRightArm.rotateAngleX += 0.2F; this.armRight2.rotateAngleX += 0.2F; } else { this.legLeft.rotationPointZ = 0.0F; this.legRight.rotationPointZ = 0.0F; } setRotationPoint(this.bipedLeftArm, 5.0F, 2.0F, 0.5F); setRotationPoint(this.bipedRightArm, -4.0F, 2.0F, 0.5F); } /** * This is a helper function from Tabula to set the rotation of model parts */ public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { modelRenderer.rotateAngleX = x; modelRenderer.rotateAngleY = y; modelRenderer.rotateAngleZ = z; } public void setRotationPoint(ModelRenderer modelRenderer, float x, float y, float z) { modelRenderer.rotationPointX = x; modelRenderer.rotationPointY = y; modelRenderer.rotationPointZ = z; } }