In a medium heavy bottomed saucepan, whisk together the sugar, cornstarch, cocoa powder, and salt. Pour in the milk and cream, whisk together.
Set saucepan over medium-low heat. Whisk frequently as the mixture warms. After 3 minutes, turn heat up to medium. Continue whisking for 3-4 minutes until the mixture thickens.
Let the mixture come to a gentle boil for 2 minutes, then remove from the heat and continue whisking. Add the chopped chocolate, butter, and vanilla.
Immediately add the chopped chocolate, butter, and vanilla extract. Whisk until smooth.
Pour the pudding into a medium size bowl. Let the mixture cool at room temperature for 20 minutes, whisking every 5 minutes or so. (You can speed up this process by putting this over and ice bath)
Place a piece of plastic wrap directly on top of the pudding to prevent a skin from forming. Place in the refrigerator to cool for 4-5 hours before serving. Top with homemade whipped cream and sprinkles or chocolate shavings, if desired.