Remove player entries on leave/death prior to session start.
While we do want to keep track of join and ready times, we really don't care about those stats for players who join the lobby _and leave_ prior to the arena actually starting. Coincidentally, _not_ storing stats for players that don't actually pick a class means we don't end up trying to insert a `null` value into the class name column, which should solve the error thrown when trying to do just that as a result of the auto-start timer kicking players or players themselves leaving prior to starting. Fixes #16
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user