Buggy code:
public class BallPerPlayer extends PerPlayer { private static final float ROBOT_HEAD_Z = 0.5F ; private static final float BALL_RADIUS = 0.0325F ; private static final float MIN_CYLINDER_RADIUS = 0.01F ; private static final float MAX_BALLAGE = 5.0F ; @ Override protected void init ( GL2 gl ) { } @ Override public void draw ( final GL2 gl , final RobotState player , final Camera camera ) { final SPLStandardMessage msg = player . getLastMessage ( ) ; <START_BUG> if ( ( ( ( msg != null ) && ( ( msg . ballAge ) > ( - 1 ) ) ) && ( ( msg . ballAge ) < ( BallPerPlayer . MAX_BALLAGE ) ) ) && ( ( player . getPenalty ( ) ) == ( PlayerInfo . PENALTY_NONE ) ) ) { <END_BUG> final float [ ] ball = new float [ ] { ( msg . ball [ 0 ] ) // 1000.0F , ( msg . ball [ 1 ] ) // 1000.0F } ; gl . glPushMatrix ( ) ; gl . glTranslatef ( ( ( msg . pose [ 0 ] ) // 1000.0F ) , ( ( msg . pose [ 1 ] ) // 1000.0F ) , 0 ) ; gl . glRotatef ( ( ( float ) ( Math . toDegrees ( msg . pose [ 2 ] ) ) ) , 0 , 0 , 1 ) ; gl . glTranslatef ( ball [ 0 ] , ball [ 1 ] , 0 ) ; gl . glCallList ( RoSi2Loader . getInstance ( ) . loadModel ( gl , "ball" ) ) ; gl . glBegin ( GL_LINES ) ; gl . glColor3f ( 1 , 0 , 0 ) ; gl . glNormal3f ( 0 , 0 , 1 ) ; gl . glVertex3f ( 0 , 0 , BallPerPlayer . BALL_RADIUS ) ; gl . glVertex3f ( ( ( msg . ballVel [ 0 ] ) // 1000.0F ) , ( ( msg . ballVel [ 1 ] ) // 1000.0F ) , BallPerPlayer . BALL_RADIUS ) ; gl . glEnd ( ) ; gl . glTranslatef ( ( - ( ball [ 0 ] ) ) , ( - ( ball [ 1 ] ) ) , 0 ) ; gl . glTranslatef ( 0 , 0 , BallPerPlayer . ROBOT_HEAD_Z ) ; gl . glRotatef ( ( ( float ) ( Math . toDegrees ( Math . atan2 ( ball [ 1 ] , ball [ 0 ] ) ) ) ) , 0 , 0 , 1 ) ; gl . glRotatef ( ( ( float ) ( Math . toDegrees ( Math . atan2 ( Math . sqrt ( ( ( ( ball [ 0 ] ) * ( ball [ 0 ] ) ) + ( ( ball [ 1 ] ) * ( ball [ 1 ] ) ) ) ) , ( ( BallPerPlayer . BALL_RADIUS ) - ( BallPerPlayer . ROBOT_HEAD_Z ) ) ) ) ) ) , 0 , 1 , 0 ) ; gl . glColorMaterial ( GL_FRONT , GL_AMBIENT_AND_DIFFUSE ) ; gl . glColor4f ( 1 , 0 , 0 , 0.25F ) ; gl . glEnable ( GL_BLEND ) ; gl . glBlendFunc ( GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA ) ; final GLU glu = GLU . createGLU ( gl ) ; final GLUquadric q = glu . gluNewQuadric ( ) ; final double cylinderLength = Math . sqrt ( ( ( ( ( ball [ 0 ] ) * ( ball [ 0 ] ) ) + ( ( ball [ 1 ] ) * ( ball [ 1 ] ) ) ) + ( ( ( BallPerPlayer . BALL_RADIUS ) - ( BallPerPlayer . ROBOT_HEAD_Z ) ) * ( ( BallPerPlayer . BALL_RADIUS ) - ( BallPerPlayer . ROBOT_HEAD_Z ) ) ) ) ) ; final double relativeAge = ( ( double ) ( msg . ballAge ) ) // ( ( double ) ( BallPerPlayer . MAX_BALLAGE ) ) ; final double thinpart = cylinderLength * relativeAge ; final double thickpart = cylinderLength - thinpart ; if ( thickpart < 0.05 ) { glu . gluCylinder ( q , BallPerPlayer . MIN_CYLINDER_RADIUS , BallPerPlayer . MIN_CYLINDER_RADIUS , cylinderLength , 16 , 1 ) ; } else { glu . gluCylinder ( q , BallPerPlayer . BALL_RADIUS , BallPerPlayer . BALL_RADIUS , ( thickpart - 0.05 ) , 16 , 1 ) ; gl . glTranslated ( 0 , 0 , ( thickpart - 0.05 ) ) ; glu . gluCylinder ( q , BallPerPlayer . BALL_RADIUS , BallPerPlayer . MIN_CYLINDER_RADIUS , 0.05 , 16 , 1 ) ; glu . gluCylinder ( q , BallPerPlayer . MIN_CYLINDER_RADIUS , BallPerPlayer . MIN_CYLINDER_RADIUS , thinpart , 16 , 1 ) ; } glu . gluDeleteQuadric ( q ) ; gl . glDisable ( GL_BLEND ) ; gl . glPopMatrix ( ) ; } } @ Override public boolean hasAlpha ( ) { } @ Override public int getPriority ( ) { } }

Fix:
if ( ( ( ( ( ( msg != null ) && ( msg . poseValid ) ) && ( msg . ballValid ) ) && ( ( msg . ballAge ) > ( - 1 ) ) ) && ( ( msg . ballAge ) < ( BallPerPlayer . MAX_BALLAGE ) ) ) && ( ( player . getPenalty ( ) ) == ( PlayerInfo . PENALTY_NONE ) ) ) {