package de.winniepat.fallSMPRewards.model; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.UUID; public final class PlayerData { private UUID uuid; private int totalKills; private Set claimedQuestIds; private Map lastCountedKillByVictim; public PlayerData() { // Required for Gson. } public PlayerData(UUID uuid) { this.uuid = uuid; this.totalKills = 0; this.claimedQuestIds = new HashSet<>(); this.lastCountedKillByVictim = new HashMap<>(); } public void sanitize(UUID expectedUuid) { if (uuid == null) { uuid = expectedUuid; } if (claimedQuestIds == null) { claimedQuestIds = new HashSet<>(); } if (lastCountedKillByVictim == null) { lastCountedKillByVictim = new HashMap<>(); } if (totalKills < 0) { totalKills = 0; } } public UUID getUuid() { return uuid; } public int getTotalKills() { return totalKills; } public int addKill() { totalKills++; return totalKills; } public long getRemainingCooldownMillis(UUID victimUuid, long cooldownMillis, long nowMillis) { Long lastCountedMillis = lastCountedKillByVictim.get(victimUuid.toString()); if (lastCountedMillis == null) { return 0L; } long elapsed = nowMillis - lastCountedMillis; if (elapsed >= cooldownMillis) { return 0L; } return cooldownMillis - elapsed; } public void setLastCountedKill(UUID victimUuid, long nowMillis) { lastCountedKillByVictim.put(victimUuid.toString(), nowMillis); } public boolean hasClaimed(String questId) { return claimedQuestIds.contains(questId); } public boolean claim(String questId) { return claimedQuestIds.add(questId); } }