public void renderAModelAt(
      TileEntityFossilMachine tile, double d, double d1, double d2, float f) {
    pokemon = new EntityPixelmon(tile.worldObj);
    // this is for rotation
    int j = 0;
    int i = tile.getBlockMetadata();

    if (i == 0) {
      j = 0;
    }

    if (i == 1) {
      j = 90;
    }

    if (i == 2) {
      j = 180;
    }

    if (i == 3) {
      j = 270;
    }

    bindTextureByName("/pixelmon/texture/blocks/fossilmachine.png");
    GL11.glPushMatrix();
    GL11.glTranslatef((float) d + 0.6F, (float) d1 + 2.3F, (float) d2 + 0.5F);
    GL11.glRotatef(j, 0.0F, 1.0F, 0.0F);
    GL11.glScalef(1.5F, -1.5F, -1.5F);
    model.renderModel(tile, 0.0625F);
    GL11.glPopMatrix();

    GL11.glPushMatrix();
    GL11.glEnable(GL11.GL_BLEND);
    GL11.glDepthMask(false);
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F);
    GL11.glTranslatef((float) d + 0.6F, (float) d1 + 2.3F, (float) d2 + 0.5F);
    GL11.glRotatef(j, 0.0F, 1.0F, 0.0F);
    GL11.glScalef(1.5F, -1.5F, -1.5F);
    model.renderGlass(tile, 0.0625F);
    GL11.glDepthMask(true);
    GL11.glDisable(GL11.GL_BLEND);
    GL11.glPopMatrix();

    renderCompletionLevel(tile, tile.completionRate + "%", d, d1, d2, 64, false, -1);
    if (tile.staticFlicker && tile.completionRate == 100 && tile.currentPokeball == -1)
      renderCompletionLevel(tile, "Insert Pokeball", d, d1 + 0.08f, d2, 64, true, -65536);
    else if (tile.completionRate > 0 && tile.completionRate < 100)
      renderCompletionLevel(tile, "Working" + tile.dots, d, d1 + 0.08f, d2, 64, true, -16711936);
    else if (tile.staticFlicker && tile.completionRate == 0 && tile.currentFossil == -1)
      renderCompletionLevel(tile, "Insert Fossil", d, d1 + 0.08f, d2, 64, true, -65536);
    else if (tile.staticFlicker && tile.completionRate == 100 && tile.currentPokeball != -1)
      renderCompletionLevel(tile, "Retrieve Pokemon", d, d1 + 0.08f, d2, 64, true, -16711936);
    renderBarLevel(tile, d, d1, d2, 64);

    bindTextureByName("/pixelmon/texture/fossils/" + fossilTexture(tile) + ".png");

    GL11.glPushMatrix();
    if (tile.currentFossil != -1) {
      if (i == 0)
        GL11.glTranslatef((float) d + 0.55F, (float) d1 + 1.3F + tile.y, (float) d2 + 0.55F);
      if (i == 1)
        GL11.glTranslatef((float) d + 0.65F, (float) d1 + 1.3F + tile.y, (float) d2 + 0.55F);
      if (i == 2)
        GL11.glTranslatef((float) d + 0.55F, (float) d1 + 1.3F + tile.y, (float) d2 + 0.55F);
      if (i == 3)
        GL11.glTranslatef((float) d + 0.55F, (float) d1 + 1.3F + tile.y, (float) d2 + 0.55F);
      GL11.glScalef(
          0.8F - tile.fossilProgress / 1000 / 2,
          -0.8F + tile.fossilProgress / 1000 / 2,
          -0.8F + tile.fossilProgress / 1000 / 2);
      if (i == 0 || i == 2) GL11.glRotatef(j, 0.0F, 1.0F, 0.0F);
      else if (i == 1 || i == 3) GL11.glRotatef(j + 180F, 0.0F, 1.0F, 0.0F);
      renderModel(tile, 0.0625F);
    }
    GL11.glPopMatrix();

    // Pokeball rendering

    if (tile.currentPokeball != -1) {
      bindTextureByName("/pixelmon/texture/pokeballs/" + tile.currentPokeballTexture);

      GL11.glPushMatrix();
      if (i == 0) {
        GL11.glTranslatef((float) d + 0.79F, (float) d1 + 0.4F, (float) d2 + 1.35F);
      }
      if (i == 1) {
        GL11.glTranslatef((float) d + 1.45F, (float) d1 + 0.4F, (float) d2 + 0.31F);
      }
      if (i == 2) {
        GL11.glTranslatef((float) d + 0.41F, (float) d1 + 0.4F, (float) d2 - 0.34F);
      }
      if (i == 3) {
        GL11.glTranslatef((float) d - 0.24F, (float) d1 + 0.4F, (float) d2 + 0.69F);
      }
      GL11.glRotatef(j, 0.0F, 1.0F, 0.0F);
      GL11.glScalef(1F, -1F, -1F);
      pokeball.renderModel(tile, 0.0625F);
      GL11.glPopMatrix();
    }

    if (EnumPokemon.hasPokemon(tile.currentPokemon) && !EnumTrainers.has(tile.currentPokemon))
      pokemon =
          ((EntityPixelmon)
              PixelmonEntityList.createEntityByName(tile.currentPokemon, tile.getWorldObj()));

    // Pokemon Rendering

    GL11.glPushMatrix();
    if (pokemon != null
        && EnumPokemon.hasPokemon(tile.currentPokemon)
        && !EnumTrainers.has(tile.currentPokemon)) {
      GL11.glTranslatef((float) d + 0.65F, (float) d1 + 1.3F, (float) d2 + 0.5F);
      pokemon.setWorld(tile.getWorldObj());
      float var10 = 0.6375F;
      GL11.glRotatef(j, 0.0F, 1.0F, 0.0F);
      GL11.glScalef(
          0.0f + tile.pokemonProgress / 1000 / 4,
          0.0f + tile.pokemonProgress / 1000 / 4,
          0.0f + tile.pokemonProgress / 1000 / 4);
      if (tile.isShiny) pokemon.setIsShiny(true);
      pokemon.setLocationAndAngles(d, d1, d2, 0.0F, 0.0F);
      RenderManager.instance.renderEntityWithPosYaw(pokemon, 0.0D, 0.0D, 0.0D, 0.0F, f);
    }
    GL11.glPopMatrix();
  }
  protected void renderBarLevel(
      TileEntityFossilMachine tile, double par3, double par5, double par7, int par9) {
    int width = 40;
    int height = 10;
    int j = 0;
    int i = tile.getBlockMetadata();

    if (i == 0) {
      j = 0;
    }

    if (i == 1) {
      j = 90;
    }

    if (i == 2) {
      j = 180;
    }

    if (i == 3) {
      j = 270;
    }

    float f2 = 1.6F;
    float f3 = 0.00666667F * f2;
    GL11.glPushMatrix();
    float scaleFactor = PixelmonConfig.scaleModelsUp ? 1.3f : 1;
    if (i == 0) GL11.glTranslatef((float) par3 + 0.60F, (float) par5 + 0.63F, (float) par7 + 1.41F);
    if (i == 1) GL11.glTranslatef((float) par3 + 1.51F, (float) par5 + 0.63F, (float) par7 + 0.50F);
    if (i == 2) GL11.glTranslatef((float) par3 + 0.60F, (float) par5 + 0.63F, (float) par7 - 0.41F);
    if (i == 3) GL11.glTranslatef((float) par3 - 0.31F, (float) par5 + 0.63F, (float) par7 + 0.51F);
    GL11.glNormal3f(0.0F, 1.0F, 0.0F);
    GL11.glRotatef(j + 180, 0.0F, 1.0F, 0.0F);
    GL11.glScalef(-f3, -f3, f3);
    GL11.glDisable(2896 /* GL_LIGHTING */);
    GL11.glDepthMask(false);
    GL11.glDisable(2929 /* GL_DEPTH_TEST */);
    GL11.glEnable(3042 /* GL_BLEND */);
    GL11.glBlendFunc(770, 771);
    Tessellator tessellator = Tessellator.instance;
    byte byte0 = -20;
    GL11.glDisable(3553 /* GL_TEXTURE_2D */);
    tessellator.startDrawingQuads();
    float f8 = (float) (tile.completionRate / 2);
    tessellator.setColorRGBA_F(0.0039F, 0.03137F, 0.4196F, 1.0F);
    tessellator.addVertex(-25F + f8, -7 + byte0, 0.0D);
    tessellator.addVertex(-25F + f8, -6 + byte0, 0.0D);
    tessellator.addVertex(25D, -6 + byte0, 0.0D);
    tessellator.addVertex(25D, -7 + byte0, 0.0D);
    tessellator.setColorRGBA_F(0.0F, 0.8901F, 0.8901F, 1.0F);
    tessellator.addVertex(-25D, -7 + byte0, 0.0D);
    tessellator.addVertex(-25D, -6 + byte0, 0.0D);
    tessellator.addVertex(f8 - 25F, -6 + byte0, 0.0D);
    tessellator.addVertex(f8 - 25F, -7 + byte0, 0.0D);
    tessellator.draw();
    GL11.glEnable(3553 /* GL_TEXTURE_2D */);
    GL11.glEnable(2929 /* GL_DEPTH_TEST */);
    GL11.glDepthMask(true);
    GL11.glEnable(2896 /* GL_LIGHTING */);
    GL11.glDisable(3042 /* GL_BLEND */);
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    GL11.glPopMatrix();
  }