mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-04 22:41:41 +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.
|
||||
*/
|
||||
@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<Session> 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<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)
|
||||
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<Session> 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<Session> cachedSession = SessionCache.getCachedSession(uuid);
|
||||
cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time));
|
||||
}
|
||||
}
|
||||
|
@ -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<String, String> getAliases() {
|
||||
public static Map<String, String> getAliases() {
|
||||
ConfigNode aliasSect = getAliasSection();
|
||||
|
||||
Map<String, String> 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);
|
||||
}
|
||||
}
|
@ -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<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.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<PieSlice> turnIntoSlices(WorldTimes worldTimes) {
|
||||
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> playtimePerWorld = worldTimes.getWorldTimes().entrySet().stream()
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal()));
|
||||
|
||||
Map<String, Long> playtimePerAlias = transformToAliases(playtimePerWorld);
|
||||
Map<String, Long> playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes);
|
||||
|
||||
List<String> 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<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
|
||||
public String toHighChartsDrilldown() {
|
||||
StringBuilder drilldownBuilder = new StringBuilder();
|
||||
int i = 0;
|
||||
|
||||
Map<String, GMTimes> gmTimesMap = worldTimes.getWorldTimes();
|
||||
if (gmTimesMap.isEmpty()) {
|
||||
Map<String, GMTimes> gmTimesAliasMap = AnalysisUtils.getGMTimesPerAlias(worldTimes);
|
||||
if (gmTimesAliasMap.isEmpty()) {
|
||||
return "[]";
|
||||
}
|
||||
Map<String, GMTimes> gmTimesAliasMap = transformToGMAliases(gmTimesMap);
|
||||
int size = gmTimesAliasMap.size();
|
||||
|
||||
int size = gmTimesMap.size();
|
||||
drilldownBuilder.append("[");
|
||||
for (Map.Entry<String, GMTimes> worldAlias : gmTimesAliasMap.entrySet()) {
|
||||
drilldownBuilder.append("{name:'").append(worldAlias.getKey())
|
||||
@ -109,35 +78,6 @@ public class WorldPie extends AbstractPieChartWithDrilldown {
|
||||
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) {
|
||||
Map<String, Long> gmTimes = world.getValue().getTimes();
|
||||
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.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 <table>}-element with Sessions inside it.
|
||||
@ -55,7 +54,6 @@ public class SessionsTableCreator {
|
||||
Set<String> recentLoginsNames = new HashSet<>();
|
||||
|
||||
|
||||
|
||||
Map<Long, UUID> uuidBySessionStart = new HashMap<>();
|
||||
for (Map.Entry<UUID, Session> 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<String, String> aliases = aliasSettings.getAliases();
|
||||
Map<String, String> aliases = WorldAliasSettings.getAliases();
|
||||
if (session.getSessionEnd() == -1) {
|
||||
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();
|
||||
Map<String, Long> playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes);
|
||||
long total = worldTimes.getTotal();
|
||||
|
||||
long longest = 0;
|
||||
String theWorld = "-";
|
||||
for (Map.Entry<String, Long> entry : playtimePerAlias.entrySet()) {
|
||||
|
Loading…
Reference in New Issue
Block a user