Skip to content

Commit 010e26c

Browse files
committed
fix nullptr for self & enemy on loading a replay
1 parent 96c0098 commit 010e26c

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

src/main/java/bwapi/Game.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ public class Game {
7373
private int randomSeed;
7474
private int revision;
7575
private boolean debug;
76-
private Player self;
77-
private Player enemy;
7876
private Player neutral;
7977
private boolean replay;
8078
private boolean multiplayer;
@@ -181,8 +179,6 @@ void init() {
181179

182180
revision = gameData.getRevision();
183181
debug = gameData.isDebug();
184-
self = players[gameData.getSelf()];
185-
enemy = players[gameData.getEnemy()];
186182
neutral = players[gameData.getNeutral()];
187183
replay = gameData.isReplay();
188184
multiplayer = gameData.isMultiplayer();
@@ -255,15 +251,20 @@ void init() {
255251
mapPixelWidth = mapWidth * TilePosition.SIZE_IN_PIXELS;
256252
mapPixelHeight = mapHeight * TilePosition.SIZE_IN_PIXELS;
257253

254+
if (isReplay()) {
255+
enemies = Collections.emptyList();
256+
allies = Collections.emptyList();
257+
observers = Collections.emptyList();
258+
}
259+
else {
260+
enemies = playerSet.stream().filter(p -> !p.equals(self()) && self().isEnemy(p))
261+
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
262+
allies = playerSet.stream().filter(p -> !p.equals(self()) && self().isAlly(p))
263+
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
258264

259-
enemies = playerSet.stream().filter(p -> !p.equals(self) && self.isEnemy(p))
260-
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
261-
allies = playerSet.stream().filter(p -> !p.equals(self) && self.isAlly(p))
262-
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
263-
264-
observers = playerSet.stream().filter(p -> !p.equals(self) && p.isObserver())
265-
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
266-
265+
observers = playerSet.stream().filter(p -> !p.equals(self()) && p.isObserver())
266+
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
267+
}
267268
setLatCom(true);
268269
}
269270

@@ -1678,7 +1679,10 @@ public List<Unit> getSelectedUnits() {
16781679
* @return Player object representing the current player. null if the current game is a replay.
16791680
*/
16801681
public Player self() {
1681-
return self;
1682+
if (isReplay()) {
1683+
return null;
1684+
}
1685+
return players[gameData.getSelf()];
16821686
}
16831687

16841688
/**
@@ -1691,7 +1695,10 @@ public Player self() {
16911695
* @see #enemies
16921696
*/
16931697
public Player enemy() {
1694-
return enemy;
1698+
if (isReplay()) {
1699+
return null;
1700+
}
1701+
return players[gameData.getEnemy()];
16951702
}
16961703

16971704
/**

0 commit comments

Comments
 (0)