Buggy code:
protected Date endTime ; protected UUID startingPlayerId ; protected UUID winnerId ; protected RangeOfInfluence range ; protected int freeMulligans ; protected Map < UUID , Integer > usedFreeMulligans = new LinkedHashMap < > ( ) ; protected MultiplayerAttackOption attackOption ; protected GameOptions gameOptions ; protected String startMessage ; public static volatile int copyCount = 0 ; public static volatile long copyTime = 0 ; private Player scorePlayer ; private Player losingPlayer ; private boolean stateCheckRequired = false ; private boolean scopeRelevant = false ; private boolean saveGame = false ; private int priorityTime ; private final int startLife ; protected PlayerList playerList ; protected Map < UUID , Counters > enterWithCounters = new HashMap < > ( ) ; public GameImpl ( MultiplayerAttackOption attackOption , RangeOfInfluence range , int freeMulligans , int startLife ) { } public GameImpl ( final GameImpl game ) { } @ Override public boolean isSimulation ( ) { } @ Override public void setSimulation ( boolean simulation ) { } @ Override public UUID getId ( ) { } @ Override public Object getCustomData ( ) { } @ Override public void setCustomData ( Object data ) { } @ Override public GameOptions getOptions ( ) { } @ Override public void loadCards ( Set < Card > cards , UUID ownerId ) { } @ Override public Collection < Card > getCards ( ) { } @ Override public void addPlayer ( Player player , Deck deck ) throws GameException { } @ Override public RangeOfInfluence getRangeOfInfluence ( ) { } @ Override public MultiplayerAttackOption getAttackOption ( ) { } @ Override public Player getPlayer ( UUID playerId ) { } @ Override public MageObject getObject ( UUID objectId ) { } @ Override public MageObject getBaseObject ( UUID objectId ) { } @ Override public MageObject getEmblem ( UUID objectId ) { } @ Override public UUID getOwnerId ( UUID objectId ) { } @ Override public UUID getOwnerId ( MageObject object ) { } @ Override public UUID getControllerId ( UUID objectId ) { } @ Override public Permanent getPermanent ( UUID permanentId ) { } @ Override public Permanent getPermanentOrLKIBattlefield ( UUID permanentId ) { } @ Override public Permanent getPermanentEntering ( UUID permanentId ) { } @ Override public Map < UUID , Permanent > getPermanentsEntering ( ) { } @ Override public Card getCard ( UUID cardId ) { } @ Override public Ability getAbility ( UUID abilityId , UUID sourceId ) { } @ Override public void setZone ( UUID objectId , Zone zone ) { } @ Override public GameStates getGameStates ( ) { } @ Override public void loadGameStates ( GameStates states ) { } @ Override public void saveState ( boolean bookmark ) { } @ Override public synchronized boolean gameOver ( UUID playerId ) { } private boolean checkIfGameIsOver ( ) { } @ Override public boolean hasEnded ( ) { } @ Override public boolean isADraw ( ) { } @ Override public String getWinner ( ) { } @ Override public GameState getState ( ) { } @ Override public int bookmarkState ( ) { } @ Override public void restoreState ( int bookmark , String context ) { } @ Override public void removeBookmark ( int bookmark ) { } private void clearAllBookmarks ( ) { } @ Override public int getSavedStateSize ( ) { } @ Override public void cleanUp ( ) { } @ Override public void start ( UUID choosingPlayerId ) { } @ Override public void resume ( ) { playerList = state . getPlayerList ( state . getActivePlayerId ( ) ) ; Player player = getPlayer ( playerList . get ( ) ) ; boolean wasPaused = state . isPaused ( ) ; state . resume ( ) ; if ( ! ( gameOver ( null ) ) ) { <START_BUG> fireInformEvent ( new StringBuilder ( "Turn<seq2seq4repair_space>" ) . append ( state . getTurnNum ( ) ) . toString ( ) ) ; <END_BUG> if ( checkStopOnTurnOption ( ) ) { return ; } state . getTurn ( ) . resumePlay ( this , wasPaused ) ; if ( ( ! ( isPaused ( ) ) ) && ( ! ( gameOver ( null ) ) ) ) { endOfTurn ( ) ; player = playerList . getNext ( this ) ; state . setTurnNum ( ( ( state . getTurnNum ( ) ) + 1 ) ) ; } } play ( player . getId ( ) ) ; } protected void play ( UUID nextPlayerId ) { } private void playExtraTurns ( ) { } private TurnMod getNextExtraTurn ( ) { } private boolean playTurn ( Player player ) { } private boolean checkStopOnTurnOption ( ) { } protected void init ( UUID choosingPlayerId ) { } protected UUID findWinnersAndLosers ( ) { } protected void endOfTurn ( ) { } protected UUID pickChoosingPlayer ( ) { } @ Override public void pause ( ) { } @ Override public boolean isPaused ( ) { } @ Override public void end ( ) { } @ Override public void addTableEventListener ( Listener < TableEvent > listener ) { } @ Override public int mulliganDownTo ( UUID playerId ) { } @ Override public void endMulligan ( UUID playerId ) { } @ Override public void mulligan ( UUID playerId ) { } @ Override public synchronized void timerTimeout ( UUID playerId ) { } @ Override public synchronized void idleTimeout ( UUID playerId ) { } @ Override public synchronized void concede ( UUID playerId ) { } @ Override public synchronized void undo ( UUID playerId ) { } @ Override public void sendPlayerAction ( PlayerAction playerAction , UUID playerId , Object data ) { } @ Override public synchronized void setManaPaymentMode ( UUID playerId , boolean autoPayment ) { } @ Override public synchronized void setManaPaymentModeRestricted ( UUID playerId , boolean autoPaymentRestricted ) { }

Fix:
fireInformEvent ( ( "Turn<seq2seq4repair_space>" + ( state . getTurnNum ( ) ) ) ) ;