diff --git a/src/main/java/org/mobarena/stats/session/Session.java b/src/main/java/org/mobarena/stats/session/Session.java index 2fc0b2b..b4eb2a2 100644 --- a/src/main/java/org/mobarena/stats/session/Session.java +++ b/src/main/java/org/mobarena/stats/session/Session.java @@ -47,6 +47,11 @@ public class Session { public void playerLeave(Arena arena, Player player) { UUID playerId = player.getUniqueId(); + if (sessionStats.startTime == null) { + playerStats.remove(playerId); + return; + } + PlayerSessionStats stats = playerStats.get(playerId); if (stats == null) { return; @@ -63,6 +68,11 @@ public class Session { public void playerDeath(Arena arena, Player player) { UUID playerId = player.getUniqueId(); + if (sessionStats.startTime == null) { + playerStats.remove(playerId); + return; + } + PlayerSessionStats stats = playerStats.get(playerId); if (stats == null) { return; diff --git a/src/test/java/org/mobarena/stats/session/SessionTest.java b/src/test/java/org/mobarena/stats/session/SessionTest.java index d82c063..8615111 100644 --- a/src/test/java/org/mobarena/stats/session/SessionTest.java +++ b/src/test/java/org/mobarena/stats/session/SessionTest.java @@ -95,6 +95,19 @@ class SessionTest { assertThat(actual.className, equalTo(className)); } + @Test + void removeFromSessionOnLeaveBeforeStart() { + UUID playerId = UUID.fromString("cafebabe-ea75-dead-beef-deadcafebabe"); + Player player = Mocks.player(playerId, "garbagemule"); + Arena arena = mock(Arena.class); + subject.playerJoin(player); + + subject.playerLeave(arena, player); + + PlayerSessionStats actual = subject.getPlayerStats(playerId); + assertThat(actual, nullValue()); + } + @Test void setLeaveTimeOnLeave() { UUID playerId = UUID.fromString("cafebabe-ea75-dead-beef-deadcafebabe"); @@ -103,6 +116,7 @@ class SessionTest { ArenaPlayer ap = mock(ArenaPlayer.class); when(arena.getArenaPlayer(player)).thenReturn(ap); subject.playerJoin(player); + subject.start(); subject.playerLeave(arena, player); @@ -118,6 +132,7 @@ class SessionTest { ArenaPlayer ap = mock(ArenaPlayer.class); when(arena.getArenaPlayer(player)).thenReturn(ap); subject.playerJoin(player); + subject.start(); subject.playerLeave(arena, player); @@ -133,6 +148,7 @@ class SessionTest { ArenaPlayer ap = mock(ArenaPlayer.class); when(arena.getArenaPlayer(player)).thenReturn(ap); subject.playerJoin(player); + subject.start(); subject.getPlayerStats(playerId).conclusion = PlayerConclusion.VICTORY; subject.playerLeave(arena, player); @@ -141,6 +157,19 @@ class SessionTest { assertThat(actual.conclusion, not(equalTo(PlayerConclusion.RETREAT))); } + @Test + void removeFromSessionOnDeathBeforeStart() { + UUID playerId = UUID.fromString("cafebabe-ea75-dead-beef-deadcafebabe"); + Player player = Mocks.player(playerId, "garbagemule"); + Arena arena = mock(Arena.class); + subject.playerJoin(player); + + subject.playerDeath(arena, player); + + PlayerSessionStats actual = subject.getPlayerStats(playerId); + assertThat(actual, nullValue()); + } + @Test void setDeathTimeOnDeath() { UUID playerId = UUID.fromString("cafebabe-ea75-dead-beef-deadcafebabe"); @@ -149,6 +178,7 @@ class SessionTest { ArenaPlayer ap = mock(ArenaPlayer.class); when(arena.getArenaPlayer(player)).thenReturn(ap); subject.playerJoin(player); + subject.start(); subject.playerDeath(arena, player); @@ -164,6 +194,7 @@ class SessionTest { ArenaPlayer ap = mock(ArenaPlayer.class); when(arena.getArenaPlayer(player)).thenReturn(ap); subject.playerJoin(player); + subject.start(); subject.playerDeath(arena, player); @@ -179,6 +210,7 @@ class SessionTest { ArenaPlayer ap = mock(ArenaPlayer.class); when(arena.getArenaPlayer(player)).thenReturn(ap); subject.playerJoin(player); + subject.start(); subject.getPlayerStats(playerId).conclusion = PlayerConclusion.VICTORY; subject.playerDeath(arena, player); @@ -246,6 +278,7 @@ class SessionTest { when(arena.getArenaPlayer(corpse)).thenReturn(ap); subject.playerJoin(corpse); subject.playerJoin(survivor); + subject.start(); subject.playerDeath(arena, corpse); subject.complete();