triplea icon indicating copy to clipboard operation
triplea copied to clipboard

GamePlayer#getData:79 - java.lang.NullPointerException

Open tripleabuilderbot opened this issue 3 years ago • 4 comments

TripleA Version

2.6+14163

Java Version

11.0.9.1

Operating System

Windows 10

Stack Trace

Exception: java.lang.NullPointerException 
java.lang.Exception
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:889)
	at games.strategy.engine.data.GamePlayer.getData(GamePlayer.java:79)
	at games.strategy.engine.data.GamePlayer.getTechAttachment(GamePlayer.java:241)
	at games.strategy.triplea.delegate.TechTracker.getCurrentTechAdvances(TechTracker.java:224)
	at games.strategy.triplea.delegate.TechTracker.getCurrentTechAdvances(TechTracker.java:215)
	at games.strategy.triplea.delegate.TechTracker.getSumOfBonuses(TechTracker.java:173)
	at games.strategy.triplea.delegate.TechTracker.lambda$getMovementBonus$2(TechTracker.java:59)
	at games.strategy.triplea.delegate.TechTracker.lambda$getCached$17(TechTracker.java:160)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
	at games.strategy.triplea.delegate.TechTracker.getCached(TechTracker.java:160)
	at games.strategy.triplea.delegate.TechTracker.getMovementBonus(TechTracker.java:60)
	at games.strategy.triplea.attachments.UnitAttachment.getMovement(UnitAttachment.java:1496)
	at games.strategy.engine.data.Unit.getMaxMovementAllowed(Unit.java:497)
	at games.strategy.engine.data.changefactory.ChangeFactory.markNoMovementChange(ChangeFactory.java:225)
	at games.strategy.triplea.attachments.TriggerAttachment.placeUnits(TriggerAttachment.java:1367)
	at games.strategy.triplea.attachments.TriggerAttachment.triggerUnitPlacement(TriggerAttachment.java:2270)
	at games.strategy.triplea.attachments.TriggerAttachment.fireTriggers(TriggerAttachment.java:308)
	at games.strategy.triplea.attachments.TriggerAttachment.collectAndFireTriggers(TriggerAttachment.java:220)
	at games.strategy.triplea.delegate.BaseTripleADelegate.triggerWhenTriggerAttachments(BaseTripleADelegate.java:81)
	at games.strategy.triplea.delegate.BaseTripleADelegate.start(BaseTripleADelegate.java:32)
	at games.strategy.engine.framework.ServerGame.startStep(ServerGame.java:575)
	at games.strategy.engine.framework.ServerGame.runStep(ServerGame.java:443)
	at games.strategy.engine.framework.ServerGame.runNextStep(ServerGame.java:345)
	at games.strategy.engine.framework.ServerGame.startGame(ServerGame.java:312)
	at games.strategy.engine.framework.startup.launcher.LocalLauncher.launchInternal(LocalLauncher.java:92)
	at games.strategy.engine.framework.startup.launcher.LocalLauncher.lambda$launch$0(LocalLauncher.java:60)
	at java.base/java.lang.Thread.run(Thread.java:834)


tripleabuilderbot avatar Nov 08 '22 19:11 tripleabuilderbot

This is with this prerelease from Sep 29, 2022: https://github.com/triplea-game/triplea/releases/tag/2.6+14163

Notably, it's after the fix https://github.com/triplea-game/triplea/pull/10566.

asvitkine avatar Jul 04 '23 01:07 asvitkine

I think the GamePlayer here comes from the players field on TriggerAttachment. We need to fix these up for nulls too.

asvitkine avatar Jul 16 '23 15:07 asvitkine

Searching for GamePlayer in *Attachment,java does find other places we store players on attachments. So theoretically, all of these needs to be cleaned up.

asvitkine avatar Jul 16 '23 15:07 asvitkine

@asvitkine I am not clear about how a GamePlayer can return null for method getData`. The only thing I found is

@RemoveOnNextMajorRelease @Deprecated
  private static final GamePlayer NULL_GAME_PLAYER =
      // Kept for save game compatibility, or we'll get a class not found error loading neutrals.
      new GamePlayer(Constants.PLAYER_NAME_NEUTRAL, true, false, null, false, null) {
        private static final long serialVersionUID = -6596127754502509049L;

        @Override
        public boolean isNull() {
          return true;
        }
      };

As I cannot reproduce the issue to analyze this further, I would ask you to either take it up or provide me with some more information.

frigoref avatar May 24 '25 11:05 frigoref