GamePlayer#getData:79 - java.lang.NullPointerException
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)
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.
I think the GamePlayer here comes from the players field on TriggerAttachment.
We need to fix these up for nulls too.
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 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.