private boolean renderWorldBlock(
      IBlockAccess world,
      int x,
      int y,
      int z,
      BlockThinLogFence block,
      int modelId,
      RenderBlocks renderer) {
    float margin = block.getMargin();

    renderer.setRenderBounds(margin, 0, margin, 1 - margin, 1, 1 - margin);
    renderer.renderStandardBlock(block, x, y, z);

    IIcon sideIcon = block.getSideIcon();

    boolean connectedZNeg = block.canConnectFenceTo(world, x, y, z - 1);
    boolean connectedZPos = block.canConnectFenceTo(world, x, y, z + 1);
    boolean connectedXNeg = block.canConnectFenceTo(world, x - 1, y, z);
    boolean connectedXPos = block.canConnectFenceTo(world, x + 1, y, z);

    if (connectedXNeg || connectedXPos) {
      if (connectedXNeg && connectedXPos) renderer.setRenderBounds(0, 0, .5, 1, 1, .5);
      else if (connectedXNeg) renderer.setRenderBounds(0, 0, .5, .5, 1, .5);
      else if (connectedXPos) renderer.setRenderBounds(.5, 0, .5, 1, 1, .5);

      renderer.flipTexture = true;
      renderer.renderFaceZNeg(block, x, y, z, sideIcon);
      renderer.flipTexture = false;
      renderer.renderFaceZPos(block, x, y, z, sideIcon);
    }

    if (connectedZNeg || connectedZPos) {
      if (connectedZNeg && connectedZPos) renderer.setRenderBounds(.5, 0, 0, .5, 1, 1);
      else if (connectedZNeg) renderer.setRenderBounds(.5, 0, 0, .5, 1, .5f);
      else if (connectedZPos) renderer.setRenderBounds(.5, 0, .5f, .5, 1, 1);

      renderer.flipTexture = true;
      renderer.renderFaceXPos(block, x, y, z, sideIcon);
      renderer.flipTexture = false;
      renderer.renderFaceXNeg(block, x, y, z, sideIcon);
    }

    return true;
  }