Java tutorial
package buildcraftAdditions.client.models; import org.lwjgl.opengl.GL11; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import cpw.mods.fml.client.FMLClientHandler; /** * Copyright (c) 2014-2015, AEnterprise * http://buildcraftadditions.wordpress.com/ * Buildcraft Additions is distributed under the terms of GNU GPL v3.0 * Please check the contents of the license located in * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/ */ public class ModelCapsule extends ModelBiped { public static final ModelCapsule INSTANCE = new ModelCapsule(); private final ResourceLocation TEXTURE1 = new ResourceLocation("bcadditions", "textures/models/Capsule1-texture.png"); private final ResourceLocation TEXTURE2 = new ResourceLocation("bcadditions", "textures/models/Capsule2-texture.png"); private final ResourceLocation TEXTURE3 = new ResourceLocation("bcadditions", "textures/models/Capsule3-texture.png"); public ModelRenderer capsuleCoreVert; public ModelRenderer capsuleThingy1; public ModelRenderer capsuleThingy2; public ModelRenderer capsuleThingy3; public ModelRenderer capsuleThingy4; public ModelRenderer capsuleCoreHori; public ModelRenderer capsuleCoreBR; public ModelRenderer capsuleCoreBL; public ModelRenderer capsuleCoreTL; public ModelRenderer capsuleCoreTR; private ModelCapsule() { this.textureWidth = 128; this.textureHeight = 64; this.capsuleCoreVert = new ModelRenderer(this, 0, 0); this.capsuleCoreVert.setRotationPoint(-1.1F, 18.7F, 0.4F); this.capsuleCoreVert.addBox(0.7F, 0.0F, 0.0F, 2, 2, 1, 0.0F); this.capsuleCoreTR = new ModelRenderer(this, 9, 11); this.capsuleCoreTR.setRotationPoint(-1.1F, 18.7F, 0.4F); this.capsuleCoreTR.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleThingy4 = new ModelRenderer(this, 9, 27); this.capsuleThingy4.setRotationPoint(-0.6F, 19.8F, 1.4F); this.capsuleThingy4.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleCoreBL = new ModelRenderer(this, 1, 16); this.capsuleCoreBL.setRotationPoint(0.45F, 20.2F, 0.4F); this.capsuleCoreBL.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleCoreBR = new ModelRenderer(this, 9, 16); this.capsuleCoreBR.setRotationPoint(-1.1F, 20.2F, 0.4F); this.capsuleCoreBR.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleThingy1 = new ModelRenderer(this, 2, 21); this.capsuleThingy1.setRotationPoint(0.0F, 19.2F, 1.4F); this.capsuleThingy1.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleCoreTL = new ModelRenderer(this, 1, 11); this.capsuleCoreTL.setRotationPoint(0.45F, 18.7F, 0.4F); this.capsuleCoreTL.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleThingy2 = new ModelRenderer(this, 9, 21); this.capsuleThingy2.setRotationPoint(-0.8F, 19.0F, 1.4F); this.capsuleThingy2.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleThingy3 = new ModelRenderer(this, 1, 27); this.capsuleThingy3.setRotationPoint(0.2F, 20.0F, 1.4F); this.capsuleThingy3.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F); this.capsuleCoreHori = new ModelRenderer(this, 0, 5); this.capsuleCoreHori.setRotationPoint(-1.1F, 18.7F, 0.4F); this.capsuleCoreHori.addBox(0.0F, 0.7F, 0.0F, 2, 2, 1, 0.0F); } public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, int texture) { switch (texture) { case 1: FMLClientHandler.instance().getClient().getTextureManager().bindTexture(TEXTURE1); break; case 2: FMLClientHandler.instance().getClient().getTextureManager().bindTexture(TEXTURE3); break; case 3: FMLClientHandler.instance().getClient().getTextureManager().bindTexture(TEXTURE2); break; } render(entity, f, f1, f2, f3, f4, f5); } @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleCoreVert.offsetX, this.capsuleCoreVert.offsetY, this.capsuleCoreVert.offsetZ); GL11.glTranslatef(this.capsuleCoreVert.rotationPointX * f5, this.capsuleCoreVert.rotationPointY * f5, this.capsuleCoreVert.rotationPointZ * f5); GL11.glScaled(0.6D, 1.0D, 1.0D); GL11.glTranslatef(-this.capsuleCoreVert.offsetX, -this.capsuleCoreVert.offsetY, -this.capsuleCoreVert.offsetZ); GL11.glTranslatef(-this.capsuleCoreVert.rotationPointX * f5, -this.capsuleCoreVert.rotationPointY * f5, -this.capsuleCoreVert.rotationPointZ * f5); this.capsuleCoreVert.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleCoreTR.offsetX, this.capsuleCoreTR.offsetY, this.capsuleCoreTR.offsetZ); GL11.glTranslatef(this.capsuleCoreTR.rotationPointX * f5, this.capsuleCoreTR.rotationPointY * f5, this.capsuleCoreTR.rotationPointZ * f5); GL11.glScaled(0.45D, 0.5D, 0.5D); GL11.glTranslatef(-this.capsuleCoreTR.offsetX, -this.capsuleCoreTR.offsetY, -this.capsuleCoreTR.offsetZ); GL11.glTranslatef(-this.capsuleCoreTR.rotationPointX * f5, -this.capsuleCoreTR.rotationPointY * f5, -this.capsuleCoreTR.rotationPointZ * f5); this.capsuleCoreTR.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleThingy4.offsetX, this.capsuleThingy4.offsetY, this.capsuleThingy4.offsetZ); GL11.glTranslatef(this.capsuleThingy4.rotationPointX * f5, this.capsuleThingy4.rotationPointY * f5, this.capsuleThingy4.rotationPointZ * f5); GL11.glScaled(0.4D, 0.4D, 0.4D); GL11.glTranslatef(-this.capsuleThingy4.offsetX, -this.capsuleThingy4.offsetY, -this.capsuleThingy4.offsetZ); GL11.glTranslatef(-this.capsuleThingy4.rotationPointX * f5, -this.capsuleThingy4.rotationPointY * f5, -this.capsuleThingy4.rotationPointZ * f5); this.capsuleThingy4.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleCoreBL.offsetX, this.capsuleCoreBL.offsetY, this.capsuleCoreBL.offsetZ); GL11.glTranslatef(this.capsuleCoreBL.rotationPointX * f5, this.capsuleCoreBL.rotationPointY * f5, this.capsuleCoreBL.rotationPointZ * f5); GL11.glScaled(0.45D, 0.5D, 0.5D); GL11.glTranslatef(-this.capsuleCoreBL.offsetX, -this.capsuleCoreBL.offsetY, -this.capsuleCoreBL.offsetZ); GL11.glTranslatef(-this.capsuleCoreBL.rotationPointX * f5, -this.capsuleCoreBL.rotationPointY * f5, -this.capsuleCoreBL.rotationPointZ * f5); this.capsuleCoreBL.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleCoreBR.offsetX, this.capsuleCoreBR.offsetY, this.capsuleCoreBR.offsetZ); GL11.glTranslatef(this.capsuleCoreBR.rotationPointX * f5, this.capsuleCoreBR.rotationPointY * f5, this.capsuleCoreBR.rotationPointZ * f5); GL11.glScaled(0.45D, 0.5D, 0.5D); GL11.glTranslatef(-this.capsuleCoreBR.offsetX, -this.capsuleCoreBR.offsetY, -this.capsuleCoreBR.offsetZ); GL11.glTranslatef(-this.capsuleCoreBR.rotationPointX * f5, -this.capsuleCoreBR.rotationPointY * f5, -this.capsuleCoreBR.rotationPointZ * f5); this.capsuleCoreBR.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleThingy1.offsetX, this.capsuleThingy1.offsetY, this.capsuleThingy1.offsetZ); GL11.glTranslatef(this.capsuleThingy1.rotationPointX * f5, this.capsuleThingy1.rotationPointY * f5, this.capsuleThingy1.rotationPointZ * f5); GL11.glScaled(0.4D, 0.4D, 0.4D); GL11.glTranslatef(-this.capsuleThingy1.offsetX, -this.capsuleThingy1.offsetY, -this.capsuleThingy1.offsetZ); GL11.glTranslatef(-this.capsuleThingy1.rotationPointX * f5, -this.capsuleThingy1.rotationPointY * f5, -this.capsuleThingy1.rotationPointZ * f5); this.capsuleThingy1.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleCoreTL.offsetX, this.capsuleCoreTL.offsetY, this.capsuleCoreTL.offsetZ); GL11.glTranslatef(this.capsuleCoreTL.rotationPointX * f5, this.capsuleCoreTL.rotationPointY * f5, this.capsuleCoreTL.rotationPointZ * f5); GL11.glScaled(0.45D, 0.5D, 0.5D); GL11.glTranslatef(-this.capsuleCoreTL.offsetX, -this.capsuleCoreTL.offsetY, -this.capsuleCoreTL.offsetZ); GL11.glTranslatef(-this.capsuleCoreTL.rotationPointX * f5, -this.capsuleCoreTL.rotationPointY * f5, -this.capsuleCoreTL.rotationPointZ * f5); this.capsuleCoreTL.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleThingy2.offsetX, this.capsuleThingy2.offsetY, this.capsuleThingy2.offsetZ); GL11.glTranslatef(this.capsuleThingy2.rotationPointX * f5, this.capsuleThingy2.rotationPointY * f5, this.capsuleThingy2.rotationPointZ * f5); GL11.glScaled(0.4D, 0.4D, 0.4D); GL11.glTranslatef(-this.capsuleThingy2.offsetX, -this.capsuleThingy2.offsetY, -this.capsuleThingy2.offsetZ); GL11.glTranslatef(-this.capsuleThingy2.rotationPointX * f5, -this.capsuleThingy2.rotationPointY * f5, -this.capsuleThingy2.rotationPointZ * f5); this.capsuleThingy2.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleThingy3.offsetX, this.capsuleThingy3.offsetY, this.capsuleThingy3.offsetZ); GL11.glTranslatef(this.capsuleThingy3.rotationPointX * f5, this.capsuleThingy3.rotationPointY * f5, this.capsuleThingy3.rotationPointZ * f5); GL11.glScaled(0.4D, 0.4D, 0.4D); GL11.glTranslatef(-this.capsuleThingy3.offsetX, -this.capsuleThingy3.offsetY, -this.capsuleThingy3.offsetZ); GL11.glTranslatef(-this.capsuleThingy3.rotationPointX * f5, -this.capsuleThingy3.rotationPointY * f5, -this.capsuleThingy3.rotationPointZ * f5); this.capsuleThingy3.render(f5); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(this.capsuleCoreHori.offsetX, this.capsuleCoreHori.offsetY, this.capsuleCoreHori.offsetZ); GL11.glTranslatef(this.capsuleCoreHori.rotationPointX * f5, this.capsuleCoreHori.rotationPointY * f5, this.capsuleCoreHori.rotationPointZ * f5); GL11.glScaled(1.0D, 0.6D, 0.99D); GL11.glTranslatef(-this.capsuleCoreHori.offsetX, -this.capsuleCoreHori.offsetY, -this.capsuleCoreHori.offsetZ); GL11.glTranslatef(-this.capsuleCoreHori.rotationPointX * f5, -this.capsuleCoreHori.rotationPointY * f5, -this.capsuleCoreHori.rotationPointZ * f5); this.capsuleCoreHori.render(f5); GL11.glPopMatrix(); } /** * 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; } }