This clock is spinning 200x faster than normal, to illustrate the points at which the clock gives an extra spin.

The broken behavior is that the clock's angle isn't kept in-bounds at all times. At noontime, when the sky angle rolls from 0.99 to 0, the clock's angle is often at 1.99 rather than 0.99 (having rolled silently from 0.99 on through 1.01 and so on), and so swings wildly.

This was solved by running key values through the positiveModulo function.


Where ItemClock.java (MCP 9.31) lines 57-60 reads:
if (d0 < -0.5D)
{
    ++d0;
}
Replace with:
d0 = (double)MathHelper.positiveModulo( (float)d0 + 0.5F, 1.0F ) - 0.5D;

Where line 64 reads:
this.rotation += this.rota;
Add this line after it:
this.rotation = MathHelper.positiveModulo( (float)this.rotation, 1.0F );

Where line 47 reads:
return MathHelper.positiveModulo((float)d0, 1.0F);
Replace with:
return (float)d0;
Dimension:
Surface

115200
Broken Clock
SkyAngle:0.5595 ThisAngle:1.5486
Working Clock
SkyAngle:0.5595 ThisAngle:0.5487