mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-10 13:49:17 +01:00
[2.9.0-DEV] Bugfixes
Fix #61 #58 #56 #57 #59 - Fixed GamemodeTimesHandler giving NPE if a gamemode is null. - Fixed ArrayOutOfBounds if sessions is empty. - Fixed randomly caused NPE when transforming sessions to length values (also improved it) Demographics tab not yet finished.
This commit is contained in:
parent
388f669fb1
commit
9e6c342f89
@ -225,6 +225,9 @@ public class UserData {
|
|||||||
* @param time
|
* @param time
|
||||||
*/
|
*/
|
||||||
public void setGMTime(GameMode gm, long time) {
|
public void setGMTime(GameMode gm, long time) {
|
||||||
|
if (gmTimes == null) {
|
||||||
|
gmTimes = new HashMap<>();
|
||||||
|
}
|
||||||
gmTimes.put(gm, time);
|
gmTimes.put(gm, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ public class GamemodeTimesHandler {
|
|||||||
* @param data UserData matching the Player
|
* @param data UserData matching the Player
|
||||||
*/
|
*/
|
||||||
public void handleLogin(GameMode gm, UserData data) {
|
public void handleLogin(GameMode gm, UserData data) {
|
||||||
data.setLastGamemode(gm);
|
handleChangeEvent(gm, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,15 +45,19 @@ public class GamemodeTimesHandler {
|
|||||||
* @param data UserData matching the Player
|
* @param data UserData matching the Player
|
||||||
*/
|
*/
|
||||||
public void handleChangeEvent(GameMode newGM, UserData data) {
|
public void handleChangeEvent(GameMode newGM, UserData data) {
|
||||||
|
if (newGM == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (data.getLastGamemode() == null) {
|
||||||
|
data.setLastGamemode(GameMode.SURVIVAL);
|
||||||
|
}
|
||||||
|
GameMode oldGM = data.getLastGamemode();
|
||||||
HashMap<GameMode, Long> times = data.getGmTimes();
|
HashMap<GameMode, Long> times = data.getGmTimes();
|
||||||
|
Long currentGMTime = times.get(oldGM);
|
||||||
handler.getActivityHandler().saveToCache(data);
|
handler.getActivityHandler().saveToCache(data);
|
||||||
|
|
||||||
long lastSwap = data.getLastGmSwapTime();
|
long lastSwap = data.getLastGmSwapTime();
|
||||||
long playTime = data.getPlayTime();
|
long playTime = data.getPlayTime();
|
||||||
GameMode oldGM = data.getLastGamemode();
|
data.setGMTime(oldGM, currentGMTime + (playTime - lastSwap));
|
||||||
if (oldGM != null) {
|
|
||||||
data.setGMTime(oldGM, times.get(oldGM) + (playTime - lastSwap));
|
|
||||||
}
|
|
||||||
data.setLastGamemode(newGM);
|
data.setLastGamemode(newGM);
|
||||||
data.setLastGmSwapTime(playTime);
|
data.setLastGmSwapTime(playTime);
|
||||||
}
|
}
|
||||||
@ -65,13 +69,14 @@ public class GamemodeTimesHandler {
|
|||||||
* @param data UserData matching the Player
|
* @param data UserData matching the Player
|
||||||
*/
|
*/
|
||||||
public void saveToCache(GameMode currentGM, UserData data) {
|
public void saveToCache(GameMode currentGM, UserData data) {
|
||||||
|
if (currentGM == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
HashMap<GameMode, Long> times = data.getGmTimes();
|
HashMap<GameMode, Long> times = data.getGmTimes();
|
||||||
handler.getActivityHandler().saveToCache(data);
|
handler.getActivityHandler().saveToCache(data);
|
||||||
|
|
||||||
long lastSwap = data.getLastGmSwapTime();
|
long lastSwap = data.getLastGmSwapTime();
|
||||||
long playtime = data.getPlayTime();
|
long playtime = data.getPlayTime();
|
||||||
data.setGMTime(currentGM, times.get(currentGM) + (playtime - lastSwap));
|
data.setGMTime(currentGM, times.get(currentGM) + (playtime - lastSwap));
|
||||||
|
|
||||||
data.setLastGmSwapTime(playtime);
|
data.setLastGmSwapTime(playtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,10 @@ public class Analysis {
|
|||||||
sorted.addTotalKills(uData.getPlayerKills().size());
|
sorted.addTotalKills(uData.getPlayerKills().size());
|
||||||
sorted.addTotalMobKills(uData.getMobKills());
|
sorted.addTotalMobKills(uData.getMobKills());
|
||||||
sorted.addTotalDeaths(uData.getDeaths());
|
sorted.addTotalDeaths(uData.getDeaths());
|
||||||
sorted.getSessiondata().addAll(uData.getSessions());
|
List<SessionData> sessions = uData.getSessions();
|
||||||
|
if (!sessions.isEmpty()) {
|
||||||
|
sorted.getSessiondata().addAll(sessions);
|
||||||
|
}
|
||||||
sorted.getRegistered().add(uData.getRegistered());
|
sorted.getRegistered().add(uData.getRegistered());
|
||||||
sorted.addGeoloc(uData.getDemData().getGeoLocation());
|
sorted.addGeoloc(uData.getDemData().getGeoLocation());
|
||||||
uData.stopAccessing();
|
uData.stopAccessing();
|
||||||
|
@ -5,6 +5,7 @@ import java.util.Collection;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import main.java.com.djrapitops.plan.Settings;
|
import main.java.com.djrapitops.plan.Settings;
|
||||||
import main.java.com.djrapitops.plan.data.SessionData;
|
import main.java.com.djrapitops.plan.data.SessionData;
|
||||||
import main.java.com.djrapitops.plan.data.UserData;
|
import main.java.com.djrapitops.plan.data.UserData;
|
||||||
@ -62,11 +63,11 @@ public class AnalysisUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<Long> transformSessionDataToLengths(Collection<SessionData> data) {
|
public static List<Long> transformSessionDataToLengths(Collection<SessionData> data) {
|
||||||
List<SessionData> d = new ArrayList<>(data);
|
List<Long> list = data.stream()
|
||||||
List<Long> list = new ArrayList<>();
|
.filter(session -> session != null)
|
||||||
d.stream().forEach((sData) -> {
|
.filter(session -> session.getSessionEnd() > session.getSessionStart())
|
||||||
list.add(sData.getSessionEnd()-sData.getSessionStart());
|
.map(session -> session.getSessionEnd() - session.getSessionStart())
|
||||||
});
|
.collect(Collectors.toList());
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user