diff --git a/.gitignore b/.gitignore index f5eafe026..fa2c58164 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,7 @@ /Plan/target/ /Plan/temporaryTestFolder/ /Debugger/nbproject/private/ -/PlanDebugger/ \ No newline at end of file +/PlanDebugger/ +/ProjectHelper/nbproject/private/ +/ProjectHelper/nbproject/ +/ProjectHelper/target/ \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/Log.java b/Plan/src/main/java/com/djrapitops/plan/Log.java index 0202572c3..524490e76 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Log.java +++ b/Plan/src/main/java/com/djrapitops/plan/Log.java @@ -5,8 +5,8 @@ import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; -import java.util.Date; import main.java.com.djrapitops.plan.utilities.FormatUtils; +import main.java.com.djrapitops.plan.utilities.MiscUtils; /** * This class manages the messages going to the Bukkit's Logger. @@ -99,7 +99,7 @@ public class Log { } FileWriter fw = new FileWriter(log, true); try (PrintWriter pw = new PrintWriter(fw)) { - String timestamp = FormatUtils.formatTimeStamp(new Date().getTime() + ""); + String timestamp = FormatUtils.formatTimeStamp(MiscUtils.getTime()); pw.println("[" + timestamp + "] " + message); pw.flush(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java index 07b1c5937..897f81c00 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Plan.java +++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java @@ -26,7 +26,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; -import java.util.Date; import java.util.HashSet; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -209,7 +208,7 @@ public class Plan extends JavaPlugin { public void run() { if (!analysisCache.isCached()) { analysisCache.updateCache(); - } else if (new Date().getTime() - analysisCache.getData().getRefreshDate() > 60000) { + } else if (MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > 60000) { analysisCache.updateCache(); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java index 8ebdfd453..fe22cea15 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.command.commands; -import java.util.Date; import main.java.com.djrapitops.plan.Permissions; import main.java.com.djrapitops.plan.Phrase; import main.java.com.djrapitops.plan.Plan; @@ -10,6 +9,7 @@ import main.java.com.djrapitops.plan.command.SubCommand; import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler; import main.java.com.djrapitops.plan.ui.TextUI; import main.java.com.djrapitops.plan.utilities.HtmlUtils; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -56,7 +56,7 @@ public class AnalyzeCommand extends SubCommand { plugin.getServer().getScheduler().cancelTask(bootAnID); } analysisCache.updateCache(); - } else if (new Date().getTime() - analysisCache.getData().getRefreshDate() > 60000) { + } else if (MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > 60000) { analysisCache.updateCache(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickAnalyzeCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickAnalyzeCommand.java index c54ffb978..7a89c9a59 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickAnalyzeCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickAnalyzeCommand.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.command.commands; -import java.util.Date; import main.java.com.djrapitops.plan.Permissions; import main.java.com.djrapitops.plan.Phrase; import main.java.com.djrapitops.plan.Plan; @@ -8,6 +7,7 @@ import main.java.com.djrapitops.plan.command.CommandType; import main.java.com.djrapitops.plan.command.SubCommand; import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler; import main.java.com.djrapitops.plan.ui.TextUI; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.scheduler.BukkitRunnable; @@ -45,7 +45,7 @@ public class QuickAnalyzeCommand extends SubCommand { plugin.getServer().getScheduler().cancelTask(bootAnID); } analysisCache.updateCache(); - } else if (new Date().getTime() - analysisCache.getData().getRefreshDate() > 60000) { + } else if (MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > 60000) { analysisCache.updateCache(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java index c5721ac25..a6dc4fcdd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/PluginData.java @@ -148,7 +148,7 @@ public abstract class PluginData { * @see AnalysisType */ public final String parseContainer(String modifier, String contents) { - return "
" + Html.FONT_AWESOME_ICON.parse(icon) + modifier + prefix + contents + suffix + "
"; + return "
" + Html.FONT_AWESOME_ICON.parse(icon) + " " + modifier + prefix + contents + suffix + "
"; } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/factions/FactionsMaxPower.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/factions/FactionsMaxPower.java index 1abe6a6f5..a85107a5a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/factions/FactionsMaxPower.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/factions/FactionsMaxPower.java @@ -25,6 +25,7 @@ public class FactionsMaxPower extends PluginData { public FactionsMaxPower() { super("Factions", "maxpower"); super.setPrefix("Max Power: "); + super.setIcon("bolt"); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeRefer.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeRefer.java index 6b58fdb37..8dfd8bcb9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeRefer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeRefer.java @@ -25,7 +25,7 @@ public class OntimeRefer extends PluginData { * Class Constructor, sets the parameters of the PluginData object. */ public OntimeRefer() { - super("OnTime", "refer", AnalysisType.INT_TOTAL, AnalysisType.INT_AVG); + super("OnTime", "refer", AnalysisType.LONG_TOTAL, AnalysisType.LONG_AVG); super.setAnalysisOnly(false); super.setIcon("commenting-o"); super.setPrefix("Referrals All Time: "); @@ -49,12 +49,12 @@ public class OntimeRefer extends PluginData { public Serializable getValue(UUID uuid) { OfflinePlayer offlinePlayer = getOfflinePlayer(uuid); if (!offlinePlayer.hasPlayedBefore()) { - return 0; + return -1L; } String name = offlinePlayer.getName(); long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.TOTALREFER); if (referTotal == -1) { - return 0; + return -1L; } return referTotal; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferMonth.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferMonth.java index 90b199d94..d525f1310 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferMonth.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferMonth.java @@ -25,7 +25,7 @@ public class OntimeReferMonth extends PluginData { * Class Constructor, sets the parameters of the PluginData object. */ public OntimeReferMonth() { - super("OnTime", "refer_30d", AnalysisType.INT_TOTAL); + super("OnTime", "refer_30d", AnalysisType.LONG_TOTAL); super.setAnalysisOnly(false); super.setIcon("commenting-o"); super.setPrefix("Referrals Last 30d: "); @@ -49,12 +49,12 @@ public class OntimeReferMonth extends PluginData { public Serializable getValue(UUID uuid) { OfflinePlayer offlinePlayer = getOfflinePlayer(uuid); if (!offlinePlayer.hasPlayedBefore()) { - return 0; + return -1L; } String name = offlinePlayer.getName(); long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.MONTHREFER); if (referTotal == -1) { - return 0; + return -1L; } return referTotal; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferWeek.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferWeek.java index 6b33b2a97..402f21218 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferWeek.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeReferWeek.java @@ -25,7 +25,7 @@ public class OntimeReferWeek extends PluginData { * Class Constructor, sets the parameters of the PluginData object. */ public OntimeReferWeek() { - super("OnTime", "refer_7d", AnalysisType.INT_TOTAL); + super("OnTime", "refer_7d", AnalysisType.LONG_TOTAL); super.setAnalysisOnly(false); super.setIcon("commenting-o"); super.setPrefix("Referrals Last 7d: "); @@ -49,12 +49,12 @@ public class OntimeReferWeek extends PluginData { public Serializable getValue(UUID uuid) { OfflinePlayer offlinePlayer = getOfflinePlayer(uuid); if (!offlinePlayer.hasPlayedBefore()) { - return 0; + return -1L; } String name = offlinePlayer.getName(); long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.WEEKREFER); if (referTotal == -1) { - return 0; + return -1L; } return referTotal; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotes.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotes.java index 217b3c47a..cd838d215 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotes.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotes.java @@ -25,7 +25,7 @@ public class OntimeVotes extends PluginData { * Class Constructor, sets the parameters of the PluginData object. */ public OntimeVotes() { - super("OnTime", "votes", AnalysisType.INT_TOTAL, AnalysisType.INT_AVG); + super("OnTime", "votes", AnalysisType.LONG_TOTAL, AnalysisType.LONG_AVG); super.setAnalysisOnly(false); super.setIcon("check"); super.setPrefix("Votes All Time: "); @@ -49,12 +49,12 @@ public class OntimeVotes extends PluginData { public Serializable getValue(UUID uuid) { OfflinePlayer offlinePlayer = getOfflinePlayer(uuid); if (!offlinePlayer.hasPlayedBefore()) { - return 0; + return -1L; } String name = offlinePlayer.getName(); long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.TOTALVOTE); if (votesTotal == -1) { - return 0; + return -1L; } return votesTotal; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesMonth.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesMonth.java index 8f5d43761..581e9641e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesMonth.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesMonth.java @@ -25,7 +25,7 @@ public class OntimeVotesMonth extends PluginData { * Class Constructor, sets the parameters of the PluginData object. */ public OntimeVotesMonth() { - super("OnTime", "votes_30d", AnalysisType.INT_TOTAL); + super("OnTime", "votes_30d", AnalysisType.LONG_TOTAL); super.setAnalysisOnly(false); super.setIcon("check"); super.setPrefix("Votes Last 30d: "); @@ -49,12 +49,12 @@ public class OntimeVotesMonth extends PluginData { public Serializable getValue(UUID uuid) { OfflinePlayer offlinePlayer = getOfflinePlayer(uuid); if (!offlinePlayer.hasPlayedBefore()) { - return 0; + return -1L; } String name = offlinePlayer.getName(); long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.MONTHVOTE); if (votesTotal == -1) { - return 0; + return -1L; } return votesTotal; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesWeek.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesWeek.java index fad9ba38b..c0a6b0541 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesWeek.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/ontime/OntimeVotesWeek.java @@ -25,7 +25,7 @@ public class OntimeVotesWeek extends PluginData { * Class Constructor, sets the parameters of the PluginData object. */ public OntimeVotesWeek() { - super("OnTime", "votes_7d", AnalysisType.INT_TOTAL); + super("OnTime", "votes_7d", AnalysisType.LONG_TOTAL); super.setAnalysisOnly(false); super.setIcon("check"); super.setPrefix("Votes Last 7d: "); @@ -49,12 +49,12 @@ public class OntimeVotesWeek extends PluginData { public Serializable getValue(UUID uuid) { OfflinePlayer offlinePlayer = getOfflinePlayer(uuid); if (!offlinePlayer.hasPlayedBefore()) { - return 0; + return -1L; } String name = offlinePlayer.getName(); long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.WEEKVOTE); if (votesTotal == -1) { - return 0; + return -1L; } return votesTotal; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java index 9aaba93a6..10528c5a1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java @@ -4,7 +4,6 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,6 +21,7 @@ import main.java.com.djrapitops.plan.data.handling.info.HandlingInfo; import main.java.com.djrapitops.plan.data.handling.info.LogoutInfo; import main.java.com.djrapitops.plan.data.handling.info.ReloadInfo; import main.java.com.djrapitops.plan.database.Database; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.NewPlayerCreator; import main.java.com.djrapitops.plan.utilities.comparators.HandlingInfoTimeComparator; import org.bukkit.Bukkit; @@ -245,7 +245,7 @@ public class DataCacheHandler extends LocationCache { * If processTask has unprocessed information, it will be processed. */ public void saveCacheOnDisable() { - long time = new Date().getTime(); + long time = MiscUtils.getTime(); Log.debug("SaveCacheOnDisable! " + time); saveTask.stop(); getTask.stop(); @@ -339,7 +339,7 @@ public class DataCacheHandler extends LocationCache { } private void saveHandlerDataToCache(Player player) { - long time = new Date().getTime(); + long time = MiscUtils.getTime(); UUID uuid = player.getUniqueId(); addToPool(new ReloadInfo(uuid, time, player.getAddress().getAddress(), player.isBanned(), player.getDisplayName(), player.getGameMode())); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java index cef050429..6f30cf298 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java @@ -1,12 +1,12 @@ package main.java.com.djrapitops.plan.data.cache; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.data.UserData; +import main.java.com.djrapitops.plan.utilities.MiscUtils; /** * This class is used to store active sessions of players in memory. @@ -31,7 +31,7 @@ public class SessionCache { * @param uuid UUID of the player. */ public void startSession(UUID uuid) { - long now = new Date().getTime(); + long now = MiscUtils.getTime(); Log.debug(uuid + ": Starting a session: " + now); SessionData session = new SessionData(now); activeSessions.put(uuid, session); @@ -45,7 +45,7 @@ public class SessionCache { public void endSession(UUID uuid) { SessionData currentSession = activeSessions.get(uuid); if (currentSession != null) { - long now = new Date().getTime(); + long now = MiscUtils.getTime(); Log.debug(uuid + ": Ending a session: " + now); currentSession.endSession(now); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanDeathEventListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanDeathEventListener.java index bacadf7be..203cd1129 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanDeathEventListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanDeathEventListener.java @@ -1,10 +1,10 @@ package main.java.com.djrapitops.plan.data.listeners; -import java.util.Date; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.cache.DataCacheHandler; import main.java.com.djrapitops.plan.data.handling.info.DeathInfo; import main.java.com.djrapitops.plan.data.handling.info.KillInfo; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -40,7 +40,7 @@ public class PlanDeathEventListener implements Listener { */ @EventHandler(priority = EventPriority.MONITOR) public void onDeath(EntityDeathEvent event) { - long time = new Date().getTime(); + long time = MiscUtils.getTime(); LivingEntity dead = event.getEntity(); Player killer = dead.getKiller(); boolean killerIsPlayer = killer != null; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanGamemodeChangeListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanGamemodeChangeListener.java index a80fad15b..f0a286aed 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanGamemodeChangeListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanGamemodeChangeListener.java @@ -1,9 +1,9 @@ package main.java.com.djrapitops.plan.data.listeners; -import java.util.Date; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.cache.DataCacheHandler; import main.java.com.djrapitops.plan.data.handling.info.GamemodeInfo; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -42,6 +42,6 @@ public class PlanGamemodeChangeListener implements Listener { return; } Player p = event.getPlayer(); - handler.addToPool(new GamemodeInfo(p.getUniqueId(), new Date().getTime(), event.getNewGameMode())); + handler.addToPool(new GamemodeInfo(p.getUniqueId(), MiscUtils.getTime(), event.getNewGameMode())); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java index 66cb41cd2..6258902e2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.data.listeners; -import java.util.Date; import java.util.UUID; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; @@ -9,6 +8,7 @@ import main.java.com.djrapitops.plan.data.cache.DataCacheHandler; import main.java.com.djrapitops.plan.data.handling.info.KickInfo; import main.java.com.djrapitops.plan.data.handling.info.LoginInfo; import main.java.com.djrapitops.plan.data.handling.info.LogoutInfo; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.NewPlayerCreator; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -60,7 +60,7 @@ public class PlanPlayerListener implements Listener { BukkitTask asyncNewPlayerCheckTask = new BukkitRunnable() { @Override public void run() { - LoginInfo loginInfo = new LoginInfo(uuid, new Date().getTime(), player.getAddress().getAddress(), player.isBanned(), player.getDisplayName(), player.getGameMode(), 1); + LoginInfo loginInfo = new LoginInfo(uuid, MiscUtils.getTime(), player.getAddress().getAddress(), player.isBanned(), player.getDisplayName(), player.getGameMode(), 1); boolean isNewPlayer = !plugin.getDB().wasSeenBefore(uuid); if (isNewPlayer) { UserData newUserData = NewPlayerCreator.createNewPlayer(player); @@ -90,7 +90,7 @@ public class PlanPlayerListener implements Listener { UUID uuid = player.getUniqueId(); handler.endSession(uuid); Log.debug(uuid + ": PlayerQuitEvent"); - handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid))); + handler.addToPool(new LogoutInfo(uuid, MiscUtils.getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid))); handler.saveCachedData(uuid); Log.debug(uuid + ": PlayerQuitEvent_END"); } @@ -110,7 +110,7 @@ public class PlanPlayerListener implements Listener { Player player = event.getPlayer(); UUID uuid = player.getUniqueId(); handler.endSession(uuid); - handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid))); + handler.addToPool(new LogoutInfo(uuid, MiscUtils.getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid))); handler.addToPool(new KickInfo(uuid)); handler.saveCachedData(uuid); } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/TextUI.java b/Plan/src/main/java/com/djrapitops/plan/ui/TextUI.java index 572d6c90c..81ccaf774 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/TextUI.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/TextUI.java @@ -9,6 +9,8 @@ import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler; import main.java.com.djrapitops.plan.data.cache.InspectCacheHandler; import main.java.com.djrapitops.plan.utilities.AnalysisUtils; import main.java.com.djrapitops.plan.utilities.FormatUtils; +import main.java.com.djrapitops.plan.utilities.MathUtils; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.ChatColor; /** @@ -24,6 +26,7 @@ public class TextUI { */ public static String[] getInspectMessages(UUID uuid) { InspectCacheHandler inspectCache = Plan.getInstance().getInspectCache(); + long now = MiscUtils.getTime(); if (!inspectCache.isCached(uuid)) { return new String[]{"Error has occurred, please retry."}; } @@ -31,17 +34,17 @@ public class TextUI { ChatColor main = Phrase.COLOR_MAIN.color(); ChatColor sec = Phrase.COLOR_SEC.color(); ChatColor ter = Phrase.COLOR_TER.color(); - boolean active = AnalysisUtils.isActive(d.getLastPlayed(), d.getPlayTime(), d.getLoginTimes()); + boolean active = AnalysisUtils.isActive(now, d.getLastPlayed(), d.getPlayTime(), d.getLoginTimes()); boolean banned = d.isBanned(); boolean online = d.isOnline(); String ball = sec + " " + Phrase.BALL + main; return new String[]{ sec + " " + Phrase.BALL + (banned ? ChatColor.DARK_RED + " Banned" : ter + (active ? " Active" : " Inactive")) + (online ? ChatColor.GREEN + " Online" : ChatColor.RED + " Offline"), - ball + " Registered: " + sec + FormatUtils.formatTimeStamp(d.getRegistered() + ""), - ball + " Last seen: " + sec + FormatUtils.formatTimeStamp(d.getLastPlayed() + ""), - ball + " Playtime: " + sec + FormatUtils.formatTimeAmount(d.getPlayTime() + ""), + ball + " Registered: " + sec + FormatUtils.formatTimeStamp(d.getRegistered()), + ball + " Last seen: " + sec + FormatUtils.formatTimeStamp(d.getLastPlayed()), + ball + " Playtime: " + sec + FormatUtils.formatTimeAmount(d.getPlayTime()), ball + " Login times: " + sec + d.getLoginTimes(), - ball + " Average session length: " + sec + FormatUtils.formatTimeAmount(AnalysisUtils.average(AnalysisUtils.transformSessionDataToLengths(d.getSessions())) + ""), + ball + " Average session length: " + sec + FormatUtils.formatTimeAmount(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(d.getSessions()))), ball + " Kills: " + sec + d.getPlayerKills().size() + main + " Mobs: " + sec + d.getMobKills() + main + " Deaths: " + sec + d.getDeaths(), ball + " Geolocation: " + sec + d.getDemData().getGeoLocation() }; @@ -66,8 +69,8 @@ public class TextUI { ball + " Active: " + sec + d.getActive() + main + " Inactive: " + sec + d.getInactive() + main + " Single join: " + sec + d.getJoinleaver() + main + " Banned: " + sec + d.getBanned(), ball + " New Players 24h: " + sec + d.getNewPlayersDay() + main + " 7d: " + sec + d.getNewPlayersWeek() + main + " 30d: " + sec + d.getNewPlayersMonth(), "", - ball + " Total Playtime: " + sec + FormatUtils.formatTimeAmount(d.getTotalPlayTime() + "") + main + " Player Avg: " + sec + FormatUtils.formatTimeAmount(d.getAveragePlayTime() + ""), - ball + " Average Session Length: " + sec + FormatUtils.formatTimeAmount(d.getSessionAverage() + ""), + ball + " Total Playtime: " + sec + FormatUtils.formatTimeAmount(d.getTotalPlayTime()) + main + " Player Avg: " + sec + FormatUtils.formatTimeAmount(d.getAveragePlayTime()), + ball + " Average Session Length: " + sec + FormatUtils.formatTimeAmount(d.getSessionAverage()), ball + " Total Logintimes: " + sec + d.getTotalLoginTimes(), ball + " Kills: " + sec + d.getTotalPlayerKills() + main + " Mobs: " + sec + d.getTotalMobKills() + main + " Deaths: " + sec + d.getTotalDeaths() }; diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java index 16ae2e769..bd69f94fa 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java @@ -47,7 +47,7 @@ public class PlayerActivityGraphCreator { if (lastSavedPValue != lastPValue || i - lastSaveI > (scale / (long) 75)) { lastSaveI = i; - labels.add("\"" + FormatUtils.formatTimeStamp(i + "") + "\""); + labels.add("\"" + FormatUtils.formatTimeStamp(i) + "\""); lastSavedPValue = lastPValue; playersOnline.add(lastPValue); } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableKillsTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableKillsTableCreator.java index f43db0594..b3f004c0a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableKillsTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableKillsTableCreator.java @@ -33,7 +33,7 @@ public class SortableKillsTableCreator { OfflinePlayer victim = getOfflinePlayer(kill.getVictim()); String name = victim.getName(); html += Html.TABLELINE_3_CUSTOMKEY_1.parse( - date + "", FormatUtils.formatTimeStamp(date + ""), + date + "", FormatUtils.formatTimeStamp(date), Html.LINK.parse(HtmlUtils.getInspectUrl(name), name), kill.getWeapon() ); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortablePlayersTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortablePlayersTableCreator.java index 322f9f2d0..3780b4e66 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortablePlayersTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortablePlayersTableCreator.java @@ -6,6 +6,7 @@ import main.java.com.djrapitops.plan.ui.Html; import main.java.com.djrapitops.plan.utilities.AnalysisUtils; import main.java.com.djrapitops.plan.utilities.FormatUtils; import main.java.com.djrapitops.plan.utilities.HtmlUtils; +import main.java.com.djrapitops.plan.utilities.MiscUtils; /** * @@ -20,17 +21,18 @@ public class SortablePlayersTableCreator { */ public static String createSortablePlayersTable(Collection data) { String html = ""; + long now = MiscUtils.getTime(); for (UserData uData : data) { try { String bORaORi = uData.isBanned() ? Html.GRAPH_BANNED.parse() - : (AnalysisUtils.isActive(uData.getLastPlayed(), uData.getPlayTime(), uData.getLoginTimes()) + : (AnalysisUtils.isActive(now, uData.getLastPlayed(), uData.getPlayTime(), uData.getLoginTimes()) ? Html.GRAPH_ACTIVE.parse() : Html.GRAPH_INACTIVE.parse()); html += Html.TABLELINE_PLAYERS.parse("\"" " + Html.LINK.parse(HtmlUtils.getInspectUrl(uData.getName()), uData.getName()), bORaORi, - uData.getPlayTime() + "", FormatUtils.formatTimeAmount(uData.getPlayTime() + ""), + uData.getPlayTime() + "", FormatUtils.formatTimeAmount(uData.getPlayTime()), uData.getLoginTimes() + "", - uData.getRegistered() + "", FormatUtils.formatTimeStamp(uData.getRegistered() + ""), - uData.getLastPlayed() + "", FormatUtils.formatTimeStamp(uData.getLastPlayed() + ""), + uData.getRegistered() + "", FormatUtils.formatTimeStamp(uData.getRegistered()), + uData.getLastPlayed() + "", FormatUtils.formatTimeStamp(uData.getLastPlayed()), uData.getDemData().getGeoLocation() ); } catch (NullPointerException e) { diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableSessionTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableSessionTableCreator.java index 744920e92..8ba828001 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableSessionTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/tables/SortableSessionTableCreator.java @@ -37,9 +37,9 @@ public class SortableSessionTableCreator { continue; } html += Html.TABLELINE_3_CUSTOMKEY.parse( - start + "", FormatUtils.formatTimeStamp(start + ""), - end + "", FormatUtils.formatTimeStamp(end + ""), - length + "", FormatUtils.formatTimeAmount(length + "") + start + "", FormatUtils.formatTimeStamp(start), + end + "", FormatUtils.formatTimeStamp(end), + length + "", FormatUtils.formatTimeAmount(length) ); i++; } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java b/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java index 49d9df3bf..b1c77448b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java @@ -28,6 +28,8 @@ import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.ui.Html; import main.java.com.djrapitops.plan.ui.RecentPlayersButtonsCreator; import main.java.com.djrapitops.plan.ui.graphs.PlayerActivityGraphCreator; +import main.java.com.djrapitops.plan.ui.tables.SortableCommandUseTableCreator; +import main.java.com.djrapitops.plan.ui.tables.SortablePlayersTableCreator; import org.bukkit.GameMode; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; @@ -147,11 +149,13 @@ public class Analysis { */ public boolean analyzeData(List rawData, List uuids, AnalysisCacheHandler analysisCache) { // Create empty Dataset + long now = MiscUtils.getTime(); final RawAnalysisData sorted = new RawAnalysisData(); sorted.setCommandUse(plugin.getHandler().getCommandUse()); log(Phrase.ANALYSIS_BEGIN_ANALYSIS + ""); AnalysisData analysisData = new AnalysisData(); - analysisData.setSortablePlayersTable(AnalysisUtils.createSortablePlayersTable(rawData)); + String playersTable = SortablePlayersTableCreator.createSortablePlayersTable(rawData); + analysisData.setSortablePlayersTable(playersTable); sorted.fillGeolocations(); // Fill Dataset with userdata. rawData.stream().forEach((uData) -> { @@ -201,7 +205,7 @@ public class Analysis { sorted.addTotalBanned(1); } else if (uData.getLoginTimes() == 1) { sorted.addJoinleaver(1); - } else if (AnalysisUtils.isActive(uData.getLastPlayed(), playTime, uData.getLoginTimes())) { + } else if (AnalysisUtils.isActive(now, uData.getLastPlayed(), playTime, uData.getLoginTimes())) { sorted.addActive(1); sorted.getPlaytimes().put(html, playTime); } else { @@ -246,7 +250,7 @@ public class Analysis { long totalPlaytime = sorted.getTotalPlaytime(); analysisData.setTotalPlayTime(totalPlaytime); analysisData.setAveragePlayTime(totalPlaytime / rawData.size()); - analysisData.setSessionAverage(AnalysisUtils.average(AnalysisUtils.transformSessionDataToLengths(sorted.getSessiondata()))); + analysisData.setSessionAverage(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(sorted.getSessiondata()))); analysisData.setTotalLoginTimes(sorted.getTotalLoginTimes()); createActivityVisalization(uuids.size(), sorted.getTotalBanned(), sorted.getActive(), sorted.getInactive(), sorted.getJoinleaver(), analysisData); analysisData.setOps(sorted.getOps()); @@ -256,7 +260,7 @@ public class Analysis { analysisData.setTotaldeaths(sorted.getTotalDeaths()); analysisData.setTotalkills(sorted.getTotalKills()); analysisData.setTotalmobkills(sorted.getTotalMobKills()); - analysisData.setRefreshDate(new Date().getTime()); + analysisData.setRefreshDate(now); analysisData.setGenderData(sorted.getGenders()); analysisData.setAdditionalDataReplaceMap(analyzeAdditionalPluginData(uuids)); analysisCache.cache(analysisData); @@ -269,7 +273,8 @@ public class Analysis { private void createCommandUseTable(final RawAnalysisData raw, AnalysisData data) { Map commandUse = raw.getCommandUse(); if (!commandUse.isEmpty()) { - data.setCommandUseTableHtml(AnalysisUtils.createTableOutOfMap(commandUse)); + String tableHtml = SortableCommandUseTableCreator.createSortedCommandUseTable(commandUse); + data.setCommandUseTableHtml(tableHtml); data.setTotalCommands(commandUse.size()); } else { data.setCommandUseTableHtml(Html.ERROR_TABLE_2.parse()); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/AnalysisUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/AnalysisUtils.java index f72550972..7144e8171 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/AnalysisUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/AnalysisUtils.java @@ -2,21 +2,15 @@ package main.java.com.djrapitops.plan.utilities; import java.io.Serializable; import java.util.Collection; -import java.util.Date; import java.util.List; -import java.util.Map; -import java.util.OptionalDouble; import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.Stream; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Settings; import main.java.com.djrapitops.plan.data.SessionData; -import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.additional.AnalysisType; import main.java.com.djrapitops.plan.data.additional.PluginData; -import main.java.com.djrapitops.plan.ui.tables.SortableCommandUseTableCreator; -import main.java.com.djrapitops.plan.ui.tables.SortablePlayersTableCreator; /** * @@ -31,13 +25,18 @@ public class AnalysisUtils { * @param loginTimes * @return */ + @Deprecated public static boolean isActive(long lastPlayed, long playTime, int loginTimes) { + return isActive(MiscUtils.getTime(), lastPlayed, playTime, loginTimes); + } + + public static boolean isActive(long now, long lastPlayed, long playTime, int loginTimes) { int timeToActive = Settings.ANALYSIS_MINUTES_FOR_ACTIVE.getNumber(); if (timeToActive < 0) { timeToActive = 0; } long twoWeeks = 1209600000; - if (new Date().getTime() - lastPlayed < twoWeeks) { + if (now - lastPlayed < twoWeeks) { if (loginTimes > 3) { if (playTime > 60 * timeToActive) { return true; @@ -47,14 +46,6 @@ public class AnalysisUtils { return false; } - static String createTableOutOfMap(Map commandUse) { - return SortableCommandUseTableCreator.createSortedCommandUseTable(commandUse); - } - - static String createSortablePlayersTable(Collection data) { - return SortablePlayersTableCreator.createSortablePlayersTable(data); - } - /** * * @param registered @@ -89,24 +80,6 @@ public class AnalysisUtils { return list; } - /** - * - * @param list - * @return - */ - public static long average(Collection list) { - if (list.isEmpty()) { - return 0; - } - long total = 0; - for (Long long1 : list) { - total += long1; - } - return total / list.size(); - } - - // Refactor to MathUtils class - /** * * @param analysisType @@ -115,49 +88,40 @@ public class AnalysisUtils { * @return */ public static String getTotal(AnalysisType analysisType, PluginData source, List uuids) { - try { - if (null != analysisType) { - Number total; - switch (analysisType) { - case INT_TOTAL: - total = getCorrectValues(uuids, source) - .mapToInt(value -> (Integer) value) - .sum(); - break; - case LONG_TOTAL: - total = getCorrectValues(uuids, source) - .mapToLong(value -> (Long) value) - .sum(); - break; - case LONG_TIME_MS_TOTAL: - total = getCorrectValues(uuids, source) - .mapToLong(value -> (Long) value) - .sum(); - return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount(total + "")); - case DOUBLE_TOTAL: - total = getCorrectValues(uuids, source) - .mapToDouble(value -> (Double) value) - .sum(); - break; - default: - return source.parseContainer("ERROR ", "Wrong Analysistype specified: " + analysisType.name()); - } - return source.parseContainer(analysisType.getModifier(), total + ""); - } - } catch (Throwable e) { - Log.toLog("com.djrapitops.plan.utilities.AnalysisUtils", e); + if (analysisType == null) { + return source.parseContainer("Err ", "Null Analysistype. "); + } + try { + Number total; + switch (analysisType) { + case INT_TOTAL: + total = MathUtils.sumInt(getCorrectValues(uuids, source)); + break; + case LONG_TOTAL: + total = MathUtils.sumLong(getCorrectValues(uuids, source)); + break; + case LONG_TIME_MS_TOTAL: + total = MathUtils.sumLong(getCorrectValues(uuids, source)); + return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount((long) total)); + case DOUBLE_TOTAL: + total = MathUtils.sumDouble(getCorrectValues(uuids, source)); + break; + default: + return source.parseContainer("", "Wrong Analysistype specified: " + analysisType.name()); + } + return source.parseContainer(analysisType.getModifier(), total + ""); + } catch (Throwable e) { + return logPluginDataCausedError(source, e); } - return source.parseContainer("ERROR ", "Exception during total calculation."); } private static Stream getCorrectValues(List uuids, PluginData source) { return uuids.stream() .map(uuid -> source.getValue(uuid)) - .filter(value -> !value.equals(-1)); + .filter(value -> !value.equals(-1)) + .filter(value -> !value.equals(-1L)); } - // Refactor to MathUtils class - /** * * @param analysisType @@ -166,61 +130,38 @@ public class AnalysisUtils { * @return */ public static String getAverage(AnalysisType analysisType, PluginData source, List uuids) { - try { - if (null != analysisType) { - Number total; - switch (analysisType) { - case LONG_EPOCH_MS_MINUS_NOW_AVG: - final long now = new Date().getTime(); - List longValues = getCorrectValues(uuids, source) - .map(value -> ((long) value) - now) - .collect(Collectors.toList()); - return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount(average(longValues) + "")); - case INT_AVG: - OptionalDouble avg = getCorrectValues(uuids, source) - .map(value -> (Integer) value) - .mapToInt(i -> i) - .average(); - if (!avg.isPresent()) { - total = 0; - } else { - total = avg.getAsDouble(); - } - break; - case LONG_AVG: - List longVal = getCorrectValues(uuids, source) - .map(value -> (Long) value) - .collect(Collectors.toList()); - total = average(longVal); - break; - case LONG_TIME_MS_AVG: - List longVal2 = getCorrectValues(uuids, source) - .map(value -> (Long) value) - .collect(Collectors.toList()); - return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount(average(longVal2) + "")); - case DOUBLE_AVG: - OptionalDouble average = getCorrectValues(uuids, source) - .mapToDouble(value -> (Double) value) - .average(); - if (!average.isPresent()) { - total = 0; - } else { - total = average.getAsDouble(); - } - break; - default: - return source.parseContainer("", "Wrong Analysistype specified: " + analysisType.name()); - } - return source.parseContainer(analysisType.getModifier(), total + ""); - } - } catch (Throwable e) { - Log.error("A PluginData-source caused an exception: "+source.getPlaceholder("").replace("%", "")); - Log.toLog("com.djrapitops.plan.utilities.AnalysisUtils", e); + if (analysisType == null) { + return source.parseContainer("Err ", "Null Analysistype. "); + } + try { + Number average; + switch (analysisType) { + case LONG_EPOCH_MS_MINUS_NOW_AVG: + final long now = MiscUtils.getTime(); + average = MathUtils.averageLong(getCorrectValues(uuids, source).map(value -> ((long) value) - now)); + return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount((long) average)); + case INT_AVG: + average = MathUtils.averageInt(getCorrectValues(uuids, source).map(i -> (Integer) i)); + break; + case LONG_AVG: + average = MathUtils.averageLong(getCorrectValues(uuids, source).map(i -> (Long) i)); + break; + case LONG_TIME_MS_AVG: + average = MathUtils.averageLong(getCorrectValues(uuids, source).map(i -> (Long) i)); + return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount((long) average)); + case DOUBLE_AVG: + average = MathUtils.averageDouble(getCorrectValues(uuids, source).map(i -> (Double) i)); + break; + default: + return source.parseContainer("Err ", "Wrong Analysistype specified: " + analysisType.name()); + } + return source.parseContainer(analysisType.getModifier(), average + ""); + } catch (Throwable e) { + return logPluginDataCausedError(source, e); } - return source.parseContainer("", "Exception during average calculation."); } - static String getBooleanPercentage(AnalysisType analysisType, PluginData source, List uuids) { + public static String getBooleanPercentage(AnalysisType analysisType, PluginData source, List uuids) { if (analysisType == AnalysisType.BOOLEAN_PERCENTAGE) { try { List tempList = getCorrectValues(uuids, source) @@ -229,15 +170,13 @@ public class AnalysisUtils { long count = tempList.stream().filter(value -> value).count(); return source.parseContainer(analysisType.getModifier(), ((double) (count / tempList.size()) * 100) + "%"); } catch (Throwable e) { - Log.error("A PluginData-source caused an exception: "+source.getPlaceholder("").replace("%", "")); - Log.toLog("com.djrapitops.plan.utilities.AnalysisUtils", e); - return source.parseContainer("", "Exception during calculation."); + return logPluginDataCausedError(source, e); } } - return source.parseContainer("", "Wrong Analysistype specified: " + analysisType.name()); + return source.parseContainer("Err ", "Wrong Analysistype specified: " + analysisType.name()); } - static String getBooleanTotal(AnalysisType analysisType, PluginData source, List uuids) { + public static String getBooleanTotal(AnalysisType analysisType, PluginData source, List uuids) { if (analysisType == AnalysisType.BOOLEAN_TOTAL) { try { List tempList = getCorrectValues(uuids, source) @@ -246,11 +185,16 @@ public class AnalysisUtils { long count = tempList.stream().filter(value -> value).count(); return source.parseContainer(analysisType.getModifier(), count + " / " + tempList.size()); } catch (Throwable e) { - Log.error("A PluginData-source caused an exception: "+source.getPlaceholder("").replace("%", "")); - Log.toLog("com.djrapitops.plan.utilities.AnalysisUtils", e); - return source.parseContainer("", "Exception during calculation."); + return logPluginDataCausedError(source, e); } } - return source.parseContainer("", "Wrong Analysistype specified: " + analysisType.name()); + return source.parseContainer("Err ", "Wrong Analysistype specified: " + analysisType.name()); } -} + + private static String logPluginDataCausedError(PluginData source, Throwable e) { + Log.error("A PluginData-source caused an exception: " + source.getPlaceholder("").replace("%", "")); + Log.toLog("A PluginData-source caused an exception: " + source.getPlaceholder("").replace("%", "")); + Log.toLog("com.djrapitops.plan.utilities.AnalysisUtils", e); + return source.parseContainer("", "Exception during calculation."); + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java index d6bce2e8e..7d8370e80 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java @@ -2,7 +2,6 @@ package main.java.com.djrapitops.plan.utilities; import java.text.DecimalFormat; import java.util.Date; -import main.java.com.djrapitops.plan.ui.Html; import org.bukkit.Location; /** @@ -11,58 +10,19 @@ import org.bukkit.Location; */ public class FormatUtils { - /** - * Formats a String of long in ms to readable format. - * - * @param string String of a Long in ms - * @return Readable format - * @throws NumberFormatException if String is not long. - */ - public static String formatTimeAmount(String string) throws NumberFormatException { - long ms = Long.parseLong(string); - return turnMsLongToString(ms); + public static String formatTimeAmount(long ms) { + return formatMilliseconds(ms); } - /** - * Formats the difference between the two dates into readable format. - * - * @param before - * @param now - * @return Readable format - * @throws NumberFormatException - */ - public static String formatTimeAmountSinceDate(Date before, Date now) throws NumberFormatException { - long ms = Math.abs((now.toInstant().getEpochSecond() * 1000) - (before.toInstant().getEpochSecond() * 1000)); - return turnMsLongToString(ms); + public static String formatTimeAmountDifference(long before, long after) { + return formatMilliseconds(Math.abs(after - before)); } - /** - * Creates a new Date with Epoch second and returns Date and Time String. - * - * @param string - * @return Readable TimeStamp - * @throws NumberFormatException String is not Long - */ - public static String formatTimeStamp(String string) throws NumberFormatException { - long ms = Long.parseLong(string); - Date sfd = new Date(ms); + public static String formatTimeStamp(long epochMs) { + Date sfd = new Date(epochMs); return ("" + sfd).substring(4, 19); } - /** - * Formats the difference between the two dates, where first is in String of - * Long format, into readable format. - * - * @param string Long in ms, date - * @param now - * @return - * @throws NumberFormatException - */ - public static String formatTimeAmountSinceString(String string, Date now) throws NumberFormatException { - long ms = Math.abs((now.toInstant().getEpochSecond() * 1000) - Long.parseLong(string)); - return turnMsLongToString(ms); - } - /** * Removes letters from a string leaving only numbers and dots. * @@ -72,7 +32,7 @@ public class FormatUtils { public static String removeLetters(String dataPoint) { return dataPoint.replaceAll("[^\\d.]", ""); } - + /** * * @param dataPoint @@ -80,15 +40,15 @@ public class FormatUtils { */ public static String removeNumbers(String dataPoint) { for (char c : removeLetters(dataPoint).toCharArray()) { - dataPoint = dataPoint.replace(c+"", ""); + dataPoint = dataPoint.replace(c + "", ""); } dataPoint = dataPoint.replace(" ", ""); return dataPoint; } // Formats long in milliseconds into d:h:m:s string - private static String turnMsLongToString(long ms) { - String returnValue = ""; + private static String formatMilliseconds(long ms) { + StringBuilder builder = new StringBuilder(); long x = ms / 1000; long seconds = x % 60; x /= 60; @@ -98,21 +58,22 @@ public class FormatUtils { x /= 24; long days = x; if (days != 0) { - returnValue += days + "d "; + builder.append(days).append("d "); } if (hours != 0) { - returnValue += hours + "h "; + builder.append(hours).append("h "); } if (minutes != 0) { - returnValue += minutes + "m "; + builder.append(minutes).append("m "); } if (seconds != 0) { - returnValue += seconds + "s"; + builder.append(seconds).append("s"); } - if (returnValue.isEmpty()) { - returnValue += "0s"; + String formattedTime = builder.toString(); + if (formattedTime.isEmpty()) { + return "0s"; } - return returnValue; + return formattedTime; } /** @@ -165,21 +126,6 @@ public class FormatUtils { return "x " + loc.getBlockX() + " z " + loc.getBlockZ() + " in " + loc.getWorld(); } - static String swapColorsToSpan(String string) { - Html[] replacer = new Html[]{Html.COLOR_0, Html.COLOR_1, Html.COLOR_2, Html.COLOR_3, - Html.COLOR_4, Html.COLOR_5, Html.COLOR_6, Html.COLOR_7, Html.COLOR_8, Html.COLOR_9, - Html.COLOR_a, Html.COLOR_b, Html.COLOR_c, Html.COLOR_d, Html.COLOR_e, Html.COLOR_f}; - - for (Html html : replacer) { - string = string.replaceAll("§" + html.name().charAt(6), html.parse()); - } - int spans = string.split(""); return html.toString(); } + + public static String swapColorsToSpan(String string) { + Html[] replacer = new Html[]{Html.COLOR_0, Html.COLOR_1, Html.COLOR_2, Html.COLOR_3, + Html.COLOR_4, Html.COLOR_5, Html.COLOR_6, Html.COLOR_7, Html.COLOR_8, Html.COLOR_9, + Html.COLOR_a, Html.COLOR_b, Html.COLOR_c, Html.COLOR_d, Html.COLOR_e, Html.COLOR_f}; + + for (Html html : replacer) { + string = string.replaceAll("§" + html.name().charAt(6), html.parse()); + } + int spans = string.split(" values) { + OptionalDouble average = values.mapToInt(i -> i).average(); + if (average.isPresent()) { + return average.getAsDouble(); + } else { + return 0; + } + } + + public static long averageLong(Collection values) { + return averageLong(values.stream()); + } + + public static long averageLong(Stream values) { + OptionalDouble average = values.mapToLong(i -> i).average(); + if (average.isPresent()) { + return (long) average.getAsDouble(); + } else { + return 0L; + } + } + + public static double averageDouble(Stream values) { + OptionalDouble average = values.mapToDouble(i -> i).average(); + if (average.isPresent()) { + return average.getAsDouble(); + } else { + return 0; + } + } + + public static double average(int total, int size) { + return 1.0 * total / size; + } + + public static long countTrueBoolean(Stream values) { + return values.filter(i -> i).count(); + } + + public static int sumInt(Stream values) { + return values + .mapToInt(value -> (Integer) value) + .sum(); + } + + public static long sumLong(Stream values) { + return values + .mapToLong(value -> (Long) value) + .sum(); + } + + public static double sumDouble(Stream values) { + return values + .mapToDouble(value -> (Double) value) + .sum(); + } +} diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/MiscUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/MiscUtils.java index 3da11cdec..ae809f740 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/MiscUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/MiscUtils.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Scanner; @@ -23,6 +24,10 @@ import org.bukkit.entity.Player; */ public class MiscUtils { + public static long getTime() { + return new Date().getTime(); + } + /** * Checks the version and returns response String. * @@ -80,7 +85,7 @@ public class MiscUtils { public static String getPlayerName(String[] args, CommandSender sender) { return getPlayerName(args, sender, Permissions.INSPECT_OTHER); } - + /** * Used by the inspect command. * diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java index 7d21ff725..a117104de 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.utilities; -import java.util.Date; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.DemographicsData; import main.java.com.djrapitops.plan.data.UserData; @@ -44,7 +43,7 @@ public class NewPlayerCreator { public static UserData createNewPlayer(OfflinePlayer player, GameMode gm) { UserData data = new UserData(player, new DemographicsData()); data.setLastGamemode(gm); - data.setLastPlayed(new Date().getTime()); + data.setLastPlayed(MiscUtils.getTime()); long zero = Long.parseLong("0"); data.setPlayTime(zero); data.setTimesKicked(0); 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 640ed2423..f58a8c3ab 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java @@ -2,7 +2,6 @@ package main.java.com.djrapitops.plan.utilities; import java.io.FileNotFoundException; import java.util.Arrays; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -46,10 +45,10 @@ public class PlaceholderUtils { replaceMap.put("%commanduse%", HtmlUtils.removeXSS(data.getCommandUseListHtml())); replaceMap.put("%totalcommands%", data.getTotalCommands() + ""); replaceMap.put("%avgage%", (data.getAverageAge() != -1) ? "" + data.getAverageAge() : Phrase.DEM_UNKNOWN + ""); - replaceMap.put("%avgplaytime%", FormatUtils.formatTimeAmount("" + data.getAveragePlayTime())); - replaceMap.put("%totalplaytime%", FormatUtils.formatTimeAmount("" + data.getTotalPlayTime())); + replaceMap.put("%avgplaytime%", FormatUtils.formatTimeAmount(data.getAveragePlayTime())); + replaceMap.put("%totalplaytime%", FormatUtils.formatTimeAmount(data.getTotalPlayTime())); replaceMap.put("%ops%", "" + data.getOps()); - replaceMap.put("%refresh%", FormatUtils.formatTimeAmountSinceString("" + data.getRefreshDate(), new Date())); + replaceMap.put("%refresh%", FormatUtils.formatTimeAmountDifference(data.getRefreshDate(), MiscUtils.getTime())); replaceMap.put("%totallogins%", "" + data.getTotalLoginTimes()); replaceMap.put("%top20mostactive%", Html.ERROR_NOT_SET.parse()); replaceMap.put("%recentlogins%", data.getRecentPlayers()); @@ -105,7 +104,7 @@ public class PlaceholderUtils { + "\",\"#" + Settings.HCOLOR_GENP_U + "\""); replaceMap.put("%genderfcolor%", "#" + Settings.HCOLOR_GENP_F); replaceMap.put("%gendermcolor%", "#" + Settings.HCOLOR_GENP_M); - replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(data.getSessionAverage() + "")); + replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(data.getSessionAverage())); replaceMap.put("%geomapcountries%", data.getGeomapCountries()); replaceMap.put("%geomapz%", data.getGeomapZ()); replaceMap.put("%geomapcodes%", data.getGeomapCodes()); @@ -116,7 +115,7 @@ public class PlaceholderUtils { String[] defaultCols = new String[]{"348e0f", "267F00", "5cb239", "89c471", "5da341"}; for (int i = 0; i < colors.length; i++) { if (!defaultCols[i].equals(colors[i])) { - replaceMap.put("#"+defaultCols[i], "#"+colors[i]); + replaceMap.put("#" + defaultCols[i], "#" + colors[i]); } } return replaceMap; @@ -134,10 +133,11 @@ public class PlaceholderUtils { boolean showIPandUUID = Settings.SECURITY_IP_UUID.isTrue(); UUID uuid = data.getUuid(); replaceMap.put("%uuid%", (showIPandUUID ? "" + uuid : Html.HIDDEN.parse())); - replaceMap.put("%lastseen%", FormatUtils.formatTimeStamp("" + data.getLastPlayed())); + replaceMap.put("%lastseen%", FormatUtils.formatTimeStamp(data.getLastPlayed())); replaceMap.put("%logintimes%", "" + data.getLoginTimes()); replaceMap.put("%geoloc%", data.getDemData().getGeoLocation()); - boolean isActive = AnalysisUtils.isActive(data.getLastPlayed(), data.getPlayTime(), data.getLoginTimes()); + long now = MiscUtils.getTime(); + boolean isActive = AnalysisUtils.isActive(now, data.getLastPlayed(), data.getPlayTime(), data.getLoginTimes()); replaceMap.put("%active%", isActive ? Html.ACTIVE.parse() : Html.INACTIVE.parse()); int age = data.getDemData().getAge(); replaceMap.put("%age%", (age != -1) ? "" + age : Phrase.DEM_UNKNOWN + ""); @@ -160,21 +160,21 @@ public class PlaceholderUtils { gmThree }; long total = gmData[0] + gmData[1] + gmData[2] + gmData[3]; - replaceMap.put("%gm0%", FormatUtils.formatTimeAmount("" + gmData[0])); - replaceMap.put("%gm1%", FormatUtils.formatTimeAmount("" + gmData[1])); - replaceMap.put("%gm2%", FormatUtils.formatTimeAmount("" + gmData[2])); - replaceMap.put("%gm3%", FormatUtils.formatTimeAmount("" + gmData[3])); + replaceMap.put("%gm0%", FormatUtils.formatTimeAmount(gmData[0])); + replaceMap.put("%gm1%", FormatUtils.formatTimeAmount(gmData[1])); + replaceMap.put("%gm2%", FormatUtils.formatTimeAmount(gmData[2])); + replaceMap.put("%gm3%", FormatUtils.formatTimeAmount(gmData[3])); replaceMap.put("%gmdata%", Arrays.toString(gmData)); replaceMap.put("%gmlabels%", "[\"Survival\", \"Creative\", \"Adventure\", \"Spectator\"]"); replaceMap.put("%gmcolors%", "\"#" + Settings.HCOLOR_GMP_0 + "\",\"#" + Settings.HCOLOR_GMP_1 + "\",\"#" + Settings.HCOLOR_GMP_2 + "\",\"#" + Settings.HCOLOR_GMP_3 + "\""); - replaceMap.put("%gmtotal%", FormatUtils.formatTimeAmount("" + total)); + replaceMap.put("%gmtotal%", FormatUtils.formatTimeAmount(total)); replaceMap.put("%ips%", (showIPandUUID ? data.getIps().toString() : Html.HIDDEN.parse())); - replaceMap.put("%nicknames%", HtmlUtils.removeXSS(FormatUtils.swapColorsToSpan(data.getNicknames().toString()))); + replaceMap.put("%nicknames%", HtmlUtils.removeXSS(HtmlUtils.swapColorsToSpan(data.getNicknames().toString()))); replaceMap.put("%name%", data.getName()); - replaceMap.put("%registered%", FormatUtils.formatTimeStamp("" + data.getRegistered())); + replaceMap.put("%registered%", FormatUtils.formatTimeStamp(data.getRegistered())); replaceMap.put("%timeskicked%", "" + data.getTimesKicked()); - replaceMap.put("%playtime%", FormatUtils.formatTimeAmount("" + data.getPlayTime())); + replaceMap.put("%playtime%", FormatUtils.formatTimeAmount(data.getPlayTime())); replaceMap.put("%banned%", data.isBanned() ? Html.BANNED.parse() : ""); replaceMap.put("%op%", data.isOp() ? Html.OPERATOR.parse() : ""); replaceMap.put("%isonline%", (data.isOnline()) ? Html.ONLINE.parse() : Html.OFFLINE.parse()); @@ -183,7 +183,7 @@ public class PlaceholderUtils { replaceMap.put("%playerkills%", data.getPlayerKills().size() + ""); replaceMap.put("%mobkills%", data.getMobKills() + ""); replaceMap.put("%sessionstable%", SortableSessionTableCreator.createSortedSessionDataTable10(data.getSessions())); - replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(AnalysisUtils.average(AnalysisUtils.transformSessionDataToLengths(data.getSessions())) + "")); + replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(data.getSessions())))); replaceMap.put("%killstable%", SortableKillsTableCreator.createSortedSessionDataTable10(data.getPlayerKills())); Plan plugin = Plan.getInstance(); replaceMap.put("%version%", plugin.getDescription().getVersion()); @@ -197,7 +197,7 @@ public class PlaceholderUtils { replaceMap.put("%gm1col%", Settings.HCOLOR_GMP_1 + ""); replaceMap.put("%gm2col%", Settings.HCOLOR_GMP_2 + ""); replaceMap.put("%gm3col%", Settings.HCOLOR_GMP_3 + ""); - replaceMap.put("%inaccuratedatawarning%", (new Date().getTime() - data.getRegistered() < 180000) ? Html.WARN_INACCURATE.parse() : ""); + replaceMap.put("%inaccuratedatawarning%", (now - data.getRegistered() < 180000) ? Html.WARN_INACCURATE.parse() : ""); String pluginsTabHtml = plugin.getHookHandler().getPluginsTabLayoutForInspect(); Map additionalReplaceRules = plugin.getHookHandler().getAdditionalInspectReplaceRules(uuid); String replacedOnce = HtmlUtils.replacePlaceholders(pluginsTabHtml, additionalReplaceRules); diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/PhraseTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/PhraseTest.java index 16732f91c..4d5461426 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/PhraseTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/PhraseTest.java @@ -1,12 +1,6 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package test.java.main.java.com.djrapitops.plan; import main.java.com.djrapitops.plan.Phrase; -import main.java.com.djrapitops.plan.Plan; import org.bukkit.ChatColor; import org.bukkit.plugin.java.JavaPlugin; import static org.junit.Assert.*; @@ -24,15 +18,13 @@ import test.java.utils.TestInit; @RunWith(PowerMockRunner.class) @PrepareForTest(JavaPlugin.class) public class PhraseTest { - - private Plan plan; - + /** * */ public PhraseTest() { } - + /** * */ @@ -40,17 +32,16 @@ public class PhraseTest { public void setUp() { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); - plan = t.getPlanMock(); } - + /** * */ @Test - public void testToString() { + public void testToString() { Phrase instance = Phrase.REPLACE0; String expResult = "REPLACE0"; - instance.setText(expResult); + instance.setText(expResult); String result = instance.toString(); assertEquals(expResult, result); } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/SettingsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/SettingsTest.java index 132031a3f..7d844091e 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/SettingsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/SettingsTest.java @@ -51,7 +51,7 @@ public class SettingsTest { */ @Test public void testToString() { - assertEquals("sqlite",Settings.DB_TYPE.toString()); + assertEquals("sqlite", Settings.DB_TYPE.toString()); } /** @@ -59,7 +59,7 @@ public class SettingsTest { */ @Test public void testGetNumber() { - assertEquals(8804,Settings.WEBSERVER_PORT.getNumber()); + assertEquals(8804, Settings.WEBSERVER_PORT.getNumber()); } /** diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/api/GenderTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/api/GenderTest.java index 64b1a0de1..92f383cfd 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/api/GenderTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/api/GenderTest.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package test.java.main.java.com.djrapitops.plan.api; import main.java.com.djrapitops.plan.api.Gender; diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/additional/AnalysisTypeTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/additional/AnalysisTypeTest.java new file mode 100644 index 000000000..f9c458901 --- /dev/null +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/additional/AnalysisTypeTest.java @@ -0,0 +1,31 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package test.java.main.java.com.djrapitops.plan.data.additional; + +import main.java.com.djrapitops.plan.data.additional.AnalysisType; +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * + * @author Risto + */ +public class AnalysisTypeTest { + + public AnalysisTypeTest() { + } + + @Test + public void testGetModifier() { + assertEquals("Average ", AnalysisType.INT_AVG.getModifier()); + } + + @Test + public void testGetPlaceholderModifier() { + assertEquals("totalInt_", AnalysisType.INT_TOTAL.getPlaceholderModifier()); + } + +} diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/DataCacheHandlerTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/DataCacheHandlerTest.java index 0795b6b8c..9814c1fee 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/DataCacheHandlerTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/DataCacheHandlerTest.java @@ -7,7 +7,6 @@ package test.java.main.java.com.djrapitops.plan.data.cache; import java.sql.SQLException; import java.util.Collection; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.UUID; @@ -18,6 +17,7 @@ import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor; import main.java.com.djrapitops.plan.data.cache.DataCacheHandler; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.OfflinePlayer; import org.bukkit.plugin.java.JavaPlugin; import org.junit.After; @@ -64,7 +64,7 @@ public class DataCacheHandlerTest { plan = t.getPlanMock(); calledSaveCommandUse = false; calledSaveUserData = false; - db = new SQLiteDB(plan, "debug" + new Date().getTime()) { + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { @Override public void startConnectionPingTask(Plan plugin) { diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueueTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueueTest.java index 5518f0e2d..b23589c94 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueueTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueueTest.java @@ -10,7 +10,6 @@ import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.sql.SQLException; -import java.util.Date; import java.util.UUID; import java.util.stream.Collectors; import main.java.com.djrapitops.plan.Plan; @@ -20,6 +19,7 @@ import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor; import main.java.com.djrapitops.plan.data.cache.queue.DataCacheGetQueue; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.plugin.java.JavaPlugin; @@ -61,7 +61,7 @@ public class DataCacheGetQueueTest { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); plan = t.getPlanMock(); - db = new SQLiteDB(plan, "debug" + new Date().getTime()) { + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { @Override public void startConnectionPingTask(Plan plugin) { diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueueTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueueTest.java index 41d51e63b..11f564c0f 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueueTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueueTest.java @@ -6,12 +6,12 @@ package test.java.main.java.com.djrapitops.plan.data.cache.queue; import java.sql.SQLException; -import java.util.Date; import java.util.UUID; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.plugin.java.JavaPlugin; import org.junit.After; import static org.junit.Assert.*; @@ -53,7 +53,7 @@ public class DataCacheSaveQueueTest { plan = t.getPlanMock(); calledSaveUserData = false; calledSaveUserData2 = false; - db = new SQLiteDB(plan, "debug" + new Date().getTime()) { + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { @Override public void startConnectionPingTask(Plan plugin) { diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/KillHandlingTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/KillHandlingTest.java index 26c27c3e0..026964211 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/KillHandlingTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/KillHandlingTest.java @@ -7,7 +7,6 @@ package test.java.main.java.com.djrapitops.plan.data.handling; import java.io.IOException; import java.sql.SQLException; -import java.util.Date; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.DemographicsData; import main.java.com.djrapitops.plan.data.KillData; @@ -15,6 +14,7 @@ import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.handling.KillHandling; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.junit.After; @@ -55,7 +55,7 @@ public class KillHandlingTest { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); plan = t.getPlanMock(); - db = new SQLiteDB(plan, "debug" + new Date().getTime()) { + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { @Override public void startConnectionPingTask(Plan plugin) { diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KillInfoTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KillInfoTest.java index d52829aa2..759edf968 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KillInfoTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KillInfoTest.java @@ -6,7 +6,6 @@ package test.java.main.java.com.djrapitops.plan.data.handling.info; import java.sql.SQLException; -import java.util.Date; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.DemographicsData; import main.java.com.djrapitops.plan.data.KillData; @@ -14,6 +13,7 @@ import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.handling.info.KillInfo; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.junit.After; @@ -51,7 +51,7 @@ public class KillInfoTest { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); Plan plan = t.getPlanMock(); - db = new SQLiteDB(plan, "debug" + new Date().getTime()) { + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { @Override public void startConnectionPingTask(Plan plugin) { diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java index 205c4fb78..504706e7a 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java @@ -11,7 +11,6 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Set; @@ -25,6 +24,7 @@ import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.MySQLDB; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; import main.java.com.djrapitops.plan.utilities.ManageUtils; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.plugin.java.JavaPlugin; @@ -71,7 +71,7 @@ public class DatabaseTest { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); plan = t.getPlanMock(); - db = new SQLiteDB(plan, "debug" + new Date().getTime()) { + db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { @Override public void startConnectionPingTask(Plan plugin) { diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/AnalysisUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/AnalysisUtilsTest.java index b5bef7383..42f77a88e 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/AnalysisUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/AnalysisUtilsTest.java @@ -7,10 +7,10 @@ package test.java.main.java.com.djrapitops.plan.utilities; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.List; import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.utilities.AnalysisUtils; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.bukkit.plugin.java.JavaPlugin; import static org.junit.Assert.*; import org.junit.Before; @@ -48,7 +48,7 @@ public class AnalysisUtilsTest { */ @Test public void testIsActive() { - long lastPlayed = new Date().getTime(); + long lastPlayed = MiscUtils.getTime(); long playTime = 12638934876L; int loginTimes = 4; boolean expResult = true; @@ -61,7 +61,7 @@ public class AnalysisUtilsTest { */ @Test public void testIsNotActive2() { - long lastPlayed = new Date().getTime(); + long lastPlayed = MiscUtils.getTime(); long playTime = 0L; int loginTimes = 4; boolean expResult = false; @@ -74,7 +74,7 @@ public class AnalysisUtilsTest { */ @Test public void testIsNotActive3() { - long lastPlayed = new Date().getTime(); + long lastPlayed = MiscUtils.getTime(); long playTime = 12638934876L; int loginTimes = 0; boolean expResult = false; @@ -137,33 +137,5 @@ public class AnalysisUtilsTest { expResult.add(20L); List result = AnalysisUtils.transformSessionDataToLengths(data); assertEquals(expResult, result); - } - - /** - * - */ - @Test - public void testAverage() { - Collection o = new ArrayList<>(); - o.add(0L); - o.add(1L); - o.add(2L); - o.add(3L); - o.add(4L); - long expResult = 2L; - long result = AnalysisUtils.average(o); - assertEquals(expResult, result); - } - - /** - * - */ - @Test - public void testAverageEmpty() { - Collection list = new ArrayList<>(); - long expResult = 0L; - long result = AnalysisUtils.average(list); - assertEquals(expResult, result); - } - + } } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/FormatUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/FormatUtilsTest.java index 0d860865e..3116978b4 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/FormatUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/FormatUtilsTest.java @@ -30,9 +30,9 @@ public class FormatUtilsTest { */ @Test public void testFormatTimeAmount() { - String string = "" + 1000L; + long second = 1000L; String expResult = "1s"; - String result = FormatUtils.formatTimeAmount(string); + String result = FormatUtils.formatTimeAmount(second); assertEquals(expResult, result); } @@ -44,7 +44,7 @@ public class FormatUtilsTest { Date before = new Date(300000L); Date now = new Date(310000L); String expResult = "10s"; - String result = FormatUtils.formatTimeAmountSinceDate(before, now); + String result = FormatUtils.formatTimeAmountDifference(before.getTime(), now.getTime()); assertEquals(expResult, result); } @@ -53,21 +53,9 @@ public class FormatUtilsTest { */ @Test public void testFormatTimeStamp() { - String string = "0"; + long epochZero = 0L; String expResult = "Jan 01 02:00:00"; - String result = FormatUtils.formatTimeStamp(string); - assertEquals(expResult, result); - } - - /** - * - */ - @Test - public void testFormatTimeAmountSinceString() { - String string = "" + new Date(310000L).toInstant().getEpochSecond() * 1000L; - Date now = new Date(300000L); - String expResult = "10s"; - String result = FormatUtils.formatTimeAmountSinceString(string, now); + String result = FormatUtils.formatTimeStamp(epochZero); assertEquals(expResult, result); } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MathUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MathUtilsTest.java new file mode 100644 index 000000000..a84c8edf7 --- /dev/null +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/MathUtilsTest.java @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package test.java.main.java.com.djrapitops.plan.utilities; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import main.java.com.djrapitops.plan.utilities.MathUtils; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +/** + * + * @author Risto + */ +public class MathUtilsTest { + + public MathUtilsTest() { + } + + @Test + public void testAverageInt() { + List l = new ArrayList<>(); + double exp = 10; + l.add(0); + l.add(20); + l.add(5); + l.add(15); + double result = MathUtils.averageInt(l.stream()); + assertTrue(exp == result); + } + + @Test + public void testAverageIntEmpty() { + List l = new ArrayList<>(); + double exp = 0; + double result = MathUtils.averageInt(l.stream()); + assertTrue(result + "/" + exp, exp == result); + } + + @Test + public void testAverageLong_Collection() { + List l = new ArrayList<>(); + double exp = 10; + l.add(0L); + l.add(20L); + l.add(5L); + l.add(15L); + double result = MathUtils.averageLong(l); + assertTrue(result + "/" + exp, exp == result); + } + + @Test + public void testAverageDouble() { + List l = new ArrayList<>(); + double exp = 10; + l.add(0.0); + l.add(20.5); + l.add(4.5); + l.add(15.0); + double result = MathUtils.averageDouble(l.stream()); + assertTrue(result + "/" + exp, exp == result); + + } + + @Test + public void testAverage() { + double exp = 10; + double result = MathUtils.average(40, 4); + assertTrue(result + "/" + exp, exp == result); + } + + @Test + public void testCountTrueBoolean() { + List l = new ArrayList<>(); + int exp = new Random().nextInt(1000); + for (int i = 0; i < exp; i++) { + l.add(true); + } + for (int i = exp; i < 1000; i++) { + l.add(false); + } + long result = MathUtils.countTrueBoolean(l.stream()); + assertTrue(result + "/" + exp, exp == result); + } + + @Test + public void testSumInt() { + List l = new ArrayList<>(); + double exp = 40; + l.add(0); + l.add(20); + l.add(5); + l.add(15); + double result = MathUtils.sumInt(l.stream()); + assertTrue(result + "/" + exp, exp == result); + } + + @Test + public void testSumLong() { + List l = new ArrayList<>(); + long exp = 40; + l.add(0L); + l.add(20L); + l.add(5L); + l.add(15L); + long result = MathUtils.sumLong(l.stream()); + assertTrue(result + "/" + exp, exp == result); + } + + @Test + public void testSumDouble() { + List l = new ArrayList<>(); + double exp = 100.4531541; + l.add(0.0); + l.add(50.4); + l.add(45.0); + l.add(5.0531541); + double result = MathUtils.sumDouble(l.stream()); + assertTrue(result + "/" + exp, exp == result); + } + +} diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/NewPlayerCreatorTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/NewPlayerCreatorTest.java index bb334e9dd..27efc1468 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/NewPlayerCreatorTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/NewPlayerCreatorTest.java @@ -5,9 +5,9 @@ */ package test.java.main.java.com.djrapitops.plan.utilities; -import java.util.Date; import main.java.com.djrapitops.plan.data.DemographicsData; import main.java.com.djrapitops.plan.data.UserData; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.NewPlayerCreator; import org.bukkit.GameMode; import org.bukkit.OfflinePlayer; @@ -62,7 +62,7 @@ public class NewPlayerCreatorTest { UserData result = NewPlayerCreator.createNewPlayer(p); UserData exp = new UserData(p, new DemographicsData()); exp.setLastGamemode(GameMode.SURVIVAL); - exp.setLastPlayed(new Date().getTime()); + exp.setLastPlayed(MiscUtils.getTime()); long zero = Long.parseLong("0"); exp.setPlayTime(zero); exp.setTimesKicked(0); @@ -82,7 +82,7 @@ public class NewPlayerCreatorTest { UserData result = NewPlayerCreator.createNewPlayer(p); UserData exp = new UserData(p, new DemographicsData()); exp.setLastGamemode(GameMode.SPECTATOR); - exp.setLastPlayed(new Date().getTime()); + exp.setLastPlayed(MiscUtils.getTime()); long zero = Long.parseLong("0"); exp.setPlayTime(zero); exp.setTimesKicked(0); @@ -102,7 +102,7 @@ public class NewPlayerCreatorTest { UserData result = NewPlayerCreator.createNewPlayer(p, GameMode.CREATIVE); UserData exp = new UserData(p, new DemographicsData()); exp.setLastGamemode(GameMode.CREATIVE); - exp.setLastPlayed(new Date().getTime()); + exp.setLastPlayed(MiscUtils.getTime()); long zero = Long.parseLong("0"); exp.setPlayTime(zero); exp.setTimesKicked(0);