private void drawCrossedSquares(
     IBlockAccess blockAccess,
     double x,
     double y,
     double z,
     float size,
     Block block,
     int meta,
     RenderBlocks renderer) {
   Tessellator tessellator = Tessellator.instance;
   IIcon icon = renderer.getBlockIcon(block, blockAccess, (int) x, (int) y, (int) z, meta);
   if (renderer.hasOverrideBlockTexture()) {
     icon = renderer.overrideBlockTexture;
   }
   double minU = (double) icon.getMinU();
   double minV = (double) icon.getMinV();
   double maxU = (double) icon.getMaxU();
   double maxV = (double) icon.getMaxV();
   double scaledSize = 0.45D * (double) size;
   double minX = x + 0.5D - scaledSize;
   double maxX = x + 0.5D + scaledSize;
   double minZ = z + 0.5D - scaledSize;
   double maxZ = z + 0.5D + scaledSize;
   tessellator.addVertexWithUV(minX, y + (double) size, minZ, minU, minV);
   tessellator.addVertexWithUV(minX, y + 0.0D, minZ, minU, maxV);
   tessellator.addVertexWithUV(maxX, y + 0.0D, maxZ, maxU, maxV);
   tessellator.addVertexWithUV(maxX, y + (double) size, maxZ, maxU, minV);
   tessellator.addVertexWithUV(maxX, y + (double) size, maxZ, minU, minV);
   tessellator.addVertexWithUV(maxX, y + 0.0D, maxZ, minU, maxV);
   tessellator.addVertexWithUV(minX, y + 0.0D, minZ, maxU, maxV);
   tessellator.addVertexWithUV(minX, y + (double) size, minZ, maxU, minV);
   tessellator.addVertexWithUV(minX, y + (double) size, maxZ, minU, minV);
   tessellator.addVertexWithUV(minX, y + 0.0D, maxZ, minU, maxV);
   tessellator.addVertexWithUV(maxX, y + 0.0D, minZ, maxU, maxV);
   tessellator.addVertexWithUV(maxX, y + (double) size, minZ, maxU, minV);
   tessellator.addVertexWithUV(maxX, y + (double) size, minZ, minU, minV);
   tessellator.addVertexWithUV(maxX, y + 0.0D, minZ, minU, maxV);
   tessellator.addVertexWithUV(minX, y + 0.0D, maxZ, maxU, maxV);
   tessellator.addVertexWithUV(minX, y + (double) size, maxZ, maxU, minV);
 }
Пример #2
0
  @Override
  public boolean renderWorldBlock(
      IBlockAccess world, int x, int y, int z, Block b, int modelId, RenderBlocks renderer) {
    BlockPane block = (BlockPane) b;
    Tessellator tessellator = Tessellator.instance;

    tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));

    float f = 1.0F;
    int i1 = block.colorMultiplier(world, x, y, z);
    float f1 = (i1 >> 16 & 255) / 255.0F;
    float f2 = (i1 >> 8 & 255) / 255.0F;
    float f3 = (i1 & 255) / 255.0F;

    if (EntityRenderer.anaglyphEnable) {
      float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
      float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
      float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
      f1 = f4;
      f2 = f5;
      f3 = f6;
    }
    tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);

    int meta = world.getBlockMetadata(x, y, z);
    IIcon iconPane = block.getIcon(2, meta);
    IIcon iconTop = block.getIcon(1, meta);
    IIcon iconSide = block.getIcon(0, meta);
    if (iconPane == null || iconTop == null || iconSide == null) return false;

    if (renderer.hasOverrideBlockTexture()) {
      paneRenderer.set(
          x,
          y,
          z,
          renderer.overrideBlockTexture,
          renderer.overrideBlockTexture,
          renderer.overrideBlockTexture);
    } else {
      paneRenderer.set(x, y, z, iconPane, iconTop, iconSide);
    }

    boolean connectsNorth = block.canPaneConnectToBlock(world.getBlock(x, y, z - 1));
    boolean connectsSouth = block.canPaneConnectToBlock(world.getBlock(x, y, z + 1));
    boolean connectsWest = block.canPaneConnectToBlock(world.getBlock(x - 1, y, z));
    boolean connectsEast = block.canPaneConnectToBlock(world.getBlock(x + 1, y, z));
    boolean connectsTop = block.canPaneConnectToBlock(world.getBlock(x, y + 1, z));
    boolean connectsBottom = block.canPaneConnectToBlock(world.getBlock(x, y - 1, z));

    boolean connectsTopNorth = block.canPaneConnectToBlock(world.getBlock(x, y + 1, z - 1));
    boolean connectsTopSouth = block.canPaneConnectToBlock(world.getBlock(x, y + 1, z + 1));
    boolean connectsTopWest = block.canPaneConnectToBlock(world.getBlock(x - 1, y + 1, z));
    boolean connectsTopEast = block.canPaneConnectToBlock(world.getBlock(x + 1, y + 1, z));

    boolean connectsBottomNorth = block.canPaneConnectToBlock(world.getBlock(x, y - 1, z - 1));
    boolean connectsBottomSouth = block.canPaneConnectToBlock(world.getBlock(x, y - 1, z + 1));
    boolean connectsBottomWest = block.canPaneConnectToBlock(world.getBlock(x - 1, y - 1, z));
    boolean connectsBottomEast = block.canPaneConnectToBlock(world.getBlock(x + 1, y - 1, z));

    boolean isolatedTop =
        !connectsTopNorth && !connectsTopSouth && !connectsTopWest && !connectsTopEast;
    boolean isolatedBottom =
        !connectsBottomNorth && !connectsBottomSouth && !connectsBottomWest && !connectsBottomEast;

    if (!connectsNorth && !connectsSouth && !connectsWest && !connectsEast) {
      connectsNorth = connectsSouth = connectsWest = connectsEast = true;
    }

    int connections = 0;
    if (connectsNorth) {
      paneRenderer.renderNorthPane();
      if (!connectsBottom || !connectsBottomNorth && !isolatedBottom)
        paneRenderer.renderVerticalNS(-0.0003, 0.0, 0.5, 0.5, 0.0);
      if (!connectsTop || !connectsTopNorth && !isolatedTop)
        paneRenderer.renderVerticalNS(+1.0003, 0.0, 0.5, 0.5, 0.0);
      connections++;
    }
    if (connectsSouth) {
      paneRenderer.renderSouthPane();
      if (!connectsBottom || !connectsBottomSouth && !isolatedBottom)
        paneRenderer.renderVerticalNS(-0.0004, 0.5, 1.0, 1.0, 0.5);
      if (!connectsTop || !connectsTopSouth && !isolatedTop)
        paneRenderer.renderVerticalNS(+1.0004, 0.5, 1.0, 1.0, 0.5);
      connections++;
    }
    if (connectsWest) {
      paneRenderer.renderWestPane();
      if (!connectsBottom || !connectsBottomWest && !isolatedBottom)
        paneRenderer.renderVerticalWE(-0.0001, 0.0, 0.5, 0.5, 0.0);
      if (!connectsTop || !connectsTopWest && !isolatedTop)
        paneRenderer.renderVerticalWE(+1.0001, 0.0, 0.5, 0.5, 0.0);
      connections++;
    }
    if (connectsEast) {
      paneRenderer.renderEastPane();
      if (!connectsBottom || !connectsBottomEast && !isolatedBottom)
        paneRenderer.renderVerticalWE(-0.0002, 0.5, 1.0, 1.0, 0.5);
      if (!connectsTop || !connectsTopEast && !isolatedTop)
        paneRenderer.renderVerticalWE(+1.0002, 0.5, 1.0, 1.0, 0.5);
      connections++;
    }

    if (connections == 1) {
      if (connectsNorth) paneRenderer.renderHorizontalNS(0.5, 1.0, 0.0);
      if (connectsSouth) paneRenderer.renderHorizontalNS(0.5, 0.0, 1.0);
      if (connectsEast) paneRenderer.renderHorizontalWE(0.5, 0.0, 1.0);
      if (connectsWest) paneRenderer.renderHorizontalWE(0.5, 1.0, 0.0);
    } else if (connections == 4) {
      paneRenderer.renderHorizontalNS(0.0, 1.0, 0.0);
      paneRenderer.renderHorizontalNS(1.0, 0.0, 1.0);
      paneRenderer.renderHorizontalWE(0.0, 0.0, 1.0);
      paneRenderer.renderHorizontalWE(1.0, 1.0, 0.0);
    }

    return true;
  }
  @Override
  public boolean renderWorldBlock(
      IBlockAccess blockAccess,
      int i,
      int j,
      int k,
      Block bblock,
      int modelId,
      RenderBlocks renderer) {
    BlockLantern block = (BlockLantern) bblock;

    Icon icon =
        renderer.hasOverrideBlockTexture()
            ? renderer.overrideBlockTexture
            : renderer.getBlockIcon(block);
    int brightness = block.getMixedBrightnessForBlock(blockAccess, i, j, k);
    Tessellator tessellator = Tessellator.instance;

    double minX = 4.0 / 16.0D;
    double minY = 0.0 / 16.0D;
    double minZ = 4.0 / 16.0D;
    double maxX = 12.0 / 16.0D;
    double maxY = 10.0 / 16.0D;
    double maxZ = 12.0 / 16.0D;

    double uvMinU = icon.getInterpolatedU(0.0D);
    double uvMaxU = icon.getInterpolatedU(8.0D);
    double uvMinV = icon.getInterpolatedV(6.0D);
    double uvMaxV = icon.getInterpolatedV(16.0D);

    tessellator.setBrightness(brightness);

    tessellator.addTranslation((float) i, (float) j, (float) k);

    {
      tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
      tessellator.addVertexWithUV(minX, minY, minZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, minZ, uvMinU, uvMaxV);

      tessellator.addVertexWithUV(maxX, minY, minZ, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, minZ, uvMaxU, uvMaxV);
    }

    {
      tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
      tessellator.addVertexWithUV(maxX, minY, maxZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, maxZ, uvMinU, uvMaxV);

      tessellator.addVertexWithUV(minX, minY, maxZ, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, maxZ, uvMaxU, uvMaxV);
    }

    {
      tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
      tessellator.addVertexWithUV(minX, minY, minZ, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, maxZ, uvMaxU, uvMaxV);

      tessellator.addVertexWithUV(minX, minY, maxZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, minZ, uvMinU, uvMaxV);
    }

    {
      tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
      tessellator.addVertexWithUV(maxX, minY, maxZ, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, minZ, uvMaxU, uvMaxV);

      tessellator.addVertexWithUV(maxX, minY, minZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, maxZ, uvMinU, uvMaxV);
    }

    uvMinU = icon.getInterpolatedU(8.0D);
    uvMaxU = icon.getInterpolatedU(16.0D);
    uvMinV = icon.getInterpolatedV(8.0D);
    uvMaxV = icon.getInterpolatedV(16.0D);

    {
      tessellator.setColorOpaque_F(0.6F, 0.6F, 0.6F);
      tessellator.addVertexWithUV(maxX, minY, minZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(maxX, minY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, minZ, uvMinU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, maxZ, uvMinU, uvMaxV);

      tessellator.setColorOpaque_F(0.6F, 0.6F, 0.6F);
      tessellator.addVertexWithUV(minX, maxY, maxZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMinU, uvMaxV);
    }

    minY = 2.0D / 16.0D;

    {
      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(minX, minY, minZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(minX, minY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, minZ, uvMinU, uvMaxV);
    }

    double indent = 3.0D / 16.0D;

    uvMinU = icon.getInterpolatedU(8.0D);
    uvMaxU = icon.getInterpolatedU(16.0D);
    uvMinV = icon.getInterpolatedV(1.0D);
    uvMaxV = icon.getInterpolatedV(8.0D);

    minX = 4.0D / 16.0D;
    maxX = 12.0D / 16.0D;
    minY = 2.0D / 16.0D;
    maxY = 9.0D / 16.0D;
    minZ = 4.0D / 16.0D;
    maxZ = 12.0D / 16.0D;

    {
      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(minX, minY, minZ + indent, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, minZ + indent, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, minZ + indent, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, minZ + indent, uvMinU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(maxX, minY, minZ + indent, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, minZ + indent, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, minZ + indent, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, minZ + indent, uvMaxU, uvMaxV);
    }

    {
      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(maxX, minY, maxZ - indent, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ - indent, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX, maxY, maxZ - indent, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX, minY, maxZ - indent, uvMinU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(minX, minY, maxZ - indent, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(minX, maxY, maxZ - indent, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX, maxY, maxZ - indent, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX, minY, maxZ - indent, uvMaxU, uvMaxV);
    }

    {
      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(minX + indent, minY, minZ, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(minX + indent, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX + indent, maxY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX + indent, minY, maxZ, uvMaxU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(minX + indent, minY, maxZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(minX + indent, maxY, maxZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(minX + indent, maxY, minZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(minX + indent, minY, minZ, uvMinU, uvMaxV);
    }

    {
      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(maxX - indent, minY, maxZ, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(maxX - indent, maxY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX - indent, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX - indent, minY, minZ, uvMaxU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(maxX - indent, minY, minZ, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(maxX - indent, maxY, minZ, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(maxX - indent, maxY, maxZ, uvMinU, uvMinV);
      tessellator.addVertexWithUV(maxX - indent, minY, maxZ, uvMinU, uvMaxV);
    }

    uvMinU = icon.getInterpolatedU(0.0D);
    uvMaxU = icon.getInterpolatedU(8.0D);
    uvMinV = icon.getInterpolatedV(1.0D);
    uvMaxV = icon.getInterpolatedV(6.0D);

    float handleRot = 0.0F;
    boolean renderDoubleHandle = false;

    boolean s1 = false;
    boolean s2 = false;
    boolean s3 = false;
    boolean s4 = false;

    if (blockAccess.isBlockOpaqueCube(i, j + 1, k)) {
      renderDoubleHandle = true;
      handleRot = 45.0F;
    } else if (!blockAccess.isBlockOpaqueCube(i, j - 1, k)) {
      s1 = blockAccess.isBlockOpaqueCube(i - 1, j, k);
      s2 = blockAccess.isBlockOpaqueCube(i, j, k - 1);
      s3 = blockAccess.isBlockOpaqueCube(i + 1, j, k);
      s4 = blockAccess.isBlockOpaqueCube(i, j, k + 1);

      if (s1 & s2 & s3 & s4) {
        handleRot = 45.0F;
      } else if ((s1 & s2) | (s3 & s4)) {
        handleRot = 45.0F;
      } else if ((s2 & s3) | (s4 & s1)) {
        handleRot = -45.0F;
      } else if (!s2 & !s4) {
        handleRot = 0.0F;
      } else if (!s1 & !s3) {
        handleRot = 90.0F;
      }
    }

    {
      double x1 = 0.5D - Math.sin(handleRot * Math.PI / 180.0D) * 0.25D;
      double x2 = 1.0D - x1;
      double z1 = 0.5D - Math.cos(handleRot * Math.PI / 180.0D) * 0.25D;
      double z2 = 1.0D - z1;
      double y1 = 10.0D / 16.0D;
      double y2 = 15.0D / 16.0D;

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(x1, y1, z1, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(x1, y2, z1, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(x2, y2, z2, uvMinU, uvMinV);
      tessellator.addVertexWithUV(x2, y1, z2, uvMinU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(x2, y1, z2, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(x2, y2, z2, uvMinU, uvMinV);
      tessellator.addVertexWithUV(x1, y2, z1, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(x1, y1, z1, uvMaxU, uvMaxV);
    }

    if (renderDoubleHandle) {
      double x1 = 0.5D - Math.sin((handleRot + 90) * Math.PI / 180.0D) * 0.25D;
      double x2 = 1.0D - x1;
      double z1 = 0.5D - Math.cos((handleRot + 90) * Math.PI / 180.0D) * 0.25D;
      double z2 = 1.0D - z1;
      double y1 = 18.0D / 16.0D;
      double y2 = 13.0D / 16.0D;

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(x1, y1, z1, uvMaxU, uvMaxV);
      tessellator.addVertexWithUV(x1, y2, z1, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(x2, y2, z2, uvMinU, uvMinV);
      tessellator.addVertexWithUV(x2, y1, z2, uvMinU, uvMaxV);

      tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
      tessellator.addVertexWithUV(x2, y1, z2, uvMinU, uvMaxV);
      tessellator.addVertexWithUV(x2, y2, z2, uvMinU, uvMinV);
      tessellator.addVertexWithUV(x1, y2, z1, uvMaxU, uvMinV);
      tessellator.addVertexWithUV(x1, y1, z1, uvMaxU, uvMaxV);
    } else {
      uvMinV = icon.getInterpolatedV(0.0D);
      uvMaxV = icon.getInterpolatedV(1.0D);
      minY = 13.0D / 16.0D;
      maxY = 14.0D / 16.0D;

      if (s1 | s3) {
        uvMinU = icon.getInterpolatedU(0.0D);
        uvMaxU = icon.getInterpolatedU(16.0D);

        minZ = 7.5D / 16.0D;
        maxZ = 1.0D - minZ;

        if (s1) {
          uvMinU = icon.getInterpolatedU(0.0D);
          minX = 0.0D;
        } else {
          uvMinU = icon.getInterpolatedU(7.0D);
          minX = 6.0D / 16.0D;

          double uv2MinU = icon.getInterpolatedU(0.0D);
          double uv2MaxU = icon.getInterpolatedU(1.0D);
          double uv2MinV = icon.getInterpolatedV(0.0D);
          double uv2MaxV = icon.getInterpolatedV(1.0D);

          tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
          tessellator.addVertexWithUV(minX, minY, maxZ, uv2MinU, uv2MaxV);
          tessellator.addVertexWithUV(minX, maxY, maxZ, uv2MinU, uv2MinV);
          tessellator.addVertexWithUV(minX, maxY, minZ, uv2MaxU, uv2MinV);
          tessellator.addVertexWithUV(minX, minY, minZ, uv2MaxU, uv2MaxV);
        }

        if (s3) {
          uvMaxU = icon.getInterpolatedU(16.0D);
          maxX = 1.0D;
        } else {
          uvMaxU = icon.getInterpolatedU(9.0D);
          maxX = 10.0D / 16.0D;

          double uv2MinU = icon.getInterpolatedU(0.0D);
          double uv2MaxU = icon.getInterpolatedU(1.0D);
          double uv2MinV = icon.getInterpolatedV(0.0D);
          double uv2MaxV = icon.getInterpolatedV(1.0D);

          tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
          tessellator.addVertexWithUV(maxX, minY, minZ, uv2MinU, uv2MaxV);
          tessellator.addVertexWithUV(maxX, maxY, minZ, uv2MinU, uv2MinV);
          tessellator.addVertexWithUV(maxX, maxY, maxZ, uv2MaxU, uv2MinV);
          tessellator.addVertexWithUV(maxX, minY, maxZ, uv2MaxU, uv2MaxV);
        }

        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
        tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMinU, uvMaxV);
        tessellator.addVertexWithUV(maxX, maxY, minZ, uvMinU, uvMinV);
        tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(minX, maxY, maxZ, uvMaxU, uvMaxV);

        tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
        tessellator.addVertexWithUV(minX, minY, minZ, uvMaxU, uvMaxV);
        tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(maxX, maxY, minZ, uvMinU, uvMinV);
        tessellator.addVertexWithUV(maxX, minY, minZ, uvMinU, uvMaxV);

        tessellator.setColorOpaque_F(0.6F, 0.6F, 0.6F);
        tessellator.addVertexWithUV(maxX, minY, minZ, uvMaxU, uvMaxV);
        tessellator.addVertexWithUV(maxX, minY, maxZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(minX, minY, maxZ, uvMinU, uvMinV);
        tessellator.addVertexWithUV(minX, minY, minZ, uvMinU, uvMaxV);

        tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
        tessellator.addVertexWithUV(maxX, minY, maxZ, uvMinU, uvMaxV);
        tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMinU, uvMinV);
        tessellator.addVertexWithUV(minX, maxY, maxZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(minX, minY, maxZ, uvMaxU, uvMaxV);
      }

      if (s2 | s4) {
        uvMinU = icon.getInterpolatedU(0.0D);
        uvMaxU = icon.getInterpolatedU(16.0D);

        minX = 7.5D / 16.0D;
        maxX = 1.0D - minX;

        if (s2) {
          uvMinU = icon.getInterpolatedU(0.0D);
          minZ = 0.0D;
        } else {
          uvMinU = icon.getInterpolatedU(7.0D);
          minZ = 6.0D / 16.0D;

          double uv2MinU = icon.getInterpolatedU(0.0D);
          double uv2MaxU = icon.getInterpolatedU(1.0D);
          double uv2MinV = icon.getInterpolatedV(0.0D);
          double uv2MaxV = icon.getInterpolatedV(1.0D);

          tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
          tessellator.addVertexWithUV(minX, minY, minZ, uv2MaxU, uv2MaxV);
          tessellator.addVertexWithUV(minX, maxY, minZ, uv2MaxU, uv2MinV);
          tessellator.addVertexWithUV(maxX, maxY, minZ, uv2MinU, uv2MinV);
          tessellator.addVertexWithUV(maxX, minY, minZ, uv2MinU, uv2MaxV);
        }

        if (s4) {
          uvMaxU = icon.getInterpolatedU(16.0D);
          maxZ = 1.0D;
        } else {
          uvMaxU = icon.getInterpolatedU(9.0D);
          maxZ = 10.0D / 16.0D;

          double uv2MinU = icon.getInterpolatedU(0.0D);
          double uv2MaxU = icon.getInterpolatedU(1.0D);
          double uv2MinV = icon.getInterpolatedV(0.0D);
          double uv2MaxV = icon.getInterpolatedV(1.0D);

          tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
          tessellator.addVertexWithUV(maxX, minY, maxZ, uv2MaxU, uv2MaxV);
          tessellator.addVertexWithUV(maxX, maxY, maxZ, uv2MaxU, uv2MinV);
          tessellator.addVertexWithUV(minX, maxY, maxZ, uv2MinU, uv2MinV);
          tessellator.addVertexWithUV(minX, minY, maxZ, uv2MinU, uv2MaxV);
        }

        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
        tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMinU, uvMaxV);
        tessellator.addVertexWithUV(maxX, maxY, minZ, uvMaxU, uvMaxV);
        tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(minX, maxY, maxZ, uvMinU, uvMinV);

        tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
        tessellator.addVertexWithUV(minX, minY, maxZ, uvMinU, uvMaxV);
        tessellator.addVertexWithUV(minX, maxY, maxZ, uvMinU, uvMinV);
        tessellator.addVertexWithUV(minX, maxY, minZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(minX, minY, minZ, uvMaxU, uvMaxV);

        tessellator.setColorOpaque_F(0.6F, 0.6F, 0.6F);
        tessellator.addVertexWithUV(maxX, minY, minZ, uvMinU, uvMaxV);
        tessellator.addVertexWithUV(maxX, minY, maxZ, uvMaxU, uvMaxV);
        tessellator.addVertexWithUV(minX, minY, maxZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(minX, minY, minZ, uvMinU, uvMinV);

        tessellator.setColorOpaque_F(0.8F, 0.8F, 0.8F);
        tessellator.addVertexWithUV(maxX, minY, minZ, uvMinU, uvMaxV);
        tessellator.addVertexWithUV(maxX, maxY, minZ, uvMinU, uvMinV);
        tessellator.addVertexWithUV(maxX, maxY, maxZ, uvMaxU, uvMinV);
        tessellator.addVertexWithUV(maxX, minY, maxZ, uvMaxU, uvMaxV);
      }
    }

    tessellator.addTranslation((float) -i, (float) -j, (float) -k);

    return true;
  }
  private boolean renderBlockWoodLadder(
      IBlockAccess blockAccess,
      int x,
      int y,
      int z,
      BlockWoodLadder block,
      int modelID,
      RenderBlocks renderer) {
    int color = block.colorMultiplier(blockAccess, x, y, z);
    float r = (float) (color >> 16 & 255) / 255.0F;
    float g = (float) (color >> 8 & 255) / 255.0F;
    float b = (float) (color & 255) / 255.0F;
    if (EntityRenderer.anaglyphEnable) {
      float f3 = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F;
      float f4 = (r * 30.0F + g * 70.0F) / 100.0F;
      float f5 = (r * 30.0F + b * 70.0F) / 100.0F;
      r = f3;
      g = f4;
      b = f5;
    }
    TileEntityMetadata tile = (TileEntityMetadata) blockAccess.getTileEntity(x, y, z);
    int meta = tile.getTileMetadata();
    int direction = meta & 7;

    Tessellator tessellator = Tessellator.instance;
    IIcon icon = renderer.getBlockIconFromSideAndMetadata(block, 0, meta);
    if (renderer.hasOverrideBlockTexture()) {
      icon = renderer.overrideBlockTexture;
    }
    tessellator.setBrightness(block.getMixedBrightnessForBlock(blockAccess, x, y, z));
    tessellator.setColorOpaque_F(r, g, b);
    double minU = (double) icon.getMinU();
    double minV = (double) icon.getMinV();
    double maxU = (double) icon.getMaxU();
    double maxV = (double) icon.getMaxV();
    double d4 = 0.0D;
    double d5 = 0.05000000074505806D;

    if (direction == 5) {
      tessellator.addVertexWithUV(
          (double) x + d5, (double) (y + 1) + d4, (double) (z + 1) + d4, minU, minV);
      tessellator.addVertexWithUV(
          (double) x + d5, (double) (y + 0) - d4, (double) (z + 1) + d4, minU, maxV);
      tessellator.addVertexWithUV(
          (double) x + d5, (double) (y + 0) - d4, (double) (z + 0) - d4, maxU, maxV);
      tessellator.addVertexWithUV(
          (double) x + d5, (double) (y + 1) + d4, (double) (z + 0) - d4, maxU, minV);
    }
    if (direction == 4) {
      tessellator.addVertexWithUV(
          (double) (x + 1) - d5, (double) (y + 0) - d4, (double) (z + 1) + d4, maxU, maxV);
      tessellator.addVertexWithUV(
          (double) (x + 1) - d5, (double) (y + 1) + d4, (double) (z + 1) + d4, maxU, minV);
      tessellator.addVertexWithUV(
          (double) (x + 1) - d5, (double) (y + 1) + d4, (double) (z + 0) - d4, minU, minV);
      tessellator.addVertexWithUV(
          (double) (x + 1) - d5, (double) (y + 0) - d4, (double) (z + 0) - d4, minU, maxV);
    }
    if (direction == 3) {
      tessellator.addVertexWithUV(
          (double) (x + 1) + d4, (double) (y + 0) - d4, (double) z + d5, maxU, maxV);
      tessellator.addVertexWithUV(
          (double) (x + 1) + d4, (double) (y + 1) + d4, (double) z + d5, maxU, minV);
      tessellator.addVertexWithUV(
          (double) (x + 0) - d4, (double) (y + 1) + d4, (double) z + d5, minU, minV);
      tessellator.addVertexWithUV(
          (double) (x + 0) - d4, (double) (y + 0) - d4, (double) z + d5, minU, maxV);
    }
    if (direction == 2) {
      tessellator.addVertexWithUV(
          (double) (x + 1) + d4, (double) (y + 1) + d4, (double) (z + 1) - d5, minU, minV);
      tessellator.addVertexWithUV(
          (double) (x + 1) + d4, (double) (y + 0) - d4, (double) (z + 1) - d5, minU, maxV);
      tessellator.addVertexWithUV(
          (double) (x + 0) - d4, (double) (y + 0) - d4, (double) (z + 1) - d5, maxU, maxV);
      tessellator.addVertexWithUV(
          (double) (x + 0) - d4, (double) (y + 1) + d4, (double) (z + 1) - d5, maxU, minV);
    }
    return true;
  }
Пример #5
0
  @Override
  public boolean renderWorldBlock(
      IBlockAccess world,
      int par2,
      int par3,
      int par4,
      Block par1Block,
      int modelId,
      RenderBlocks renderer) {
    if (modelId == model) {
      int l = renderer.blockAccess.getBlockMetadata(par2, par3, par4);
      int i1 = l & 7;
      boolean flag = (l & 8) > 0;
      Tessellator tessellator = Tessellator.instance;
      boolean flag1 = renderer.hasOverrideBlockTexture();

      if (!flag1) {
        renderer.setOverrideBlockTexture(renderer.getBlockIcon(Block.netherrack));
      }

      float f = 0.25F;
      float f1 = 0.1875F;
      float f2 = 0.1875F;

      if (i1 == 5) {
        renderer.setRenderBounds(
            (double) (0.5F - f1),
            0.0D,
            (double) (0.5F - f),
            (double) (0.5F + f1),
            (double) f2,
            (double) (0.5F + f));
      } else if (i1 == 6) {
        renderer.setRenderBounds(
            (double) (0.5F - f),
            0.0D,
            (double) (0.5F - f1),
            (double) (0.5F + f),
            (double) f2,
            (double) (0.5F + f1));
      } else if (i1 == 4) {
        renderer.setRenderBounds(
            (double) (0.5F - f1),
            (double) (0.5F - f),
            (double) (1.0F - f2),
            (double) (0.5F + f1),
            (double) (0.5F + f),
            1.0D);
      } else if (i1 == 3) {
        renderer.setRenderBounds(
            (double) (0.5F - f1),
            (double) (0.5F - f),
            0.0D,
            (double) (0.5F + f1),
            (double) (0.5F + f),
            (double) f2);
      } else if (i1 == 2) {
        renderer.setRenderBounds(
            (double) (1.0F - f2),
            (double) (0.5F - f),
            (double) (0.5F - f1),
            1.0D,
            (double) (0.5F + f),
            (double) (0.5F + f1));
      } else if (i1 == 1) {
        renderer.setRenderBounds(
            0.0D,
            (double) (0.5F - f),
            (double) (0.5F - f1),
            (double) f2,
            (double) (0.5F + f),
            (double) (0.5F + f1));
      } else if (i1 == 0) {
        renderer.setRenderBounds(
            (double) (0.5F - f),
            (double) (1.0F - f2),
            (double) (0.5F - f1),
            (double) (0.5F + f),
            1.0D,
            (double) (0.5F + f1));
      } else if (i1 == 7) {
        renderer.setRenderBounds(
            (double) (0.5F - f1),
            (double) (1.0F - f2),
            (double) (0.5F - f),
            (double) (0.5F + f1),
            1.0D,
            (double) (0.5F + f));
      }

      renderer.renderStandardBlock(par1Block, par2, par3, par4);

      if (!flag1) {
        renderer.clearOverrideBlockTexture();
      }

      tessellator.setBrightness(
          par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3, par4));
      float f3 = 1.0F;

      if (Block.lightValue[par1Block.blockID] > 0) {
        f3 = 1.0F;
      }

      tessellator.setColorOpaque_F(f3, f3, f3);
      Icon icon = renderer.getBlockIconFromSide(par1Block, 0);

      if (renderer.hasOverrideBlockTexture()) {
        icon = renderer.overrideBlockTexture;
      }

      double d0 = (double) icon.getMinU();
      double d1 = (double) icon.getMinV();
      double d2 = (double) icon.getMaxU();
      double d3 = (double) icon.getMaxV();
      Vec3[] avec3 = new Vec3[8];
      float f4 = 0.0625F;
      float f5 = 0.0625F;
      float f6 = 0.625F;
      avec3[0] =
          renderer
              .blockAccess
              .getWorldVec3Pool()
              .getVecFromPool((double) (-f4), 0.0D, (double) (-f5));
      avec3[1] =
          renderer.blockAccess.getWorldVec3Pool().getVecFromPool((double) f4, 0.0D, (double) (-f5));
      avec3[2] =
          renderer.blockAccess.getWorldVec3Pool().getVecFromPool((double) f4, 0.0D, (double) f5);
      avec3[3] =
          renderer.blockAccess.getWorldVec3Pool().getVecFromPool((double) (-f4), 0.0D, (double) f5);
      avec3[4] =
          renderer
              .blockAccess
              .getWorldVec3Pool()
              .getVecFromPool((double) (-f4), (double) f6, (double) (-f5));
      avec3[5] =
          renderer
              .blockAccess
              .getWorldVec3Pool()
              .getVecFromPool((double) f4, (double) f6, (double) (-f5));
      avec3[6] =
          renderer
              .blockAccess
              .getWorldVec3Pool()
              .getVecFromPool((double) f4, (double) f6, (double) f5);
      avec3[7] =
          renderer
              .blockAccess
              .getWorldVec3Pool()
              .getVecFromPool((double) (-f4), (double) f6, (double) f5);

      for (int j1 = 0; j1 < 8; ++j1) {
        if (flag) {
          avec3[j1].zCoord -= 0.0625D;
          avec3[j1].rotateAroundX(((float) Math.PI * 2F / 9F));
        } else {
          avec3[j1].zCoord += 0.0625D;
          avec3[j1].rotateAroundX(-((float) Math.PI * 2F / 9F));
        }

        if (i1 == 0 || i1 == 7) {
          avec3[j1].rotateAroundZ((float) Math.PI);
        }

        if (i1 == 6 || i1 == 0) {
          avec3[j1].rotateAroundY(((float) Math.PI / 2F));
        }

        if (i1 > 0 && i1 < 5) {
          avec3[j1].yCoord -= 0.375D;
          avec3[j1].rotateAroundX(((float) Math.PI / 2F));

          if (i1 == 4) {
            avec3[j1].rotateAroundY(0.0F);
          }

          if (i1 == 3) {
            avec3[j1].rotateAroundY((float) Math.PI);
          }

          if (i1 == 2) {
            avec3[j1].rotateAroundY(((float) Math.PI / 2F));
          }

          if (i1 == 1) {
            avec3[j1].rotateAroundY(-((float) Math.PI / 2F));
          }

          avec3[j1].xCoord += (double) par2 + 0.5D;
          avec3[j1].yCoord += (double) ((float) par3 + 0.5F);
          avec3[j1].zCoord += (double) par4 + 0.5D;
        } else if (i1 != 0 && i1 != 7) {
          avec3[j1].xCoord += (double) par2 + 0.5D;
          avec3[j1].yCoord += (double) ((float) par3 + 0.125F);
          avec3[j1].zCoord += (double) par4 + 0.5D;
        } else {
          avec3[j1].xCoord += (double) par2 + 0.5D;
          avec3[j1].yCoord += (double) ((float) par3 + 0.875F);
          avec3[j1].zCoord += (double) par4 + 0.5D;
        }
      }

      Vec3 vec3 = null;
      Vec3 vec31 = null;
      Vec3 vec32 = null;
      Vec3 vec33 = null;

      for (int k1 = 0; k1 < 6; ++k1) {
        if (k1 == 0) {
          d0 = (double) icon.getInterpolatedU(7.0D);
          d1 = (double) icon.getInterpolatedV(6.0D);
          d2 = (double) icon.getInterpolatedU(9.0D);
          d3 = (double) icon.getInterpolatedV(8.0D);
        } else if (k1 == 2) {
          d0 = (double) icon.getInterpolatedU(7.0D);
          d1 = (double) icon.getInterpolatedV(6.0D);
          d2 = (double) icon.getInterpolatedU(9.0D);
          d3 = (double) icon.getMaxV();
        }

        if (k1 == 0) {
          vec3 = avec3[0];
          vec31 = avec3[1];
          vec32 = avec3[2];
          vec33 = avec3[3];
        } else if (k1 == 1) {
          vec3 = avec3[7];
          vec31 = avec3[6];
          vec32 = avec3[5];
          vec33 = avec3[4];
        } else if (k1 == 2) {
          vec3 = avec3[1];
          vec31 = avec3[0];
          vec32 = avec3[4];
          vec33 = avec3[5];
        } else if (k1 == 3) {
          vec3 = avec3[2];
          vec31 = avec3[1];
          vec32 = avec3[5];
          vec33 = avec3[6];
        } else if (k1 == 4) {
          vec3 = avec3[3];
          vec31 = avec3[2];
          vec32 = avec3[6];
          vec33 = avec3[7];
        } else if (k1 == 5) {
          vec3 = avec3[0];
          vec31 = avec3[3];
          vec32 = avec3[7];
          vec33 = avec3[4];
        }

        tessellator.addVertexWithUV(vec3.xCoord, vec3.yCoord, vec3.zCoord, d0, d3);
        tessellator.addVertexWithUV(vec31.xCoord, vec31.yCoord, vec31.zCoord, d2, d3);
        tessellator.addVertexWithUV(vec32.xCoord, vec32.yCoord, vec32.zCoord, d2, d1);
        tessellator.addVertexWithUV(vec33.xCoord, vec33.yCoord, vec33.zCoord, d0, d1);
      }
    }
    return true;
  }