Buggy code:
@ SuppressWarnings ( "deprecation" ) public class MainApplication extends SimpleApplication implements ActionListener { public static final float HALFCHARHEIGHT = 3 ; public HashMap < String , DemoRoute > routes = new HashMap < > ( ) ; private Node playerNode ; private BulletAppState bulletAppState ; private RigidBodyControl landscape ; private CharacterControl playerControl ; private GhostControl billMurray ; private Vector3f camDir = new Vector3f ( ) ; private Vector3f camLeft = new Vector3f ( ) ; private Vector3f walkDirection = new Vector3f ( ) ; private Spatial draggedObject ; private boolean keyLeft = false ; private boolean keyRight = false ; private boolean keyUp = false ; private boolean keyDown = false ; private boolean isPaused = false ; NiftyJmeDisplay pauseDisplay ; private ArrayDeque < LocationEvent > locEventBus = new ArrayDeque < > ( ) ; private HashMap < String , ArrayDeque < DemoTask > > taskEventBus = new HashMap < > ( ) ; private Spatial currentWorld ; private DemoRoute currentRoute ; public Nifty nifty ; private MainMenuScreen mainMenuScreen ; private CharacterSelectScreen characterSelectScreen ; private PauseMenuScreen pauseMenuScreen ; private GameScreen gameScreen ; private NarrativeInstance narrativeInstance ; public static void main ( String [ ] args ) { } public MainApplication ( ) { } public NarrativeInstance getNarrativeInstance ( ) { } @ Override public void simpleInitApp ( ) { } public void loadRoute ( DemoRoute route ) { } private void setupKeys ( ) { } @ Override public void simpleUpdate ( float tpf ) { } @ Override public void onAction ( String keyName , boolean isPressed , float tpf ) { switch ( keyName ) { case "Left" : keyLeft = isPressed ; break ; case "Right" : keyRight = isPressed ; break ; case "Up" : keyUp = isPressed ; break ; case "Down" : keyDown = isPressed ; break ; case "Interact" : if ( isPressed ) { <START_BUG> if ( gameScreen . isTextShowing ( ) ) { <END_BUG> gameScreen . progressThroughText ( ) ; } else if ( ( draggedObject ) != null ) { Vector3f location = draggedObject . getWorldTranslation ( ) ; bulletAppState . getPhysicsSpace ( ) . add ( draggedObject ) ; draggedObject . removeFromParent ( ) ; rootNode . attachChild ( draggedObject ) ; draggedObject . setLocalTranslation ( location ) ; ( ( RigidBodyControl ) ( draggedObject . getControl ( 0 ) ) ) . setPhysicsLocation ( location ) ; draggedObject = null ; } else { Ray ray = new Ray ( cam . getLocation ( ) , cam . getDirection ( ) ) ; CollisionResults results = new CollisionResults ( ) ; rootNode . collideWith ( ray , results ) ; CollisionResult closest = results . getClosestCollision ( ) ; if ( closest != null ) { System . out . println ( ( ( closest . getGeometry ( ) . getName ( ) ) + "<seq2seq4repair_space>found!" ) ) ; if ( ! ( currentRoute . interactWith ( this , closest . getGeometry ( ) ) ) ) { System . out . println ( ( ( closest . getGeometry ( ) . getName ( ) ) + "<seq2seq4repair_space>is<seq2seq4repair_space>not<seq2seq4repair_space>responding..." ) ) ; } } } } break ; case "Jump" : if ( isPressed ) { playerControl . jump ( ) ; } break ; case "Pause" : if ( isPressed ) { if ( ! ( isPaused ) ) { nifty . gotoScreen ( "pauseMenu" ) ; } else { nifty . gotoScreen ( "game" ) ; } } break ; } } public void setIsPaused ( boolean isPaused ) { } public void drag ( Spatial spatial ) { } public void addTask ( String taskQueueId , ArrayDeque < DemoTask > task ) { } public CharacterControl getPlayerControl ( ) { } public MainMenuScreen getMainMenuScreen ( ) { } public PauseMenuScreen getPauseMenuScreen ( ) { } public CharacterSelectScreen getCharacterSelectScreen ( ) { } public GameScreen getGameScreen ( ) { } @ Override public AppStateManager getStateManager ( ) { } }

Fix:
if ( ( gameScreen . isTextShowing ( ) ) && ( gameScreen . isEnabled ( ) ) ) {