package net.smart.render; import net.minecraft.client.model.*; import net.minecraft.entity.player.*; import net.minecraft.util.*; import org.lwjgl.opengl.GL11; public class ModelCapeRenderer extends ModelSpecialRenderer { public ModelCapeRenderer(ModelBase modelBase, int i, int j, ModelRotationRenderer baseRenderer, ModelRotationRenderer outerRenderer) { super(modelBase, i, j, baseRenderer); outer = outerRenderer; } public void beforeRender(EntityPlayer entityplayer, float factor) { this.entityplayer = entityplayer; this.setFactor = factor; super.beforeRender(true); } public void preTransform(float factor, boolean push) { super.preTransform(factor, push); double d = (entityplayer.field_71091_bM + (entityplayer.field_71094_bP - entityplayer.field_71091_bM) * setFactor) - (entityplayer.prevPosX + (entityplayer.posX - entityplayer.prevPosX) * setFactor); double d1 = (entityplayer.field_71096_bN + (entityplayer.field_71095_bQ - entityplayer.field_71096_bN) * setFactor) - (entityplayer.prevPosY + (entityplayer.posY - entityplayer.prevPosY) * setFactor); double d2 = (entityplayer.field_71097_bO + (entityplayer.field_71085_bR - entityplayer.field_71097_bO) * setFactor) - (entityplayer.prevPosZ + (entityplayer.posZ - entityplayer.prevPosZ) * setFactor); float f1 = entityplayer.prevRenderYawOffset + (entityplayer.renderYawOffset - entityplayer.prevRenderYawOffset) * setFactor; double d3 = MathHelper.sin((f1 * 3.141593F) / 180F); double d4 = -MathHelper.cos((f1 * 3.141593F) / 180F); float f2 = (float)d1 * 10F; if(f2 < -6F) { f2 = -6F; } if(f2 > 32F) { f2 = 32F; } float f3 = (float)(d * d3 + d2 * d4) * 100F; float f4 = (float)(d * d4 - d2 * d3) * 100F; if(f3 < 0.0F) { f3 = 0.0F; } float f5 = entityplayer.prevCameraYaw + (entityplayer.cameraYaw - entityplayer.prevCameraYaw) * setFactor; f2 += MathHelper.sin((entityplayer.prevDistanceWalkedModified + (entityplayer.distanceWalkedModified - entityplayer.prevDistanceWalkedModified) * setFactor) * 6F) * 32F * f5; float localAngle = 6F + f3 / 2.0F + f2; float localAngleMax = Math.max(70.523F - outer.rotateAngleX * RadiantToAngle, 6F); float realLocalAngle = Math.min(localAngle, localAngleMax); GL11.glRotatef(realLocalAngle, 1.0F, 0.0F, 0.0F); GL11.glRotatef(f4 / 2.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(-f4 / 2.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180F, 0.0F, 1.0F, 0.0F); } public boolean canBeRandomBoxSource() { return false; } private final ModelRotationRenderer outer; private EntityPlayer entityplayer; private float setFactor; }