diff --git a/Plan/.idea/sonarIssues.xml b/Plan/.idea/sonarIssues.xml index 06d0c3f39..405f4b5a3 100644 --- a/Plan/.idea/sonarIssues.xml +++ b/Plan/.idea/sonarIssues.xml @@ -228,6 +228,11 @@ + + + + + @@ -243,6 +248,11 @@ + + + + + @@ -253,11 +263,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -293,6 +328,11 @@ + + + + + diff --git a/Plan/pom.xml b/Plan/pom.xml index 6fb3c0819..9c0cc33d0 100644 --- a/Plan/pom.xml +++ b/Plan/pom.xml @@ -105,6 +105,7 @@ . ${basedir}/src/main/resources + *.keystore *.js *.yml *.html diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/WorldPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/WorldPart.java index 0b7469ccf..0b20199ea 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/WorldPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/WorldPart.java @@ -1,11 +1,24 @@ package main.java.com.djrapitops.plan.data.analysis; +import main.java.com.djrapitops.plan.data.time.WorldTimes; import main.java.com.djrapitops.plan.ui.html.graphs.WorldPieCreator; import main.java.com.djrapitops.plan.utilities.FormatUtils; import java.util.HashMap; import java.util.Map; +/** + * Part responsible for all World Playtime related analysis. + *

+ * World times Pie + *

+ * Placeholder values can be retrieved using the get method. + *

+ * Contains following place-holders: worldtotal, worldseries + * + * @author Rsl1122 + * @since 3.6.0 + */ public class WorldPart extends RawData { private final Map worldTimes; @@ -16,7 +29,8 @@ public class WorldPart extends RawData { @Override protected void analyse() { - addValue("worldtotal", FormatUtils.formatTimeAmount(worldTimes.values().stream().mapToLong(Long::longValue).sum())); + WorldTimes t = new WorldTimes(worldTimes); + addValue("worldtotal", FormatUtils.formatTimeAmount(t.getTotal())); addValue("worldseries", WorldPieCreator.createSeriesData(worldTimes)); } @@ -24,5 +38,4 @@ public class WorldPart extends RawData { Long value = worldTimes.computeIfAbsent(worldName, ifNotFound -> 0L); worldTimes.put(worldName, value + playTime); } - } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java index fdea1bb63..75042f01f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java @@ -42,7 +42,7 @@ public class KillHandling { int victimID; try { UUID victimUUID = deadPlayer.getUniqueId(); - victimID = plugin.getDB().getUsersTable().getUserId(victimUUID + ""); + victimID = plugin.getDB().getUsersTable().getUserId(victimUUID); if (victimID == -1) { return; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanWorldChangeListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanWorldChangeListener.java index d3903c9ce..543d0a086 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanWorldChangeListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanWorldChangeListener.java @@ -30,6 +30,6 @@ public class PlanWorldChangeListener implements Listener { } UUID uuid = p.getUniqueId(); long time = MiscUtils.getTime(); - handler.addToPool(new PlaytimeDependentInfo(uuid, InfoType.GM, time, p.getGameMode().name(), p.getWorld().getName())); + handler.addToPool(new PlaytimeDependentInfo(uuid, InfoType.WORLD, time, p.getGameMode().name(), p.getWorld().getName())); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index 1be5a247a..c6a824273 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -344,7 +344,11 @@ public abstract class SQLDB extends Database { Map gmTimes = gmTimesTable.getGMTimes(userId); data.getGmTimes().setTimes(gmTimes); Map worldTimes = worldTimesTable.getWorldTimes(userId); - data.getWorldTimes().setTimes(worldTimes); + WorldTimes worldT = data.getWorldTimes(); + worldT.setTimes(worldTimes); + if (worldT.getLastStateChange() == 0) { + worldT.setLastStateChange(data.getPlayTime()); + } List sessions = sessionsTable.getSessionData(userId); data.addSessions(sessions); @@ -394,11 +398,19 @@ public abstract class SQLDB extends Database { UUID uuid = uData.getUuid(); Integer id = userIds.get(uuid); uData.addIpAddresses(ipList.get(id)); - uData.addNicknames(nicknames.get(id)); + List userNicks = nicknames.get(id); + uData.addNicknames(userNicks); + if (!userNicks.isEmpty()) { + uData.setLastNick(userNicks.get(userNicks.size() - 1)); + } uData.addSessions(sessionData.get(id)); uData.setPlayerKills(playerKills.get(id)); uData.getGmTimes().setTimes(gmTimes.get(id)); - uData.getWorldTimes().setTimes(worldTimes.get(id)); + WorldTimes worldT = uData.getWorldTimes(); + worldT.setTimes(worldTimes.get(id)); + if (worldT.getLastStateChange() == 0) { + worldT.setLastStateChange(uData.getPlayTime()); + } } Benchmark.stop("Database: Get UserData for " + uuidsCol.size()); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java index 7ab6395aa..0bd9c6dbe 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java @@ -20,6 +20,7 @@ import javax.net.ssl.*; import java.io.*; import java.net.InetSocketAddress; import java.net.URI; +import java.nio.file.Paths; import java.security.*; import java.security.cert.Certificate; import java.security.cert.CertificateException; @@ -169,7 +170,7 @@ public class WebServer { private boolean startHttpsServer() throws IOException { String keyStorePath = Settings.WEBSERVER_CERTIFICATE_PATH.toString(); - if (!keyStorePath.contains(":")) { + if (!Paths.get(keyStorePath).isAbsolute()) { keyStorePath = plugin.getDataFolder() + keyStorePath; } char[] storepass = Settings.WEBSERVER_CERTIFICATE_STOREPASS.toString().toCharArray(); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java index d31280849..e74b4ca11 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java @@ -6,11 +6,13 @@ import main.java.com.djrapitops.plan.data.AnalysisData; import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.analysis.GamemodePart; +import main.java.com.djrapitops.plan.data.time.WorldTimes; import main.java.com.djrapitops.plan.database.tables.GMTimesTable; import main.java.com.djrapitops.plan.ui.html.Html; import main.java.com.djrapitops.plan.ui.html.graphs.PlayerActivityGraphCreator; import main.java.com.djrapitops.plan.ui.html.graphs.PunchCardGraphCreator; import main.java.com.djrapitops.plan.ui.html.graphs.SessionLengthDistributionGraphCreator; +import main.java.com.djrapitops.plan.ui.html.graphs.WorldPieCreator; import main.java.com.djrapitops.plan.ui.html.tables.KillsTableCreator; import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils; import main.java.com.djrapitops.plan.utilities.analysis.MathUtils; @@ -106,12 +108,15 @@ public class PlaceholderUtils { Plan plugin = Plan.getInstance(); replaceMap.put("%version%", plugin.getDescription().getVersion()); replaceMap.put("%playersgraphcolor%", Settings.HCOLOR_ACT_ONL.toString()); - Set sessions = new HashSet<>(data.getSessions()); - replaceMap.put("%punchcardseries%", PunchCardGraphCreator.createDataSeries(sessions)); - List lengths = AnalysisUtils.transformSessionDataToLengths(sessions); - replaceMap.put("%sessionlengthseries%", SessionLengthDistributionGraphCreator.createDataSeries(lengths)); + Set sessions = new HashSet<>(data.getSessions()); + List lengths = AnalysisUtils.transformSessionDataToLengths(sessions); + replaceMap.put("%punchcardseries%", PunchCardGraphCreator.createDataSeries(sessions)); + replaceMap.put("%sessionlengthseries%", SessionLengthDistributionGraphCreator.createDataSeries(lengths)); replaceMap.put("%playersonlineseries%", PlayerActivityGraphCreator.buildSeriesDataStringSessions(sessions)); + WorldTimes worldTimes = data.getWorldTimes(); + replaceMap.put("%worldseries%", WorldPieCreator.createSeriesData(worldTimes.getTimes())); + replaceMap.put("%worldtotal%", FormatUtils.formatTimeAmount(worldTimes.getTotal())); String[] colors = new String[]{Settings.HCOLOR_MAIN.toString(), Settings.HCOLOR_MAIN_DARK.toString(), Settings.HCOLOR_SEC.toString(), Settings.HCOLOR_TER.toString(), Settings.HCOLOR_TER_DARK.toString()}; String[] defaultCols = new String[]{"348e0f", "267F00", "5cb239", "89c471", "5da341"}; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/ExportUtility.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/ExportUtility.java index 024ec1f28..0e26f9a31 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/ExportUtility.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/ExportUtility.java @@ -13,6 +13,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Collections; import java.util.List; @@ -34,7 +35,7 @@ public class ExportUtility { */ public static File getFolder() { String path = Settings.ANALYSIS_EXPORT_PATH.toString(); - if (path.contains(":")) { + if (Paths.get(path).isAbsolute()) { File folder = new File(path); if (folder.exists() && folder.isDirectory()) { diff --git a/Plan/src/main/resources/Cert.keystore b/Plan/src/main/resources/Cert.keystore new file mode 100644 index 000000000..4ddf94995 Binary files /dev/null and b/Plan/src/main/resources/Cert.keystore differ diff --git a/Plan/src/main/resources/player.html b/Plan/src/main/resources/player.html index bc997fe36..f111fd04a 100644 --- a/Plan/src/main/resources/player.html +++ b/Plan/src/main/resources/player.html @@ -378,6 +378,9 @@ UUID: %uuid%
Has Connected from ips: %ips%

+
+
+
@@ -409,7 +412,7 @@
Last 10 Kills
+ class="header-text"> Last 25 Kills
@@ -487,6 +490,33 @@ +