PlayerKill now supports killer UUID

This commit is contained in:
Risto Lahtela 2020-11-19 16:50:15 +02:00
parent 6292ef5f4d
commit a6a606494d
10 changed files with 48 additions and 36 deletions

View File

@ -47,7 +47,7 @@ public class PlayerKillMutator {
Map<String, Object> killMap = new HashMap<>();
killMap.put("date", formatters.secondLong().apply(kill.getDate()));
killMap.put("victim", kill.getVictimName().orElse(kill.getVictim().toString()));
killMap.put("killer", kill.getKillerName().orElse("Missing UUID")); // TODO Kills should support killer UUID
killMap.put("killer", kill.getKillerName().orElse(kill.getKiller().toString()));
killMap.put("weapon", kill.getWeapon());
return killMap;
}

View File

@ -23,13 +23,13 @@ import java.util.Optional;
import java.util.UUID;
/**
* This class is used to store data about a player kill inside the UserInfo
* object.
* Represents a player vs player kill.
*
* @author Rsl1122
*/
public class PlayerKill implements DateHolder {
private final UUID killer;
private final UUID victim;
private final String weapon;
private final long date;
@ -40,31 +40,32 @@ public class PlayerKill implements DateHolder {
/**
* Creates a PlayerKill object with given parameters.
*
* @param killer UUID of the killer.
* @param victim UUID of the victim.
* @param weapon Weapon used.
* @param date Epoch millisecond at which the kill occurred.
*/
public PlayerKill(UUID victim, String weapon, long date) {
public PlayerKill(UUID killer, UUID victim, String weapon, long date) {
this.killer = killer;
this.victim = victim;
this.weapon = weapon;
this.date = date;
}
public PlayerKill(UUID victim, String weapon, long date, String victimName) {
this(victim, weapon, date);
public PlayerKill(UUID killer, UUID victim, String weapon, long date, String victimName) {
this(killer, victim, weapon, date);
this.victimName = victimName;
}
public PlayerKill(UUID victim, String weapon, long date, String victimName, String killerName) {
this(victim, weapon, date, victimName);
public PlayerKill(UUID killer, UUID victim, String weapon, long date, String victimName, String killerName) {
this(killer, victim, weapon, date, victimName);
this.killerName = killerName;
}
/**
* Get the victim's UUID.
*
* @return UUID of the victim.
*/
public UUID getKiller() {
return killer;
}
public UUID getVictim() {
return victim;
}
@ -97,25 +98,27 @@ public class PlayerKill implements DateHolder {
if (o == null || getClass() != o.getClass()) return false;
PlayerKill that = (PlayerKill) o;
return date == that.date &&
Objects.equals(killer, that.killer) &&
Objects.equals(victim, that.victim) &&
Objects.equals(weapon, that.weapon);
}
@Override
public int hashCode() {
return Objects.hash(victim, date, weapon);
return Objects.hash(killer, victim, date, weapon);
}
@Override
public String toString() {
return "PlayerKill{" +
"killer=" + killer + ", " +
"victim=" + victim + ", " +
"date=" + date + ", " +
"weapon='" + weapon + "'}";
}
public boolean isSelfKill() {
return getVictimName().map(v -> v.equals(killerName)).orElse(false);
return killer.equals(victim);
}
public boolean isNotSelfKill() {

View File

@ -62,6 +62,6 @@ public class PlayerKillProcessor implements CriticalRunnable {
}
Session session = cachedSession.get();
session.playerKilled(new PlayerKill(victim, weaponName, time));
session.playerKilled(new PlayerKill(killer, victim, weaponName, time));
}
}

View File

@ -46,7 +46,9 @@ public class KillQueries {
}
public static Query<List<PlayerKill>> fetchPlayerKillsOnServer(UUID serverUUID, int limit) {
String sql = SELECT + KillsTable.VICTIM_UUID + ", " +
String sql = SELECT +
KillsTable.KILLER_UUID + ", " +
KillsTable.VICTIM_UUID + ", " +
"v." + UsersTable.USER_NAME + " as victim_name, " +
"k." + UsersTable.USER_NAME + " as killer_name," +
KillsTable.DATE + ", " +
@ -76,7 +78,9 @@ public class KillQueries {
}
public static Query<List<PlayerKill>> fetchPlayerKillsOfPlayer(UUID playerUUID) {
String sql = SELECT + KillsTable.VICTIM_UUID + ", " +
String sql = SELECT +
KillsTable.KILLER_UUID + ", " +
KillsTable.VICTIM_UUID + ", " +
"v." + UsersTable.USER_NAME + " as victim_name, " +
"k." + UsersTable.USER_NAME + " as killer_name," +
KillsTable.DATE + ", " +
@ -105,7 +109,9 @@ public class KillQueries {
}
public static Query<List<PlayerKill>> fetchPlayerDeathsOfPlayer(UUID playerUUID) {
String sql = SELECT + KillsTable.VICTIM_UUID + ", " +
String sql = SELECT +
KillsTable.KILLER_UUID + ", " +
KillsTable.VICTIM_UUID + ", " +
"v." + UsersTable.USER_NAME + " as victim_name, " +
"k." + UsersTable.USER_NAME + " as killer_name," +
KillsTable.DATE + ", " +
@ -137,10 +143,11 @@ public class KillQueries {
String victimName = set.getString("victim_name");
String killerName = set.getString("killer_name");
if (victimName != null && killerName != null) {
UUID killer = UUID.fromString(set.getString(KillsTable.KILLER_UUID));
UUID victim = UUID.fromString(set.getString(KillsTable.VICTIM_UUID));
long date = set.getLong(KillsTable.DATE);
String weapon = set.getString(KillsTable.WEAPON);
return Optional.of(new PlayerKill(victim, weapon, date, victimName, killerName));
return Optional.of(new PlayerKill(killer, victim, weapon, date, victimName, killerName));
}
return Optional.empty();
}

View File

@ -67,6 +67,7 @@ public class SessionQueries {
WorldTimesTable.ADVENTURE + ',' +
WorldTimesTable.SPECTATOR + ',' +
WorldTable.NAME + ',' +
KillsTable.KILLER_UUID + ',' +
KillsTable.VICTIM_UUID + ',' +
"v." + UsersTable.USER_NAME + " as victim_name, " +
KillsTable.DATE + ',' +
@ -193,11 +194,12 @@ public class SessionQueries {
String victimName = set.getString("victim_name");
if (victimName != null) {
UUID killer = UUID.fromString(set.getString(KillsTable.KILLER_UUID));
UUID victim = UUID.fromString(set.getString(KillsTable.VICTIM_UUID));
long date = set.getLong(KillsTable.DATE);
String weapon = set.getString(KillsTable.WEAPON);
List<PlayerKill> playerKills = session.getPlayerKills();
PlayerKill newKill = new PlayerKill(victim, weapon, date, victimName);
PlayerKill newKill = new PlayerKill(killer, victim, weapon, date, victimName);
if (!playerKills.contains(newKill)) {
playerKills.add(newKill);
}

View File

@ -31,9 +31,9 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
*/
class PlayerKillTest {
private String weapon = RandomData.randomString(10);
private UUID testUUID = UUID.randomUUID();
private PlayerKill underTest = new PlayerKill(testUUID, weapon, 100L);
private final String weapon = RandomData.randomString(10);
private final UUID testUUID = UUID.randomUUID();
private final PlayerKill underTest = new PlayerKill(testUUID, testUUID, weapon, 100L);
@Test
void victimUUIDIsReturned() {
@ -58,7 +58,7 @@ class PlayerKillTest {
@Test
void victimFound() {
String expectedName = "Test Victim";
PlayerKill underTest = new PlayerKill(testUUID, weapon, 100L, expectedName);
PlayerKill underTest = new PlayerKill(testUUID, testUUID, weapon, 100L, expectedName);
assertEquals("Test Victim", underTest.getVictimName().orElse("Unknown"));
}
}

View File

@ -68,7 +68,7 @@ class SessionTest {
List<PlayerKill> before = beforeOptional.get();
assertTrue(before.isEmpty());
session.playerKilled(new PlayerKill(TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis()));
session.playerKilled(new PlayerKill(TestConstants.PLAYER_ONE_UUID, TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis()));
Optional<List<PlayerKill>> afterOptional = session.getValue(SessionKeys.PLAYER_KILLS);
assertTrue(afterOptional.isPresent());
@ -82,7 +82,7 @@ class SessionTest {
void killsAreAdded2() {
Session session = new Session(null, serverUUID, System.currentTimeMillis(), "", "");
session.playerKilled(new PlayerKill(TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis()));
session.playerKilled(new PlayerKill(TestConstants.PLAYER_ONE_UUID, TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis()));
Optional<List<PlayerKill>> afterOptional = session.getValue(SessionKeys.PLAYER_KILLS);
assertTrue(afterOptional.isPresent());

View File

@ -38,8 +38,8 @@ import static org.junit.jupiter.api.Assertions.*;
*/
class ImportBuilderTest {
private int randomInt = RandomData.randomInt(0, 10);
private String randomString = RandomData.randomString(randomInt);
private final int randomInt = RandomData.randomInt(0, 10);
private final String randomString = RandomData.randomString(randomInt);
@Test
void emptyServerBuilderInitializesCollections() {
@ -100,7 +100,7 @@ class ImportBuilderTest {
UserImportData.UserImportDataBuilder builder = UserImportData.builder(TestConstants.SERVER_UUID);
UUID uuid = UUID.randomUUID();
PlayerKill playerKill = new PlayerKill(uuid, randomString, 1);
PlayerKill playerKill = new PlayerKill(uuid, uuid, randomString, 1);
GMTimes gmTimes = new GMTimes(randomString, randomInt);
UserImportData data = builder.uuid(uuid)

View File

@ -109,7 +109,7 @@ public class RandomData {
session.endSession(RandomData.randomTimeAfter(session.getDate()));
session.setWorldTimes(RandomData.randomWorldTimes(worlds));
if (uuids.length >= 2) {
session.setPlayerKills(RandomData.randomKills(pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length))));
session.setPlayerKills(RandomData.randomKills(uuids[0], pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length))));
}
return session;
}
@ -122,7 +122,7 @@ public class RandomData {
Session session = new Session(uuids[0], serverUUID, RandomData.randomTime(), pickAtRandom(worlds), randomGameMode());
session.setWorldTimes(RandomData.randomWorldTimes(worlds));
if (uuids.length >= 2) {
session.setPlayerKills(RandomData.randomKills(pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length))));
session.setPlayerKills(RandomData.randomKills(uuids[0], pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length))));
}
return session;
}
@ -151,11 +151,11 @@ public class RandomData {
return new WorldTimes(times);
}
public static List<PlayerKill> randomKills(UUID... victimUUIDs) {
public static List<PlayerKill> randomKills(UUID killer, UUID... victimUUIDs) {
if (victimUUIDs == null || victimUUIDs.length == 1 && victimUUIDs[0] == null) return Collections.emptyList();
return pickMultiple(randomInt(3, 15), () -> new PlayerKill(
pickAtRandom(victimUUIDs),
killer, pickAtRandom(victimUUIDs),
randomString(randomInt(10, KillsTable.WEAPON_COLUMN_LENGTH)),
randomTime()
));

View File

@ -78,8 +78,8 @@ public class TestData {
Session sessionOne = new Session(uuid, serverUUID, playerFirstJoin, serverWorldNames[0], gms[0]);
UUID otherUUID = uuid.equals(playerUUID) ? player2UUID : playerUUID;
sessionOne.playerKilled(new PlayerKill(otherUUID, "Iron Sword", 1234750L));
sessionOne.playerKilled(new PlayerKill(otherUUID, "Gold Sword", 1234800L));
sessionOne.playerKilled(new PlayerKill(uuid, otherUUID, "Iron Sword", 1234750L));
sessionOne.playerKilled(new PlayerKill(uuid, otherUUID, "Gold Sword", 1234800L));
sessionOne.endSession(1235000L); // Length 500ms
sessions.add(sessionOne);