mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-30 16:19:56 +08:00
PlayerKill now supports killer UUID
This commit is contained in:
parent
6292ef5f4d
commit
a6a606494d
@ -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;
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
));
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user