Barnes previously played for Paulton Rovers, Plymouth Argyle, Oxford United, Salisbury City, Eastbourne Borough, Torquay United and Brighton & Hove Albion. He has been capped by Austria at international level, making one appearance for their under-20 team.
Barnes began his career as a prolific goalscorer with local club Paulton Rovers of the Southern League. He had an extended trial with Championship club Plymouth Argyle in March 2007, and sufficiently impressed to be awarded with an eighteen-month contract by the club, having scored several goals for the reserve team. He made his Plymouth debut in the first round of the League Cup in August 2007 against Wycombe Wanderers, coming on as a substitute for first-team regular Sylvan Ebanks-Blake.
He subsequently found first-team opportunities hard to come by, and was sent on loan to Conference side Oxford United in November 2007 to gain some experience. Barnes featured five times for Oxford United, including two FA Cup ties against Southend United, before returning to Plymouth. He was sent out on loan again in March 2008 to another Conference club, this time to Salisbury City. He featured in five league matches for the club but did not find the back of the net.
Barnes was loaned out for a third time in November 2008 to Eastbourne Borough, with teammate Daniel Smith. He impressed enough for his loan to be extended by a month, before he was recalled by Plymouth Argyle in January 2009, ahead of the club's match against Bristol City. He made his league debut for the Pilgrims against Wolves at Molineux, scoring his first goal for the club against Coventry City. His performances at the back-end of the 2008–09 season were rewarded when he signed a two-year contract extension in May 2009.
He joined League Two club Torquay United on loan until the end of the season in February 2010, but returned a month later having made six appearances.
Barnes subsequently joined League One club Brighton & Hove Albion on loan until the end of the season. He scored on his debut against Tranmere Rovers two days later, having been introduced as a substitute ten minutes earlier.
On 8 July 2010, Barnes signed a two-year contract with Brighton & Hove Albion after transferring for an undisclosed fee from Plymouth Argyle. On 12 April 2011, he scored the decisive goal in a 4–3 win at home against Dagenham & Redbridge, which confirmed their promotion to the Championship. Barnes finished the season as Brighton's second-top goalscorer behind Glenn Murray, with 20 goals in 49 appearances.
In the 2011–12 season Barnes remained a first-choice striker for Brighton's return to the Championship. He finished the season as Brighton's leading goalscorer with 14 goals in all competitions, 11 in the league.
On 9 March 2013, Barnes received a red card in stoppage time against Bolton Wanderers for attempting to trip up the referee. He was subsequently handed a seven-match suspension by the Football Association. Fans and manager Gus Poyet were critical of Barnes for this action as it left the club with only one senior striker available to play, as Craig Mackail-Smith and Will Hoskins were already injured for the rest of the season. On his return from the ban on 20 April, Barnes scored two goals in a 6–1 win over Blackpool, and was named man of the match.
On 10 January 2014, Barnes joined Burnley for an undisclosed fee on a three-and-a-half-year deal. On 8 November, he scored the only goal at Turf Moor to defeat Hull City and gain Burnley's first win of the Premier League season. He scored a second goal on 13 December, the sole goal in a home victory over Southampton to take Burnley out of the relegation zone.
In Burnley's 1–1 draw at league leaders Chelsea on 21 February 2015, Barnes' play of the ball saw Nemanja Matić fling himself in between Barnes and the ball and connect with the studs of his boots going into the Chelsea midfielder's shin. This was described by Alan Shearer as follows: "It's dangerous, it's naughty. ... he could have easily broken his leg there." Matić reacted by pushing Barnes who fell over. As a result of the incident, Matić received a red card, Barnes escaped any punishment.
On 24 May 2015, as relegated Burnley finished the season with a win over Aston Villa, Barnes was taken off with knee cruciate ligament injuries, which would rule him out for the majority of the following campaign.
Despite being born in Bath to English parents, Barnes qualifies to represent Austria courtesy of his paternal grandmother, who was from Klagenfurt. He was spotted by Austrian officials while on a pre-season tour with Plymouth Argyle in July 2008, and as a result he was called up to their Under-20 team to face Switzerland on 19 August 2008, the match was part of a four nation friendly tournament featuring Austria, Germany, Italy, and Switzerland. Barnes made his debut as a substitute in the 73rd minute replacing FC Wacker Innsbruck's Julius Perstaller in front of 250 spectators. In March 2017, whilst playing in the Premier League for Burnley, he expressed his desire to represent the national senior side.
Barnes is from Dunkerton, Somerset, near Bath.As of match played 10 September 2017