Attempted to fix UUIDs ending up in World aliases #549

This commit is contained in:
Rsl1122 2018-04-02 11:07:39 +03:00
parent b1ae7c53c7
commit 84eeda66b2
6 changed files with 113 additions and 117 deletions

View File

@ -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));
}
} }

View File

@ -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));
}
} }

View File

@ -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);
}
} }

View File

@ -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;
}
} }

View File

@ -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();

View File

@ -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()) {