mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-10 01:11:34 +01:00
Attempted to fix UUIDs ending up in World aliases #549
This commit is contained in:
parent
b1ae7c53c7
commit
84eeda66b2
@ -27,23 +27,27 @@ public class GamemodeChangeListener implements Listener {
|
|||||||
* @param event Fired Event.
|
* @param event Fired Event.
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onGamemodeChange(PlayerGameModeChangeEvent event) {
|
public void onGameModeChange(PlayerGameModeChangeEvent event) {
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Player p = event.getPlayer();
|
actOnEvent(event);
|
||||||
UUID uuid = p.getUniqueId();
|
|
||||||
long time = MiscUtils.getTime();
|
|
||||||
String gameMode = event.getNewGameMode().name();
|
|
||||||
String worldName = p.getWorld().getName();
|
|
||||||
|
|
||||||
new WorldAliasSettings().addWorld(worldName);
|
|
||||||
|
|
||||||
Optional<Session> cachedSession = SessionCache.getCachedSession(uuid);
|
|
||||||
cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time));
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.toLog(this.getClass(), e);
|
Log.toLog(this.getClass(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void actOnEvent(PlayerGameModeChangeEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
UUID uuid = player.getUniqueId();
|
||||||
|
long time = MiscUtils.getTime();
|
||||||
|
String gameMode = event.getNewGameMode().name();
|
||||||
|
String worldName = player.getWorld().getName();
|
||||||
|
|
||||||
|
WorldAliasSettings.addWorld(worldName);
|
||||||
|
|
||||||
|
Optional<Session> cachedSession = SessionCache.getCachedSession(uuid);
|
||||||
|
cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,19 +19,24 @@ public class WorldChangeListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onWorldChange(PlayerChangedWorldEvent event) {
|
public void onWorldChange(PlayerChangedWorldEvent event) {
|
||||||
try {
|
try {
|
||||||
Player p = event.getPlayer();
|
actOnEvent(event);
|
||||||
String worldName = p.getWorld().getName();
|
|
||||||
|
|
||||||
UUID uuid = p.getUniqueId();
|
|
||||||
String gameMode = p.getGameMode().name();
|
|
||||||
long time = MiscUtils.getTime();
|
|
||||||
|
|
||||||
new WorldAliasSettings().addWorld(worldName);
|
|
||||||
|
|
||||||
Optional<Session> cachedSession = SessionCache.getCachedSession(uuid);
|
|
||||||
cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time));
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.toLog(this.getClass(), e);
|
Log.toLog(this.getClass(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void actOnEvent(PlayerChangedWorldEvent event) {
|
||||||
|
long time = MiscUtils.getTime();
|
||||||
|
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
UUID uuid = player.getUniqueId();
|
||||||
|
|
||||||
|
String worldName = player.getWorld().getName();
|
||||||
|
String gameMode = player.getGameMode().name();
|
||||||
|
|
||||||
|
WorldAliasSettings.addWorld(worldName);
|
||||||
|
|
||||||
|
Optional<Session> cachedSession = SessionCache.getCachedSession(uuid);
|
||||||
|
cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,16 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class WorldAliasSettings {
|
public class WorldAliasSettings {
|
||||||
|
|
||||||
|
private WorldAliasSettings() {
|
||||||
|
/* Hide Constructor */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to get all World aliases in the config
|
* Used to get all World aliases in the config
|
||||||
*
|
*
|
||||||
* @return Map: Original name, Alias
|
* @return Map: Original name, Alias
|
||||||
*/
|
*/
|
||||||
public Map<String, String> getAliases() {
|
public static Map<String, String> getAliases() {
|
||||||
ConfigNode aliasSect = getAliasSection();
|
ConfigNode aliasSect = getAliasSection();
|
||||||
|
|
||||||
Map<String, String> aliasMap = new HashMap<>();
|
Map<String, String> aliasMap = new HashMap<>();
|
||||||
@ -37,7 +41,7 @@ public class WorldAliasSettings {
|
|||||||
return aliasMap;
|
return aliasMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConfigNode getAliasSection() {
|
private static ConfigNode getAliasSection() {
|
||||||
Config config = ConfigSystem.getConfig();
|
Config config = ConfigSystem.getConfig();
|
||||||
return config.getConfigNode(Settings.WORLD_ALIASES.getPath());
|
return config.getConfigNode(Settings.WORLD_ALIASES.getPath());
|
||||||
}
|
}
|
||||||
@ -49,7 +53,7 @@ public class WorldAliasSettings {
|
|||||||
*
|
*
|
||||||
* @param world World name
|
* @param world World name
|
||||||
*/
|
*/
|
||||||
public void addWorld(String world) {
|
public static void addWorld(String world) {
|
||||||
ConfigNode aliasSect = getAliasSection();
|
ConfigNode aliasSect = getAliasSection();
|
||||||
|
|
||||||
String previousValue = aliasSect.getConfigNode(world).getValue();
|
String previousValue = aliasSect.getConfigNode(world).getValue();
|
||||||
@ -59,19 +63,9 @@ public class WorldAliasSettings {
|
|||||||
try {
|
try {
|
||||||
aliasSect.save();
|
aliasSect.save();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.toLog(this.getClass(), e);
|
Log.toLog(WorldAliasSettings.class, e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to get alias of a single world.
|
|
||||||
*
|
|
||||||
* @param world World name.
|
|
||||||
* @return Alias.
|
|
||||||
*/
|
|
||||||
public String getAlias(String world) {
|
|
||||||
return getAliasSection().getString(world);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -4,6 +4,9 @@ import com.djrapitops.plan.data.PlayerProfile;
|
|||||||
import com.djrapitops.plan.data.calculation.ActivityIndex;
|
import com.djrapitops.plan.data.calculation.ActivityIndex;
|
||||||
import com.djrapitops.plan.data.container.Session;
|
import com.djrapitops.plan.data.container.Session;
|
||||||
import com.djrapitops.plan.data.container.StickyData;
|
import com.djrapitops.plan.data.container.StickyData;
|
||||||
|
import com.djrapitops.plan.data.time.GMTimes;
|
||||||
|
import com.djrapitops.plan.data.time.WorldTimes;
|
||||||
|
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -226,4 +229,59 @@ public class AnalysisUtils {
|
|||||||
}
|
}
|
||||||
return activityData;
|
return activityData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<String, Long> getPlaytimePerAlias(WorldTimes worldTimes) {
|
||||||
|
// WorldTimes Map<String, GMTimes>
|
||||||
|
Map<String, Long> playtimePerWorld = worldTimes.getWorldTimes()
|
||||||
|
.entrySet().stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
Map.Entry::getKey,
|
||||||
|
entry -> entry.getValue().getTotal() // GMTimes.getTotal
|
||||||
|
));
|
||||||
|
|
||||||
|
Map<String, String> aliases = WorldAliasSettings.getAliases();
|
||||||
|
|
||||||
|
Map<String, Long> playtimePerAlias = new HashMap<>();
|
||||||
|
for (Map.Entry<String, Long> entry : playtimePerWorld.entrySet()) {
|
||||||
|
String worldName = entry.getKey();
|
||||||
|
long playtime = entry.getValue();
|
||||||
|
|
||||||
|
if (!aliases.containsKey(worldName)) {
|
||||||
|
aliases.put(worldName, worldName);
|
||||||
|
WorldAliasSettings.addWorld(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
String alias = aliases.get(worldName);
|
||||||
|
|
||||||
|
playtimePerAlias.put(alias, playtimePerAlias.getOrDefault(alias, 0L) + playtime);
|
||||||
|
}
|
||||||
|
return playtimePerAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, GMTimes> getGMTimesPerAlias(WorldTimes worldTimes) {
|
||||||
|
Map<String, String> aliases = WorldAliasSettings.getAliases();
|
||||||
|
|
||||||
|
Map<String, GMTimes> gmTimesPerAlias = new HashMap<>();
|
||||||
|
|
||||||
|
String[] gms = GMTimes.getGMKeyArray();
|
||||||
|
|
||||||
|
for (Map.Entry<String, GMTimes> entry : worldTimes.getWorldTimes().entrySet()) {
|
||||||
|
String worldName = entry.getKey();
|
||||||
|
GMTimes gmTimes = entry.getValue();
|
||||||
|
|
||||||
|
if (!aliases.containsKey(worldName)) {
|
||||||
|
aliases.put(worldName, worldName);
|
||||||
|
WorldAliasSettings.addWorld(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
String alias = aliases.get(worldName);
|
||||||
|
|
||||||
|
GMTimes aliasGMTimes = gmTimesPerAlias.getOrDefault(alias, new GMTimes());
|
||||||
|
for (String gm : gms) {
|
||||||
|
aliasGMTimes.addTime(gm, gmTimes.getTime(gm));
|
||||||
|
}
|
||||||
|
gmTimesPerAlias.put(alias, aliasGMTimes);
|
||||||
|
}
|
||||||
|
return gmTimesPerAlias;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,15 @@ package com.djrapitops.plan.utilities.html.graphs.pie;
|
|||||||
import com.djrapitops.plan.data.time.GMTimes;
|
import com.djrapitops.plan.data.time.GMTimes;
|
||||||
import com.djrapitops.plan.data.time.WorldTimes;
|
import com.djrapitops.plan.data.time.WorldTimes;
|
||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
|
||||||
import com.djrapitops.plan.system.settings.theme.Theme;
|
import com.djrapitops.plan.system.settings.theme.Theme;
|
||||||
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
||||||
|
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
import com.djrapitops.plan.utilities.comparators.PieSliceComparator;
|
import com.djrapitops.plan.utilities.comparators.PieSliceComparator;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
import java.util.stream.Collectors;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class WorldPie extends AbstractPieChartWithDrilldown {
|
public class WorldPie extends AbstractPieChartWithDrilldown {
|
||||||
|
|
||||||
@ -27,13 +29,9 @@ public class WorldPie extends AbstractPieChartWithDrilldown {
|
|||||||
|
|
||||||
private static List<PieSlice> turnIntoSlices(WorldTimes worldTimes) {
|
private static List<PieSlice> turnIntoSlices(WorldTimes worldTimes) {
|
||||||
String[] colors = Theme.getValue(ThemeVal.GRAPH_WORLD_PIE).split(", ");
|
String[] colors = Theme.getValue(ThemeVal.GRAPH_WORLD_PIE).split(", ");
|
||||||
int colLenght = colors.length;
|
int colLength = colors.length;
|
||||||
|
|
||||||
// WorldTimes Map<String, GMTimes> (GMTimes.getTotal)
|
Map<String, Long> playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes);
|
||||||
Map<String, Long> playtimePerWorld = worldTimes.getWorldTimes().entrySet().stream()
|
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal()));
|
|
||||||
|
|
||||||
Map<String, Long> playtimePerAlias = transformToAliases(playtimePerWorld);
|
|
||||||
|
|
||||||
List<String> worlds = new ArrayList<>(playtimePerAlias.keySet());
|
List<String> worlds = new ArrayList<>(playtimePerAlias.keySet());
|
||||||
Collections.sort(worlds);
|
Collections.sort(worlds);
|
||||||
@ -43,7 +41,7 @@ public class WorldPie extends AbstractPieChartWithDrilldown {
|
|||||||
for (String alias : worlds) {
|
for (String alias : worlds) {
|
||||||
Long value = playtimePerAlias.getOrDefault(alias, 0L);
|
Long value = playtimePerAlias.getOrDefault(alias, 0L);
|
||||||
if (value != 0L) {
|
if (value != 0L) {
|
||||||
slices.add(new PieSlice(alias, value, colors[i % colLenght], true));
|
slices.add(new PieSlice(alias, value, colors[i % colLength], true));
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -51,46 +49,17 @@ public class WorldPie extends AbstractPieChartWithDrilldown {
|
|||||||
return slices;
|
return slices;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, Long> transformToAliases(Map<String, Long> playtimePerWorld) {
|
|
||||||
WorldAliasSettings aliasSettings = new WorldAliasSettings();
|
|
||||||
Map<String, String> aliases = aliasSettings.getAliases();
|
|
||||||
return transformToAliases(playtimePerWorld, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO Move to another class
|
|
||||||
public static Map<String, Long> transformToAliases(Map<String, Long> playtimePerWorld, Map<String, String> aliases) {
|
|
||||||
// TODO Optimization is possible (WorldAliasSettings)
|
|
||||||
WorldAliasSettings aliasSettings = new WorldAliasSettings();
|
|
||||||
|
|
||||||
Map<String, Long> playtimePerAlias = new HashMap<>();
|
|
||||||
for (Map.Entry<String, Long> entry : playtimePerWorld.entrySet()) {
|
|
||||||
String worldName = entry.getKey();
|
|
||||||
long playtime = entry.getValue();
|
|
||||||
|
|
||||||
if (!aliases.containsKey(worldName)) {
|
|
||||||
aliases.put(worldName, worldName);
|
|
||||||
aliasSettings.addWorld(worldName);
|
|
||||||
}
|
|
||||||
|
|
||||||
String alias = aliases.get(worldName);
|
|
||||||
|
|
||||||
playtimePerAlias.put(alias, playtimePerAlias.getOrDefault(alias, 0L) + playtime);
|
|
||||||
}
|
|
||||||
return playtimePerAlias;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toHighChartsDrilldown() {
|
public String toHighChartsDrilldown() {
|
||||||
StringBuilder drilldownBuilder = new StringBuilder();
|
StringBuilder drilldownBuilder = new StringBuilder();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
Map<String, GMTimes> gmTimesMap = worldTimes.getWorldTimes();
|
Map<String, GMTimes> gmTimesAliasMap = AnalysisUtils.getGMTimesPerAlias(worldTimes);
|
||||||
if (gmTimesMap.isEmpty()) {
|
if (gmTimesAliasMap.isEmpty()) {
|
||||||
return "[]";
|
return "[]";
|
||||||
}
|
}
|
||||||
Map<String, GMTimes> gmTimesAliasMap = transformToGMAliases(gmTimesMap);
|
int size = gmTimesAliasMap.size();
|
||||||
|
|
||||||
int size = gmTimesMap.size();
|
|
||||||
drilldownBuilder.append("[");
|
drilldownBuilder.append("[");
|
||||||
for (Map.Entry<String, GMTimes> worldAlias : gmTimesAliasMap.entrySet()) {
|
for (Map.Entry<String, GMTimes> worldAlias : gmTimesAliasMap.entrySet()) {
|
||||||
drilldownBuilder.append("{name:'").append(worldAlias.getKey())
|
drilldownBuilder.append("{name:'").append(worldAlias.getKey())
|
||||||
@ -109,35 +78,6 @@ public class WorldPie extends AbstractPieChartWithDrilldown {
|
|||||||
return drilldownBuilder.toString();
|
return drilldownBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, GMTimes> transformToGMAliases(Map<String, GMTimes> gmTimesMap) {
|
|
||||||
// TODO Optimization is possible (WorldAliasSettings)
|
|
||||||
WorldAliasSettings aliasSettings = new WorldAliasSettings();
|
|
||||||
Map<String, String> aliases = aliasSettings.getAliases();
|
|
||||||
|
|
||||||
Map<String, GMTimes> gmTimesPerAlias = new HashMap<>();
|
|
||||||
|
|
||||||
String[] gms = GMTimes.getGMKeyArray();
|
|
||||||
|
|
||||||
for (Map.Entry<String, GMTimes> entry : gmTimesMap.entrySet()) {
|
|
||||||
String worldName = entry.getKey();
|
|
||||||
GMTimes gmTimes = entry.getValue();
|
|
||||||
|
|
||||||
if (!aliases.containsKey(worldName)) {
|
|
||||||
aliases.put(worldName, worldName);
|
|
||||||
aliasSettings.addWorld(worldName);
|
|
||||||
}
|
|
||||||
|
|
||||||
String alias = aliases.get(worldName);
|
|
||||||
|
|
||||||
GMTimes aliasGMTimes = gmTimesPerAlias.getOrDefault(alias, new GMTimes());
|
|
||||||
for (String gm : gms) {
|
|
||||||
aliasGMTimes.addTime(gm, gmTimes.getTime(gm));
|
|
||||||
}
|
|
||||||
gmTimesPerAlias.put(alias, aliasGMTimes);
|
|
||||||
}
|
|
||||||
return gmTimesPerAlias;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void appendGMTimesForWorld(StringBuilder drilldownBuilder, Map.Entry<String, GMTimes> world) {
|
private void appendGMTimesForWorld(StringBuilder drilldownBuilder, Map.Entry<String, GMTimes> world) {
|
||||||
Map<String, Long> gmTimes = world.getValue().getTimes();
|
Map<String, Long> gmTimes = world.getValue().getTimes();
|
||||||
int smallSize = gmTimes.size();
|
int smallSize = gmTimes.size();
|
||||||
|
@ -12,12 +12,11 @@ import com.djrapitops.plan.system.cache.SessionCache;
|
|||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
||||||
import com.djrapitops.plan.utilities.FormatUtils;
|
import com.djrapitops.plan.utilities.FormatUtils;
|
||||||
|
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
import com.djrapitops.plan.utilities.comparators.SessionStartComparator;
|
import com.djrapitops.plan.utilities.comparators.SessionStartComparator;
|
||||||
import com.djrapitops.plan.utilities.html.Html;
|
import com.djrapitops.plan.utilities.html.Html;
|
||||||
import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility for creating HTML {@code <table>}-element with Sessions inside it.
|
* Utility for creating HTML {@code <table>}-element with Sessions inside it.
|
||||||
@ -55,7 +54,6 @@ public class SessionsTableCreator {
|
|||||||
Set<String> recentLoginsNames = new HashSet<>();
|
Set<String> recentLoginsNames = new HashSet<>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Map<Long, UUID> uuidBySessionStart = new HashMap<>();
|
Map<Long, UUID> uuidBySessionStart = new HashMap<>();
|
||||||
for (Map.Entry<UUID, Session> entry : SessionCache.getActiveSessions().entrySet()) {
|
for (Map.Entry<UUID, Session> entry : SessionCache.getActiveSessions().entrySet()) {
|
||||||
uuidBySessionStart.put(entry.getValue().getSessionStart(), entry.getKey());
|
uuidBySessionStart.put(entry.getValue().getSessionStart(), entry.getKey());
|
||||||
@ -108,18 +106,15 @@ public class SessionsTableCreator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getLongestWorldPlayed(Session session) {
|
public static String getLongestWorldPlayed(Session session) {
|
||||||
WorldAliasSettings aliasSettings = new WorldAliasSettings();
|
Map<String, String> aliases = WorldAliasSettings.getAliases();
|
||||||
Map<String, String> aliases = aliasSettings.getAliases();
|
|
||||||
if (session.getSessionEnd() == -1) {
|
if (session.getSessionEnd() == -1) {
|
||||||
return "Current: " + aliases.get(session.getWorldTimes().getCurrentWorld());
|
return "Current: " + aliases.get(session.getWorldTimes().getCurrentWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Long> playtimePerWorld = session.getWorldTimes().getWorldTimes().entrySet().stream()
|
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal()));
|
|
||||||
Map<String, Long> playtimePerAlias = WorldPie.transformToAliases(playtimePerWorld, aliases);
|
|
||||||
|
|
||||||
WorldTimes worldTimes = session.getWorldTimes();
|
WorldTimes worldTimes = session.getWorldTimes();
|
||||||
|
Map<String, Long> playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes);
|
||||||
long total = worldTimes.getTotal();
|
long total = worldTimes.getTotal();
|
||||||
|
|
||||||
long longest = 0;
|
long longest = 0;
|
||||||
String theWorld = "-";
|
String theWorld = "-";
|
||||||
for (Map.Entry<String, Long> entry : playtimePerAlias.entrySet()) {
|
for (Map.Entry<String, Long> entry : playtimePerAlias.entrySet()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user