CLEVELAND -- Donyell Marshall's outside shot started falling before the game and never stopped.
Marshall scored a season-high 29 points -- 21 on 3-pointers -- and LeBron James scored 32 in his final game as a 21-year-old, leading the Cleveland Cavaliers to a 109-99 win over Milwaukee and snapping the Bucks' six-game winning streak Friday night.
Larry Hughes emerged from a shooting slump with 26 points for the Cavaliers, who blew most of a 21-point lead in the second half before hanging on to win their seventh in a row at home against Milwaukee.
Marshall, who had scored just 13 points combined in his previous five games, felt during warmups that he might have a breakout performance.
"I went out before the game and shot the ball well," the 12-year veteran said. "Myself and David Wesley always play a shooting game, and he's been killing me. I got him today. I think that carried over into the game."
Marshall dropped three 3-pointers in the final 8:11 as Cleveland improved to 13-3 at home.
"That's what happens when a guy like Donyell gets it going," said James, who eclipsed 30 points for the 100th time in his career on the eve of his 22nd birthday.
Michael Redd led Milwaukee with 24 points, Mo Williams had 21 and Ruben Patterson added 17 and 10 rebounds for the Bucks, who made it 93-89 on Williams' free throw with 4:15 left.
But Marshall, who set the NBA record with 12 3-pointers for Toronto in 2005, drilled a 3-pointer, James scored inside and Hughes hit a layup to make it 100-91 with 3:02 remaining. After a basket by Redd, Marshall made another 3 and James scored on a drive before draining Cleveland's 11th 3-pointer to give the Cavaliers a 109-97 lead with 1:01 left.
Bucks coach Terry Stotts warned his team about Marshall's ability to hit from deep.
"I have a lot of respect for Donyell's versatility as a 3-point shooter," he said. "We probably didn't get to him as quickly as we should have."
Marshall scored 13 points in the second quarter and matched his season high by halftime, helping the Cavaliers take a 60-40 lead at the break.
Trailing 71-50 and without big man Brian Skinner -- who got tossed in the third for a hard foul on James -- the Bucks outscored the Cavs 13-2 in the final 3:58 of the period to make it 79-71 entering the fourth.
The Cavaliers, too, were in foul trouble, as Zydrunas Ilgauskas and Drew Gooden picked up their fifth personals in the first minute of the final period. With Anderson Varejao sidelined with a strained neck, Cavs coach Mike Brown was forced to play Dwayne Jones for the first time this season.
Williams' 3-pointer got Milwaukee to 89-86 with 6:14 left, but the trio of James, Marshall and Hughes made sure Cleveland held on as the Cavs enter a stretch in which they'll play 10 of their next 12 on the road.
"Give Cleveland credit," Redd said. "Marshall made some big threes. We really couldn't solve that, and LeBron hit some big threes."
Marshall came in averaging 7.3 points, and he had reached double digits six times before making all seven field-goal attempts, including four 3-pointers, in the first 24 minutes.
His third 3-pointer of the second quarter was long, but after hitting the back of the rim, it bounced high in the air and twice on the cylinder before dropping through.
"That's when I felt it was going to be a good night," he said.
Skinner was ejected early in the third quarter for wrapping his arms high around James, who was sent tumbling into the basket stanchion.
"The initial foul wasn't bad, but then he threw me down," James said. "It didn't hurt. I'm a football player."
Stotts didn't think Skinner's foul was excessive.
"From my angle, it looked like he tried to hold him up," he said. "They (officials) said he came through and threw him down. I thought it was a hard foul, a flagrant foul, but not a flagrant two."
Hughes entered in a horrible shooting funk, making just 25 of 77 shots in his previous five games. But he went 3-for-4 in the first quarter, and the Cavaliers shot 60 percent from the field while opening a 34-19 lead.