From 84eeda66b2d3312bbb1a1554c701da4431389921 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Mon, 2 Apr 2018 11:07:39 +0300 Subject: [PATCH] Attempted to fix UUIDs ending up in World aliases #549 --- .../bukkit/GamemodeChangeListener.java | 26 +++--- .../listeners/bukkit/WorldChangeListener.java | 27 +++--- .../system/settings/WorldAliasSettings.java | 22 ++--- .../utilities/analysis/AnalysisUtils.java | 58 +++++++++++++ .../utilities/html/graphs/pie/WorldPie.java | 84 +++---------------- .../html/tables/SessionsTableCreator.java | 13 +-- 6 files changed, 113 insertions(+), 117 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/GamemodeChangeListener.java b/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/GamemodeChangeListener.java index 3e04d6a62..facc2d183 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/GamemodeChangeListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/GamemodeChangeListener.java @@ -27,23 +27,27 @@ public class GamemodeChangeListener implements Listener { * @param event Fired Event. */ @EventHandler(priority = EventPriority.MONITOR) - public void onGamemodeChange(PlayerGameModeChangeEvent event) { + public void onGameModeChange(PlayerGameModeChangeEvent event) { if (event.isCancelled()) { return; } try { - Player p = event.getPlayer(); - UUID uuid = p.getUniqueId(); - long time = MiscUtils.getTime(); - String gameMode = event.getNewGameMode().name(); - String worldName = p.getWorld().getName(); - - new WorldAliasSettings().addWorld(worldName); - - Optional cachedSession = SessionCache.getCachedSession(uuid); - cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); + actOnEvent(event); } catch (Exception 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 cachedSession = SessionCache.getCachedSession(uuid); + cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/WorldChangeListener.java b/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/WorldChangeListener.java index 18a038218..861fccc57 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/WorldChangeListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/listeners/bukkit/WorldChangeListener.java @@ -19,19 +19,24 @@ public class WorldChangeListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onWorldChange(PlayerChangedWorldEvent event) { try { - Player p = event.getPlayer(); - String worldName = p.getWorld().getName(); - - UUID uuid = p.getUniqueId(); - String gameMode = p.getGameMode().name(); - long time = MiscUtils.getTime(); - - new WorldAliasSettings().addWorld(worldName); - - Optional cachedSession = SessionCache.getCachedSession(uuid); - cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); + actOnEvent(event); } catch (Exception 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 cachedSession = SessionCache.getCachedSession(uuid); + cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java index b31dff919..bd350fac6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java @@ -22,12 +22,16 @@ import java.util.Map; */ public class WorldAliasSettings { + private WorldAliasSettings() { + /* Hide Constructor */ + } + /** * Used to get all World aliases in the config * * @return Map: Original name, Alias */ - public Map getAliases() { + public static Map getAliases() { ConfigNode aliasSect = getAliasSection(); Map aliasMap = new HashMap<>(); @@ -37,7 +41,7 @@ public class WorldAliasSettings { return aliasMap; } - private ConfigNode getAliasSection() { + private static ConfigNode getAliasSection() { Config config = ConfigSystem.getConfig(); return config.getConfigNode(Settings.WORLD_ALIASES.getPath()); } @@ -49,7 +53,7 @@ public class WorldAliasSettings { * * @param world World name */ - public void addWorld(String world) { + public static void addWorld(String world) { ConfigNode aliasSect = getAliasSection(); String previousValue = aliasSect.getConfigNode(world).getValue(); @@ -59,19 +63,9 @@ public class WorldAliasSettings { try { aliasSect.save(); } 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); - } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java index 368f09872..28e330a86 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java @@ -4,6 +4,9 @@ import com.djrapitops.plan.data.PlayerProfile; import com.djrapitops.plan.data.calculation.ActivityIndex; import com.djrapitops.plan.data.container.Session; 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 java.util.*; @@ -226,4 +229,59 @@ public class AnalysisUtils { } return activityData; } + + public static Map getPlaytimePerAlias(WorldTimes worldTimes) { + // WorldTimes Map + Map playtimePerWorld = worldTimes.getWorldTimes() + .entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> entry.getValue().getTotal() // GMTimes.getTotal + )); + + Map aliases = WorldAliasSettings.getAliases(); + + Map playtimePerAlias = new HashMap<>(); + for (Map.Entry 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 getGMTimesPerAlias(WorldTimes worldTimes) { + Map aliases = WorldAliasSettings.getAliases(); + + Map gmTimesPerAlias = new HashMap<>(); + + String[] gms = GMTimes.getGMKeyArray(); + + for (Map.Entry 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; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/pie/WorldPie.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/pie/WorldPie.java index 79e5d0b84..ec5d3b4b2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/pie/WorldPie.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/pie/WorldPie.java @@ -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.WorldTimes; 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.ThemeVal; +import com.djrapitops.plan.utilities.analysis.AnalysisUtils; import com.djrapitops.plan.utilities.comparators.PieSliceComparator; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; public class WorldPie extends AbstractPieChartWithDrilldown { @@ -27,13 +29,9 @@ public class WorldPie extends AbstractPieChartWithDrilldown { private static List turnIntoSlices(WorldTimes worldTimes) { String[] colors = Theme.getValue(ThemeVal.GRAPH_WORLD_PIE).split(", "); - int colLenght = colors.length; + int colLength = colors.length; - // WorldTimes Map (GMTimes.getTotal) - Map playtimePerWorld = worldTimes.getWorldTimes().entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal())); - - Map playtimePerAlias = transformToAliases(playtimePerWorld); + Map playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes); List worlds = new ArrayList<>(playtimePerAlias.keySet()); Collections.sort(worlds); @@ -43,7 +41,7 @@ public class WorldPie extends AbstractPieChartWithDrilldown { for (String alias : worlds) { Long value = playtimePerAlias.getOrDefault(alias, 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++; } @@ -51,46 +49,17 @@ public class WorldPie extends AbstractPieChartWithDrilldown { return slices; } - private static Map transformToAliases(Map playtimePerWorld) { - WorldAliasSettings aliasSettings = new WorldAliasSettings(); - Map aliases = aliasSettings.getAliases(); - return transformToAliases(playtimePerWorld, aliases); - } - - // TODO Move to another class - public static Map transformToAliases(Map playtimePerWorld, Map aliases) { - // TODO Optimization is possible (WorldAliasSettings) - WorldAliasSettings aliasSettings = new WorldAliasSettings(); - - Map playtimePerAlias = new HashMap<>(); - for (Map.Entry 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 public String toHighChartsDrilldown() { StringBuilder drilldownBuilder = new StringBuilder(); int i = 0; - Map gmTimesMap = worldTimes.getWorldTimes(); - if (gmTimesMap.isEmpty()) { + Map gmTimesAliasMap = AnalysisUtils.getGMTimesPerAlias(worldTimes); + if (gmTimesAliasMap.isEmpty()) { return "[]"; } - Map gmTimesAliasMap = transformToGMAliases(gmTimesMap); - - int size = gmTimesMap.size(); + int size = gmTimesAliasMap.size(); + drilldownBuilder.append("["); for (Map.Entry worldAlias : gmTimesAliasMap.entrySet()) { drilldownBuilder.append("{name:'").append(worldAlias.getKey()) @@ -109,35 +78,6 @@ public class WorldPie extends AbstractPieChartWithDrilldown { return drilldownBuilder.toString(); } - private Map transformToGMAliases(Map gmTimesMap) { - // TODO Optimization is possible (WorldAliasSettings) - WorldAliasSettings aliasSettings = new WorldAliasSettings(); - Map aliases = aliasSettings.getAliases(); - - Map gmTimesPerAlias = new HashMap<>(); - - String[] gms = GMTimes.getGMKeyArray(); - - for (Map.Entry 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 world) { Map gmTimes = world.getValue().getTimes(); int smallSize = gmTimes.size(); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/SessionsTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/SessionsTableCreator.java index db7153c48..918ced97f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/SessionsTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/SessionsTableCreator.java @@ -12,12 +12,11 @@ import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.system.settings.WorldAliasSettings; 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.html.Html; -import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; import java.util.*; -import java.util.stream.Collectors; /** * Utility for creating HTML {@code }-element with Sessions inside it. @@ -55,7 +54,6 @@ public class SessionsTableCreator { Set recentLoginsNames = new HashSet<>(); - Map uuidBySessionStart = new HashMap<>(); for (Map.Entry entry : SessionCache.getActiveSessions().entrySet()) { uuidBySessionStart.put(entry.getValue().getSessionStart(), entry.getKey()); @@ -108,18 +106,15 @@ public class SessionsTableCreator { } public static String getLongestWorldPlayed(Session session) { - WorldAliasSettings aliasSettings = new WorldAliasSettings(); - Map aliases = aliasSettings.getAliases(); + Map aliases = WorldAliasSettings.getAliases(); if (session.getSessionEnd() == -1) { return "Current: " + aliases.get(session.getWorldTimes().getCurrentWorld()); } - Map playtimePerWorld = session.getWorldTimes().getWorldTimes().entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal())); - Map playtimePerAlias = WorldPie.transformToAliases(playtimePerWorld, aliases); - WorldTimes worldTimes = session.getWorldTimes(); + Map playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes); long total = worldTimes.getTotal(); + long longest = 0; String theWorld = "-"; for (Map.Entry entry : playtimePerAlias.entrySet()) {