@Override
  protected void render(IRenderObject renderObject, float boxTranslation) {
    if (renderObject != null && renderObject.getObject() instanceof EntityAethon) {
      RenderObject o = (RenderObject) renderObject;
      EntityAethon aethon = (EntityAethon) o.getEntity();

      boolean isFlying = aethon.isFlying();
      float swingProgress = o.swingProgress;
      float swingProgressPrev = o.swingProgressPrev;
      float wingDistMulti = 5F;
      float wingSpeed = isFlying ? 1.75F : 20F;
      float neckSpeed = isFlying ? 8F : 18F;
      float tailSpeed = isFlying ? 4F : 18F;
      long ticks = aethon.ticksExisted;

      if (isFlying) {
        this.rThigh.rotateAngleX = (float) Math.toRadians(-44F);
        this.lThigh.rotateAngleX = (float) Math.toRadians(-44F);
        this.rArm.rotateAngleX = (float) Math.toRadians(-18F);
        this.lArm.rotateAngleX = (float) Math.toRadians(-18F);

        this.neck1.rotateAngleX =
            (float) Math.toRadians((Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));
        this.neck2.rotateAngleX =
            (float) Math.toRadians((Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));
        this.neck3.rotateAngleX =
            (float) Math.toRadians((Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));
        this.neck4.rotateAngleX =
            (float) Math.toRadians((Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));

        this.tail1.rotateAngleX =
            (float)
                Math.toRadians(-82F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail2.rotateAngleX =
            (float)
                Math.toRadians(-12F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail3.rotateAngleX =
            (float)
                Math.toRadians(0F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail4.rotateAngleX =
            (float)
                Math.toRadians(0F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail5.rotateAngleX =
            (float)
                Math.toRadians(0F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));

        this.lWingArm.rotateAngleY =
            (float)
                Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 3F)
                            * wingDistMulti));
        this.lWingArm.rotateAngleZ =
            (float)
                Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 2F)
                            * wingDistMulti));
        this.lWingArm.rotateAngleZ =
            (float)
                Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 10F)
                            * wingDistMulti));
        this.lWingArm2.rotateAngleX =
            (float)
                Math.toRadians(
                    (100F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 6F)
                            * wingDistMulti));
        this.lWingArm2.rotateAngleY =
            (float)
                -Math.toRadians(
                    (30F
                        + (Math.cos((ticks + Game.partialTicks()) / (wingSpeed)) * 4F)
                            * wingDistMulti));
        this.lWingArm2.rotateAngleZ =
            (float)
                Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 4F)
                            * wingDistMulti));

        this.rWingArm.rotateAngleY =
            (float)
                -Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 3F)
                            * wingDistMulti));
        this.rWingArm.rotateAngleZ =
            (float)
                -Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 2F)
                            * wingDistMulti));
        this.rWingArm.rotateAngleZ =
            (float)
                -Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 10F)
                            * wingDistMulti));
        this.rWingArm2.rotateAngleX =
            (float)
                Math.toRadians(
                    (100F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 6F)
                            * wingDistMulti));
        this.rWingArm2.rotateAngleY =
            (float)
                Math.toRadians(
                    (30F
                        + (Math.cos((ticks + Game.partialTicks()) / (wingSpeed)) * 4F)
                            * wingDistMulti));
        this.rWingArm2.rotateAngleZ =
            (float)
                -Math.toRadians(
                    (40F
                        + (Math.sin((ticks + Game.partialTicks()) / (wingSpeed)) * 4F)
                            * wingDistMulti));
      } else {
        this.rThigh.rotateAngleX =
            (float)
                (Math.toRadians(-44F)
                    + MathHelper.cos(swingProgress * 0.3662F) * 0.9F * swingProgressPrev);
        this.lThigh.rotateAngleX =
            (float)
                (Math.toRadians(-44F)
                    + MathHelper.sin(swingProgress * 0.3662F) * 0.9F * swingProgressPrev);
        this.rArm.rotateAngleX =
            (float)
                (Math.toRadians(-18F)
                    + MathHelper.cos(swingProgress * 0.3662F) * 0.6F * swingProgressPrev
                    + 0.6665191F);
        this.lArm.rotateAngleX =
            (float)
                (Math.toRadians(-18F)
                    + MathHelper.sin(swingProgress * 0.3662F) * 0.6F * swingProgressPrev
                    + 0.6665191F);

        this.neck1.rotateAngleX =
            (float) Math.toRadians((Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));
        this.neck2.rotateAngleX =
            (float)
                Math.toRadians(16F + (Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));
        this.neck3.rotateAngleX =
            (float)
                Math.toRadians(16F + (Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));
        this.neck4.rotateAngleX =
            (float)
                Math.toRadians(19F + (Math.sin((ticks + Game.partialTicks()) / (neckSpeed)) * 3F));

        this.tail1.rotateAngleX =
            (float)
                Math.toRadians(-72F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail2.rotateAngleX =
            (float)
                Math.toRadians(16F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail3.rotateAngleX =
            (float)
                Math.toRadians(16F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail4.rotateAngleX =
            (float)
                Math.toRadians(19F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));
        this.tail5.rotateAngleX =
            (float)
                Math.toRadians(19F + (Math.sin((ticks + Game.partialTicks()) / (tailSpeed)) * 3F));

        this.lWingArm.rotateAngleX = (float) Math.toRadians(-41.74F);
        this.lWingArm.rotateAngleY = (float) Math.toRadians(0F);
        this.lWingArm.rotateAngleZ = (float) Math.toRadians(23.48F);
        this.lWingArm2.rotateAngleX = (float) Math.toRadians(23.48F);
        this.lWingArm2.rotateAngleY = (float) Math.toRadians(10.29F);
        this.lWingArm2.rotateAngleZ = (float) Math.toRadians(-12.86F);

        this.rWingArm.rotateAngleX = (float) Math.toRadians(-41.74F);
        this.rWingArm.rotateAngleY = (float) Math.toRadians(0F);
        this.rWingArm.rotateAngleZ = (float) Math.toRadians(-23.48F);
        this.rWingArm2.rotateAngleX = (float) Math.toRadians(23.48F);
        this.rWingArm2.rotateAngleY = (float) Math.toRadians(-10.29F);
        this.rWingArm2.rotateAngleZ = (float) Math.toRadians(12.86F);
      }

      OpenGL.pushMatrix();
      {
        if (isFlying) {
          OpenGL.rotate(75F, 1, 0, 0);
        }

        this.rWingArm.render(boxTranslation);
        this.rArm.render(boxTranslation);
        this.lWingArm.render(boxTranslation);
        this.lArm.render(boxTranslation);
        this.chest.render(boxTranslation);
      }
      OpenGL.popMatrix();
    } else {
      this.rWingArm.render(boxTranslation);
      this.rArm.render(boxTranslation);
      this.lWingArm.render(boxTranslation);
      this.lArm.render(boxTranslation);
      this.chest.render(boxTranslation);
    }
  }