From 77389b5e0c0dd9c1c8880316bf5aaad0223ff896 Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Fri, 28 Jul 2017 13:19:48 +0200 Subject: [PATCH 1/5] Fixed rounding for TPS and CPU usage --- .../command/commands/manage/ManageClearCommand.java | 4 ++-- .../command/commands/manage/ManageStatusCommand.java | 8 ++++---- .../plan/data/analysis/CommandUsagePart.java | 4 ++-- .../djrapitops/plan/data/cache/DataCacheHandler.java | 4 ++-- .../plan/data/cache/queue/DataCacheGetQueue.java | 2 +- .../plan/ui/html/graphs/PunchCardGraphCreator.java | 2 +- .../plan/ui/html/graphs/TPSGraphCreator.java | 3 +-- .../plan/ui/html/tables/KillsTableCreator.java | 2 +- .../plan/ui/html/tables/PlayersTableCreator.java | 10 +++++----- 9 files changed, 19 insertions(+), 20 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java index 9afe1fc72..1ff6f2b8e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java @@ -56,7 +56,7 @@ public class ManageClearCommand extends SubCommand { @Override public boolean onCommand(ISender sender, String commandLabel, String[] args) { - if (!Check.isTrue(args.length >= 1, Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE + "", sender)) { + if (!Check.isTrue(args.length >= 1, Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE.toString(), sender)) { return true; } @@ -74,7 +74,7 @@ public class ManageClearCommand extends SubCommand { final Database database = ManageUtils.getDB(plugin, dbName); // If DB is null return - if (!Check.isTrue(Verify.notNull(database), Phrase.MANAGE_DATABASE_FAILURE + "", sender)) { + if (!Check.isTrue(Verify.notNull(database), Phrase.MANAGE_DATABASE_FAILURE.toString(), sender)) { Log.error(dbName + " was null!"); return true; } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageStatusCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageStatusCommand.java index 38520607a..588205953 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageStatusCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageStatusCommand.java @@ -32,10 +32,10 @@ public class ManageStatusCommand extends SubCommand { String[] messages = new String[]{ Phrase.CMD_MANAGE_STATUS_HEADER.toString(), Phrase.CMD_MANAGE_STATUS_ACTIVE_DB.parse(plugin.getDB().getConfigName()), - Phrase.CMD_MANAGE_STATUS_QUEUE_PROCESS.parse("" + plugin.getHandler().getProcessTask().size()), - Phrase.CMD_MANAGE_STATUS_QUEUE_SAVE.parse("" + plugin.getHandler().getSaveTask().size()), - Phrase.CMD_MANAGE_STATUS_QUEUE_GET.parse("" + plugin.getHandler().getGetTask().size()), - Phrase.CMD_MANAGE_STATUS_QUEUE_CLEAR.parse("" + plugin.getHandler().getClearTask().size()), + Phrase.CMD_MANAGE_STATUS_QUEUE_PROCESS.parse(String.valueOf(plugin.getHandler().getProcessTask().size())), + Phrase.CMD_MANAGE_STATUS_QUEUE_SAVE.parse(String.valueOf(plugin.getHandler().getSaveTask().size())), + Phrase.CMD_MANAGE_STATUS_QUEUE_GET.parse(String.valueOf(plugin.getHandler().getGetTask().size())), + Phrase.CMD_MANAGE_STATUS_QUEUE_CLEAR.parse(String.valueOf(plugin.getHandler().getClearTask().size())), Phrase.CMD_FOOTER.toString() }; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java index a0beda65e..9224005a3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java @@ -32,8 +32,8 @@ public class CommandUsagePart extends RawData { @Override public void analyse() { - addValue("uniquecommands", getUniqueCommands() + ""); - addValue("totalcommands", getCommandTotal() + ""); + addValue("uniquecommands", String.valueOf(getUniqueCommands())); + addValue("totalcommands", String.valueOf(getCommandTotal())); String commandUsageTable = CommandUseTableCreator.createSortedCommandUseTable(commandUsage); addValue("commanduse", HtmlUtils.removeXSS(commandUsageTable)); } 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 b793f1e51..0fe0d2412 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 @@ -366,9 +366,9 @@ public class DataCacheHandler extends SessionCache { for (List history : copy) { final long lastDate = history.get(history.size() - 1).getDate(); - final double averageTPS = MathUtils.averageDouble(history.stream().map(TPS::getTps)); + final double averageTPS = MathUtils.round(MathUtils.averageDouble(history.stream().map(TPS::getTps))); final int averagePlayersOnline = (int) MathUtils.averageInt(history.stream().map(TPS::getPlayers)); - final double averageCPUUsage = MathUtils.averageDouble(history.stream().map(TPS::getCPUUsage)); + final double averageCPUUsage = MathUtils.round(MathUtils.averageDouble(history.stream().map(TPS::getCPUUsage))); final long averageUsedMemory = MathUtils.averageLong(history.stream().map(TPS::getUsedMemory)); final int averageEntityCount = (int) MathUtils.averageInt(history.stream().map(TPS::getEntityCount)); final int averageChunksLoaded = (int) MathUtils.averageInt(history.stream().map(TPS::getChunksLoaded)); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java index 9debe2f66..686efed11 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java @@ -45,7 +45,7 @@ public class DataCacheGetQueue extends Queue map.put(uuid, Arrays.asList(processors)); queue.add(map); } catch (IllegalStateException e) { - Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Get Queue", Settings.PROCESS_GET_LIMIT.getNumber() + "")); + Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Get Queue", String.valueOf(Settings.PROCESS_GET_LIMIT.getNumber()))); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java index 0d117227e..5f0bdb4db 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java @@ -44,7 +44,7 @@ public class PunchCardGraphCreator { if (value == 0) { continue; } - arrayBuilder.append("{").append("x:").append(j).append(", y:").append(i).append(", r:").append(value).append("}"); + arrayBuilder.append("{x:").append(j).append(", y:").append(i).append(", r:").append(value).append("}"); if (i != 6 || j != 23) { arrayBuilder.append(","); } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java index 03dc4dcc0..2928995d2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java @@ -1,7 +1,6 @@ package main.java.com.djrapitops.plan.ui.html.graphs; import main.java.com.djrapitops.plan.data.TPS; -import main.java.com.djrapitops.plan.utilities.FormatUtils; import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.analysis.Point; @@ -19,7 +18,7 @@ public class TPSGraphCreator { long now = MiscUtils.getTime(); List points = tpsData.stream() .filter(tps -> tps.getDate() >= now - scale) - .map(tps -> new Point(tps.getDate(), Double.parseDouble(FormatUtils.cutDecimals(tps.getTps()).replace(",", ".")))) + .map(tps -> new Point(tps.getDate(), tps.getTps())) .collect(Collectors.toList()); return ScatterGraphCreator.scatterGraph(points, true); } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java index 21883bce8..1e0ca522e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java @@ -33,7 +33,7 @@ public class KillsTableCreator { IOfflinePlayer victim = Fetch.getIOfflinePlayer(kill.getVictim()); String name = victim.getName(); html.append(Html.TABLELINE_3_CUSTOMKEY_1.parse( - date + "", FormatUtils.formatTimeStamp(date), + String.valueOf(date), FormatUtils.formatTimeStamp(date), Html.LINK.parse(HtmlUtils.getInspectUrl(name), name), kill.getWeapon() )); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java index f62bdf9fe..c7f0629c3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java @@ -47,11 +47,11 @@ public class PlayersTableCreator { html.append(Html.TABLELINE_PLAYERS.parse( img + Html.LINK.parse(HtmlUtils.getInspectUrl(uData.getName()), uData.getName()), activityString, - uData.getPlayTime() + "", FormatUtils.formatTimeAmount(uData.getPlayTime()), - uData.getLoginTimes() + "", - uData.getRegistered() + "", FormatUtils.formatTimeStampYear(uData.getRegistered()), - uData.getLastPlayed() + "", FormatUtils.formatTimeStamp(uData.getLastPlayed()), - uData.getGeolocation() + String.valueOf(uData.getPlayTime()), FormatUtils.formatTimeAmount(uData.getPlayTime()), + String.valueOf(uData.getLoginTimes()), + String.valueOf(uData.getRegistered()), FormatUtils.formatTimeStampYear(uData.getRegistered()), + String.valueOf(uData.getLastPlayed()), FormatUtils.formatTimeStamp(uData.getLastPlayed()), + String.valueOf(uData.getGeolocation()) )); } catch (NullPointerException e) { } From 4f63640c975616e1887400298a91a0a945a40d75 Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Fri, 28 Jul 2017 19:12:46 +0200 Subject: [PATCH 2/5] Fixed InDepthHelp --- .../main/java/com/djrapitops/plan/Plan.java | 18 +++++++++++------- .../plan/command/commands/AnalyzeCommand.java | 5 ++--- .../plan/command/commands/InspectCommand.java | 5 ++--- .../plan/command/commands/ListCommand.java | 5 ++--- .../plan/command/commands/ManageCommand.java | 5 ++--- .../command/commands/QuickAnalyzeCommand.java | 5 ++--- .../command/commands/QuickInspectCommand.java | 5 ++--- .../plan/command/commands/RegisterCommand.java | 5 ++--- .../commands/RegisterCommandFilter.java | 1 - .../plan/command/commands/SearchCommand.java | 5 ++--- .../plan/command/commands/WebUserCommand.java | 5 ++--- .../commands/manage/ManageClearCommand.java | 5 ++--- .../commands/manage/ManageHotswapCommand.java | 5 ++--- .../commands/manage/ManageImportCommand.java | 5 ++--- .../commands/manage/ManageRemoveCommand.java | 6 ++---- .../djrapitops/plan/utilities/FormatUtils.java | 16 ++++++++-------- .../plan/utilities/metrics/BStats.java | 3 +-- 17 files changed, 46 insertions(+), 58 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java index f8af8f992..6dbb84817 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Plan.java +++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java @@ -183,10 +183,10 @@ public class Plan extends BukkitPlugin { // Prevent passwords showing up on console. Bukkit.getLogger().setFilter(new RegisterCommandFilter()); } else if (!hasDataViewCapability) { - Log.infoColor(Phrase.ERROR_NO_DATA_VIEW + ""); + Log.infoColor(Phrase.ERROR_NO_DATA_VIEW.toString()); } if (!usingAlternativeIP && serverVariableHolder.getIp().isEmpty()) { - Log.infoColor(Phrase.NOTIFY_EMPTY_IP + ""); + Log.infoColor(Phrase.NOTIFY_EMPTY_IP.toString()); } Benchmark.stop("Enable: WebServer Initialization"); @@ -200,7 +200,7 @@ public class Plan extends BukkitPlugin { bStats.registerMetrics(); Log.debug("Verbose debug messages are enabled."); - Log.info(Phrase.ENABLED + ""); + Log.info(Phrase.ENABLED.toString()); processStatus().finishExecution("Enable"); } @@ -235,23 +235,27 @@ public class Plan extends BukkitPlugin { private void registerListeners() { Benchmark.start("Enable: Register Listeners"); registerListener(new PlanPlayerListener(this)); - boolean chatListenerIsEnabled = Check.isTrue(Settings.GATHERCHAT.isTrue(), Phrase.NOTIFY_DISABLED_CHATLISTENER + ""); - boolean gamemodeChangeListenerIsEnabled = Check.isTrue(Settings.GATHERGMTIMES.isTrue(), Phrase.NOTIFY_DISABLED_GMLISTENER + ""); - boolean commandListenerIsEnabled = Check.isTrue(Settings.GATHERCOMMANDS.isTrue(), Phrase.NOTIFY_DISABLED_COMMANDLISTENER + ""); - boolean deathListenerIsEnabled = Check.isTrue(Settings.GATHERKILLS.isTrue(), Phrase.NOTIFY_DISABLED_DEATHLISTENER + ""); + boolean chatListenerIsEnabled = Check.isTrue(Settings.GATHERCHAT.isTrue(), Phrase.NOTIFY_DISABLED_CHATLISTENER.toString()); + boolean gamemodeChangeListenerIsEnabled = Check.isTrue(Settings.GATHERGMTIMES.isTrue(), Phrase.NOTIFY_DISABLED_GMLISTENER.toString()); + boolean commandListenerIsEnabled = Check.isTrue(Settings.GATHERCOMMANDS.isTrue(), Phrase.NOTIFY_DISABLED_COMMANDLISTENER.toString()); + boolean deathListenerIsEnabled = Check.isTrue(Settings.GATHERKILLS.isTrue(), Phrase.NOTIFY_DISABLED_DEATHLISTENER.toString()); if (chatListenerIsEnabled) { registerListener(new PlanChatListener(this)); } + if (gamemodeChangeListenerIsEnabled) { registerListener(new PlanGamemodeChangeListener(this)); } + if (commandListenerIsEnabled) { registerListener(new PlanCommandPreprocessListener(this)); } + if (deathListenerIsEnabled) { registerListener(new PlanDeathEventListener(this)); } + Benchmark.stop("Enable: Register Listeners"); } 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 cee8923ba..363e1fcc6 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 @@ -6,7 +6,6 @@ import com.djrapitops.plugin.command.CommandUtils; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import main.java.com.djrapitops.plan.*; import main.java.com.djrapitops.plan.command.ConditionUtils; @@ -43,8 +42,6 @@ public class AnalyzeCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -55,6 +52,8 @@ public class AnalyzeCommand extends SubCommand { sCol + " /plan status can be used to check status of analysis while it is running.", sCol + " Aliases: analyze, analyse, analysis, a" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/InspectCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/InspectCommand.java index 63369a6f6..c6e141feb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/InspectCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/InspectCommand.java @@ -6,7 +6,6 @@ import com.djrapitops.plugin.command.CommandUtils; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.*; @@ -49,8 +48,6 @@ public class InspectCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -61,6 +58,8 @@ public class InspectCommand extends SubCommand { sCol + " Own inspect page can be accessed with /plan inspect", sCol + " Alias: /plan " }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java index 6743a4105..181ea37a5 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/ListCommand.java @@ -5,7 +5,6 @@ import com.djrapitops.plugin.command.CommandUtils; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import main.java.com.djrapitops.plan.Permissions; import main.java.com.djrapitops.plan.Phrase; import main.java.com.djrapitops.plan.Plan; @@ -40,8 +39,6 @@ public class ListCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -52,6 +49,8 @@ public class ListCommand extends SubCommand { sCol + " Players page contains links to all cached inspect pages.", sCol + " Alias: /plan pl" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java index c013af116..e476ac497 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java @@ -3,7 +3,6 @@ package main.java.com.djrapitops.plan.command.commands; import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.TreeCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import main.java.com.djrapitops.plan.Permissions; import main.java.com.djrapitops.plan.Phrase; import main.java.com.djrapitops.plan.Plan; @@ -32,8 +31,6 @@ public class ManageCommand extends TreeCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -45,6 +42,8 @@ public class ManageCommand extends TreeCommand { sCol + " /plan m - List subcommands", sCol + " /plan m ? - in depth help" }; + + setInDepthHelp(help); } @Override 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 269ce49e0..3e9d5aef8 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 @@ -5,7 +5,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Permissions; @@ -44,8 +43,6 @@ public class QuickAnalyzeCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -56,6 +53,8 @@ public class QuickAnalyzeCommand extends SubCommand { sCol + " Has less info than full Analysis web page.", sCol + " Aliases: qanalyze, ganalyse, qanalysis, qa" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickInspectCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickInspectCommand.java index 5aaf20712..10b35dc39 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickInspectCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/QuickInspectCommand.java @@ -5,7 +5,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; @@ -49,8 +48,6 @@ public class QuickInspectCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -61,6 +58,8 @@ public class QuickInspectCommand extends SubCommand { sCol + " Has less info than full Inspect web page.", sCol + " Alias: /plan qi" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommand.java index 475a41525..55021ed41 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommand.java @@ -5,7 +5,6 @@ import com.djrapitops.plugin.command.CommandUtils; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Permissions; @@ -42,8 +41,6 @@ public class RegisterCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -54,6 +51,8 @@ public class RegisterCommand extends SubCommand { sCol + " Registering a user for another player requires " + Permissions.MANAGE_WEB.getPerm() + " permission.", sCol + " Passwords are hashed with PBKDF2 (64,000 iterations of SHA1) using a cryptographically-random salt." }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommandFilter.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommandFilter.java index 658f1162c..222e1b5b8 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommandFilter.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/RegisterCommandFilter.java @@ -19,5 +19,4 @@ public class RegisterCommandFilter implements Filter { || message.contains("command: /plan webuser register"); return !block; } - } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/SearchCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/SearchCommand.java index 34e9464a8..c1329dc29 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/SearchCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/SearchCommand.java @@ -4,7 +4,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.utilities.FormattingUtils; import main.java.com.djrapitops.plan.Permissions; @@ -40,8 +39,6 @@ public class SearchCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -51,6 +48,8 @@ public class SearchCommand extends SubCommand { tCol + " Used to get a list of Player names that match the given argument.", sCol + " Example: /plan search 123 - Finds all users with 123 in their name." }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/WebUserCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/WebUserCommand.java index 1f367123b..7aa69b078 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/WebUserCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/WebUserCommand.java @@ -3,7 +3,6 @@ package main.java.com.djrapitops.plan.command.commands; import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.TreeCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import main.java.com.djrapitops.plan.Permissions; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.command.commands.webuser.WebCheckCommand; @@ -28,8 +27,6 @@ public class WebUserCommand extends TreeCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -43,6 +40,8 @@ public class WebUserCommand extends TreeCommand { tCol + " 2 - Access to own inspect page", sCol + " Alias: /plan web" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java index 1ff6f2b8e..6aba02654 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java @@ -4,7 +4,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; @@ -40,8 +39,6 @@ public class ManageClearCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -52,6 +49,8 @@ public class ManageClearCommand extends SubCommand { sCol + " Plugin should be reloaded after successful clear.", sCol + " Alias: /plan pl" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHotswapCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHotswapCommand.java index 83f949061..30aff5272 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHotswapCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHotswapCommand.java @@ -4,7 +4,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Permissions; @@ -40,8 +39,6 @@ public class ManageHotswapCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -51,6 +48,8 @@ public class ManageHotswapCommand extends SubCommand { tCol + " Used to change database in use on the fly.", sCol + " Does not change database if connection fails" }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java index 4388243a6..e13d5baf7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java @@ -4,7 +4,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.utilities.FormattingUtils; import com.djrapitops.plugin.utilities.player.Fetch; @@ -47,8 +46,6 @@ public class ManageImportCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -59,6 +56,8 @@ public class ManageImportCommand extends SubCommand { sCol + " Analysis will be disabled during import.", sCol + " If a lot of users are not in the database, saving may take a long time." }; + + setInDepthHelp(help); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java index fdfe830c3..30e6afc1c 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java @@ -4,7 +4,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.ISender; import com.djrapitops.plugin.command.SubCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; @@ -43,16 +42,15 @@ public class ManageRemoveCommand extends SubCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); - String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); String[] help = new String[]{ mCol + "Manage Remove command", tCol + " Used to Remove user's data from the active database." }; + + setInDepthHelp(help); } @Override 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 7be0f3d9a..2df7fa506 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java @@ -96,33 +96,33 @@ public class FormatUtils { if (years == 1) { builder.append(Settings.FORMAT_YEAR.toString()); } else { - builder.append(Settings.FORMAT_YEARS.toString().replace("%years%", "" + years)); + builder.append(Settings.FORMAT_YEARS.toString().replace("%years%", String.valueOf(years))); } } if (days != 0) { if (days == 1) { builder.append(Settings.FORMAT_DAY.toString()); } else { - builder.append(Settings.FORMAT_DAYS.toString().replace("%days%", "" + days)); + builder.append(Settings.FORMAT_DAYS.toString().replace("%days%", String.valueOf(days))); } } if (hours != 0) { - String h = Settings.FORMAT_HOURS.toString().replace("%hours%", "" + hours); - if (h.contains("%zero%") && (hours + "").length() == 1) { + String h = Settings.FORMAT_HOURS.toString().replace("%hours%", String.valueOf(hours)); + if (h.contains("%zero%") && String.valueOf(hours).length() == 1) { builder.append('0'); } builder.append(h); } if (minutes != 0) { - String m = Settings.FORMAT_MINUTES.toString().replace("%minutes%", "" + minutes); - if (m.contains("%zero%") && (minutes + "").length() == 1) { + String m = Settings.FORMAT_MINUTES.toString().replace("%minutes%", String.valueOf(minutes)); + if (m.contains("%zero%") && String.valueOf(minutes).length() == 1) { builder.append('0'); } builder.append(m); } if (seconds != 0) { - String s = Settings.FORMAT_SECONDS.toString().replace("%seconds%", "" + seconds); - if (s.contains("%zero%") && (seconds + "").length() == 1) { + String s = Settings.FORMAT_SECONDS.toString().replace("%seconds%", String.valueOf(seconds)); + if (s.contains("%zero%") && String.valueOf(seconds).length() == 1) { builder.append('0'); } builder.append(s); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/BStats.java b/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/BStats.java index 8dbc53670..7c36a2fa3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/BStats.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/BStats.java @@ -30,7 +30,6 @@ public class BStats { boolean gatherGMTimes = Settings.GATHERGMTIMES.isTrue(); boolean gatherCommands = Settings.GATHERCOMMANDS.isTrue(); - addEnabledDisabledPie("webserver_enabled", webserver); addEnabledDisabledPie("analysis_enable_refresh", analysisRefreshEnable); addEnabledDisabledPie("analysis_auto_refresh", analysisAutoRefresh); @@ -40,7 +39,7 @@ public class BStats { addEnabledDisabledPie("gather_gmtimes", gatherGMTimes); addEnabledDisabledPie("gather_commands", gatherCommands); - String serverType = plugin.getDB().getName(); + String serverType = plugin.getServer().getName(); String databaseType = plugin.getDB().getName(); addStringSettingPie("server_type", serverType); From ce8c6bb1690d60b617a138275d97cf4eb20a7a3e Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Fri, 28 Jul 2017 19:37:25 +0200 Subject: [PATCH 3/5] Fixing DouglasPeuckerAlgorithm Typo --- .../djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java | 4 ++-- ...uglasPeckerAlgorithm.java => DouglasPeuckerAlgorithm.java} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename Plan/src/main/java/com/djrapitops/plan/utilities/analysis/{DouglasPeckerAlgorithm.java => DouglasPeuckerAlgorithm.java} (93%) diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java index 2f88c0b8b..5b6c72142 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java @@ -7,7 +7,7 @@ package main.java.com.djrapitops.plan.ui.html.graphs; import com.djrapitops.plugin.api.TimeAmount; import com.djrapitops.plugin.utilities.Verify; -import main.java.com.djrapitops.plan.utilities.analysis.DouglasPeckerAlgorithm; +import main.java.com.djrapitops.plan.utilities.analysis.DouglasPeuckerAlgorithm; import main.java.com.djrapitops.plan.utilities.analysis.Point; import main.java.com.djrapitops.plan.utilities.comparators.PointComparator; @@ -32,7 +32,7 @@ public class ScatterGraphCreator { arrayBuilder.append("["); if (reducePoints) { - points = DouglasPeckerAlgorithm.reducePoints(points, 0); + points = DouglasPeuckerAlgorithm.reducePoints(points, 0); } if (reduceGapTriangles) { diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeckerAlgorithm.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java similarity index 93% rename from Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeckerAlgorithm.java rename to Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java index ae1de46bd..1694ef16b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeckerAlgorithm.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java @@ -5,13 +5,13 @@ import java.util.Arrays; import java.util.List; /** - * Ramer-Douglas-Pecker Point Reduction Algorithm for reducing points from + * Ramer-Douglas-Peucker Point Reduction Algorithm for reducing points from * graphs. * * @author Rsl1122 * @since 3.5.2 */ -public class DouglasPeckerAlgorithm { +public class DouglasPeuckerAlgorithm { public static List reducePoints(List points, double epsilon) { if (points.isEmpty()) { From d7f4168aa68a0b8c8fd7e23c55759a49eede49a7 Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Sat, 29 Jul 2017 04:42:13 +0200 Subject: [PATCH 4/5] Fixes some memory leaks by closing Scanner, FileWriter, FileOutputStreams... Fixes some other in-depth command help Fixes equality tests with floating point values Adds hashCode() for UserData Fixes some equals methods for checking if doubles are equals -> Using Double.compare(x1, x2) == 0 instead of x1 == x2 Replaces Throwable in Catch blocks with Exception to prevent catching Errors like OutOfMemoryError or InternalError. Removes in RawData (unused) Changes the abstract class DBCallableProcessor to an interface Changes try to try-with-resource Removes some parentheses Changes some HashMap returns to Map Changes some HashSet returns to Set Removes unused variables Further conversion to String.valueOf(Primitive) to save memory and CPU cycles Changes all .values() or .keySet() calls to .entrySet() when both values are being used, that saves memory and CPU cycles Fixes some JavaDoc comments Corrects some Enum names to match the Java Convention Naming Scheme for them Removes unused methods which aren't going to be used in the future Removes unnecessary thrown Exceptions Converts some variables to local variables Add @Override annotation Removed some commented-out code Changed some method names to be more meaningful and match the Java Naming Conventions Converts the local variable "df" in MathUtils to a global one Changes some access-level modifiers More little performance fixes and code cleanups --- .../main/java/com/djrapitops/plan/Log.java | 7 ++ .../main/java/com/djrapitops/plan/Phrase.java | 5 +- .../main/java/com/djrapitops/plan/Plan.java | 115 ++++++++++++------ .../plan/command/ConditionUtils.java | 7 ++ .../djrapitops/plan/command/PlanCommand.java | 5 +- .../plan/command/commands/AnalyzeCommand.java | 8 +- .../command/commands/QuickAnalyzeCommand.java | 10 +- .../commands/manage/ManageRestoreCommand.java | 4 +- .../djrapitops/plan/data/AnalysisData.java | 4 +- .../java/com/djrapitops/plan/data/TPS.java | 9 +- .../com/djrapitops/plan/data/UserData.java | 98 +++++++++------ .../plan/data/additional/HookHandler.java | 2 +- .../plan/data/analysis/ActivityPart.java | 2 +- .../plan/data/analysis/CommandUsagePart.java | 2 +- .../plan/data/analysis/GamemodePart.java | 2 +- .../plan/data/analysis/GeolocationPart.java | 2 +- .../plan/data/analysis/JoinInfoPart.java | 2 +- .../plan/data/analysis/KillPart.java | 2 +- .../plan/data/analysis/PlayerCountPart.java | 2 +- .../plan/data/analysis/PlaytimePart.java | 2 +- .../plan/data/analysis/RawData.java | 7 +- .../plan/data/analysis/TPSPart.java | 2 +- .../plan/data/cache/DBCallableProcessor.java | 6 +- .../plan/data/cache/DataCacheHandler.java | 6 +- .../data/cache/GeolocationCacheHandler.java | 25 +++- .../plan/data/cache/queue/Consumer.java | 3 + .../data/cache/queue/DataCacheGetQueue.java | 10 +- .../data/cache/queue/DataCacheSaveQueue.java | 9 +- .../plan/data/handling/ChatHandling.java | 10 +- .../data/handling/importing/ImportUtils.java | 2 +- .../plan/data/handling/info/ChatInfo.java | 2 +- .../listeners/PlanDeathEventListener.java | 4 +- .../com/djrapitops/plan/database/DBUtils.java | 7 ++ .../plan/database/databases/SQLDB.java | 30 ++++- .../plan/database/tables/CommandUseTable.java | 31 +++-- .../plan/database/tables/GMTimesTable.java | 39 +++--- .../plan/database/tables/IPsTable.java | 36 +++++- .../plan/database/tables/KillsTable.java | 23 +++- .../plan/database/tables/LocationsTable.java | 1 + .../plan/database/tables/NicknamesTable.java | 31 +++-- .../plan/database/tables/SessionsTable.java | 27 +++- .../plan/database/tables/Table.java | 15 ++- .../plan/database/tables/UsersTable.java | 10 +- .../com/djrapitops/plan/ui/html/Html.java | 20 +-- .../ui/html/RecentPlayersButtonsCreator.java | 7 ++ .../plan/ui/html/graphs/CPUGraphCreator.java | 8 ++ .../html/graphs/NewPlayersGraphCreator.java | 7 ++ .../graphs/PlayerActivityGraphCreator.java | 12 +- .../ui/html/graphs/PunchCardGraphCreator.java | 8 ++ .../plan/ui/html/graphs/RamGraphCreator.java | 7 ++ .../ui/html/graphs/ScatterGraphCreator.java | 12 +- ...SessionLengthDistributionGraphCreator.java | 26 ++-- .../plan/ui/html/graphs/TPSGraphCreator.java | 7 ++ .../ui/html/graphs/WorldLoadGraphCreator.java | 7 ++ .../html/tables/CommandUseTableCreator.java | 7 ++ .../ui/html/tables/KillsTableCreator.java | 7 ++ .../ui/html/tables/PlayersTableCreator.java | 7 ++ .../com/djrapitops/plan/ui/text/TextUI.java | 7 ++ .../plan/ui/webserver/Authenticator.java | 3 +- .../plan/ui/webserver/WebSocketServer.java | 87 +++---------- .../response/PlayersPageResponse.java | 13 +- .../djrapitops/plan/utilities/Benchmark.java | 7 ++ .../com/djrapitops/plan/utilities/Check.java | 9 +- .../plan/utilities/FormatUtils.java | 11 +- .../djrapitops/plan/utilities/HtmlUtils.java | 21 +++- .../plan/utilities/ManageUtils.java | 10 +- .../djrapitops/plan/utilities/MiscUtils.java | 9 +- .../plan/utilities/NewPlayerCreator.java | 7 ++ .../plan/utilities/PassEncryptUtil.java | 19 ++- .../plan/utilities/PlaceholderUtils.java | 23 ++-- .../plan/utilities/analysis/Analysis.java | 11 +- .../utilities/analysis/AnalysisUtils.java | 66 +++++----- .../analysis/DouglasPeuckerAlgorithm.java | 9 +- .../utilities/analysis/ExportUtility.java | 14 ++- .../plan/utilities/analysis/Line.java | 1 - .../plan/utilities/analysis/MathUtils.java | 7 ++ .../utilities/comparators/MapComparator.java | 11 +- .../plan/utilities/metrics/Metrics.java | 4 +- .../plan/utilities/uuid/UUIDUtility.java | 7 ++ .../java/com/djrapitops/plan/PhraseTest.java | 6 +- .../com/djrapitops/plan/SettingsTest.java | 2 +- .../plan/data/cache/DataCacheHandlerTest.java | 2 +- .../plan/data/cache/SessionCacheTest.java | 2 +- .../queue/DataCacheProcessQueueTest.java | 2 +- .../cache/queue/DataCacheSaveQueueTest.java | 1 - .../plan/data/handling/ChatHandlingTest.java | 4 +- .../plan/data/handling/info/KickInfoTest.java | 2 +- .../data/handling/info/LogoutInfoTest.java | 1 - .../java/com/djrapitops/plan/ui/HtmlTest.java | 4 +- .../plan/utilities/FormatUtilsTest.java | 2 +- .../plan/utilities/HtmlUtilsTest.java | 2 +- .../plan/utilities/ManageUtilsTest.java | 2 +- .../utilities/analysis/AnalysisUtilsTest.java | 2 +- .../utilities/analysis/MathUtilsTest.java | 18 +-- 94 files changed, 777 insertions(+), 399 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/Log.java b/Plan/src/main/java/com/djrapitops/plan/Log.java index 2e5cb88ba..e64feca63 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Log.java +++ b/Plan/src/main/java/com/djrapitops/plan/Log.java @@ -12,6 +12,13 @@ import java.util.Collection; */ public class Log { + /** + * Constructor used to hide the public constructor + */ + private Log() { + throw new IllegalStateException("Utility Class"); + } + /** * Logs the message to the console as INFO. * diff --git a/Plan/src/main/java/com/djrapitops/plan/Phrase.java b/Plan/src/main/java/com/djrapitops/plan/Phrase.java index 5f2d44d1b..2255867eb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Phrase.java +++ b/Plan/src/main/java/com/djrapitops/plan/Phrase.java @@ -189,8 +189,7 @@ public enum Phrase { } static void loadLocale(File localeFile) { - try { - Scanner localeScanner = new Scanner(localeFile, "UTF-8"); + try (Scanner localeScanner = new Scanner(localeFile, "UTF-8")) { List localeRows = new ArrayList<>(); while (localeScanner.hasNextLine()) { String line = localeScanner.nextLine(); @@ -210,7 +209,7 @@ public enum Phrase { } } } catch (IOException e) { - + Log.error("Error at Locale Scanning: " + e.getCause()); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java index 88e7ed60f..31b566431 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Plan.java +++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java @@ -45,8 +45,10 @@ import main.java.com.djrapitops.plan.utilities.metrics.BStats; import org.bukkit.Bukkit; import java.io.*; +import java.net.MalformedURLException; import java.net.URL; import java.util.HashSet; +import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -133,7 +135,7 @@ public class Plan extends BukkitPlugin { Benchmark.start("Enable: Init Database"); Log.info(Phrase.DB_INIT + ""); - if (Check.isTrue_Error(initDatabase(), Phrase.DB_FAILURE_DISABLE.toString())) { + if (Check.ErrorIfFalse(initDatabase(), Phrase.DB_FAILURE_DISABLE.toString())) { Log.info(Phrase.DB_ESTABLISHED.parse(db.getConfigName())); } else { disablePlugin(); @@ -274,7 +276,7 @@ public class Plan extends BukkitPlugin { databases.add(new MySQLDB(this)); databases.add(new SQLiteDB(this)); - String dbType = (Settings.DB_TYPE + "").toLowerCase().trim(); + String dbType = Settings.DB_TYPE.toString().toLowerCase().trim(); for (Database database : databases) { String databaseType = database.getConfigName().toLowerCase().trim(); @@ -284,11 +286,13 @@ public class Plan extends BukkitPlugin { break; } } + if (!Verify.notNull(db)) { Log.info(Phrase.DB_TYPE_DOES_NOT_EXIST.toString() + " " + dbType); return false; } - return Check.isTrue_Error(db.init(), Phrase.DB_FAILURE_DISABLE.toString()); + + return Check.ErrorIfFalse(db.init(), Phrase.DB_FAILURE_DISABLE.toString()); } private void startAnalysisRefreshTask(int everyXMinutes) throws IllegalStateException { @@ -300,9 +304,7 @@ public class Plan extends BukkitPlugin { @Override public void run() { Log.debug("Running PeriodicalAnalysisTask"); - if (!analysisCache.isCached()) { - analysisCache.updateCache(); - } else if (MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > TimeAmount.MINUTE.ms()) { + if (!analysisCache.isCached() || MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > TimeAmount.MINUTE.ms()) { analysisCache.updateCache(); } } @@ -331,10 +333,14 @@ public class Plan extends BukkitPlugin { */ public void writeNewLocaleFile() { File genLocale = new File(getDataFolder(), "locale_EN.txt"); - try { - genLocale.createNewFile(); - FileWriter fw = new FileWriter(genLocale, true); - PrintWriter pw = new PrintWriter(fw); + try ( + FileWriter fw = new FileWriter(genLocale, true); + PrintWriter pw = new PrintWriter(fw) + ) { + if (genLocale.createNewFile()) { + Log.debug(genLocale.getAbsoluteFile() + " created"); + } + for (Phrase p : Phrase.values()) { pw.println(p.name() + " <> " + p.parse()); pw.flush(); @@ -350,41 +356,76 @@ public class Plan extends BukkitPlugin { } private void initLocale() { + String defaultLocale = "Default: EN"; + String locale = Settings.LOCALE.toString().toUpperCase(); Benchmark.start("Enable: Initializing locale"); File localeFile = new File(getDataFolder(), "locale.txt"); - boolean skipLoc = false; - String usingLocale = ""; + + String usingLocale; + if (localeFile.exists()) { Phrase.loadLocale(localeFile); Html.loadLocale(localeFile); - skipLoc = true; - usingLocale = "locale.txt"; + + stopInitLocale(defaultLocale); + return; } - if (!locale.equals("DEFAULT")) { - try { - if (!skipLoc) { - URL localeURL = new URL("https://raw.githubusercontent.com/Rsl1122/Plan-PlayerAnalytics/master/Plan/localization/locale_" + locale + ".txt"); - InputStream inputStream = localeURL.openStream(); - OutputStream outputStream = new FileOutputStream(localeFile); - int read; - byte[] bytes = new byte[1024]; - while ((read = inputStream.read(bytes)) != -1) { - outputStream.write(bytes, 0, read); - } - Phrase.loadLocale(localeFile); - Html.loadLocale(localeFile); - usingLocale = locale; - localeFile.delete(); - } - } catch (FileNotFoundException ex) { - Log.error("Attempted using locale that doesn't exist."); - usingLocale = "Default: EN"; - } catch (IOException e) { + + if (locale.equals("DEFAULT")) { + stopInitLocale(defaultLocale); + return; + } + + String urlString = "https://raw.githubusercontent.com/Rsl1122/Plan-PlayerAnalytics/master/Plan/localization/locale_" + locale + ".txt"; + + URL localeURL; + try { + localeURL = new URL(urlString); + } catch (MalformedURLException e) { + Log.error("Error at parsing \"" + urlString + "\" to an URL"); //Shouldn't ever happen + + stopInitLocale(defaultLocale); + return; + } + + try (InputStream inputStream = localeURL.openStream(); + OutputStream outputStream = new FileOutputStream(localeFile)) { + + int read; + byte[] bytes = new byte[1024]; + while ((read = inputStream.read(bytes)) != -1) { + outputStream.write(bytes, 0, read); } - } else { - usingLocale = "Default: EN"; + + Phrase.loadLocale(localeFile); + Html.loadLocale(localeFile); + usingLocale = locale; + + if (localeFile.delete()) { + Log.debug(localeFile.getAbsoluteFile() + " (Locale File) deleted"); + } + + stopInitLocale(usingLocale); + } catch (FileNotFoundException ex) { + Log.error("Attempted using locale that doesn't exist."); + + stopInitLocale(defaultLocale); + } catch (IOException e) { + Log.error("Error at loading locale from GitHub, using default locale."); + + stopInitLocale(defaultLocale); } + } + + /** + * Stops initializing the locale + * + * @implNote Removes clutter in the method + * + * @param usingLocale The locale that's used + */ + private void stopInitLocale(String usingLocale) { Benchmark.stop("Enable: Initializing locale"); Log.info("Using locale: " + usingLocale); } @@ -450,7 +491,7 @@ public class Plan extends BukkitPlugin { * * @return Set containing the SqLite and MySQL objects. */ - public HashSet getDatabases() { + public Set getDatabases() { return databases; } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/ConditionUtils.java b/Plan/src/main/java/com/djrapitops/plan/command/ConditionUtils.java index aea74ca74..346ef4219 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/ConditionUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/ConditionUtils.java @@ -14,6 +14,13 @@ import java.util.UUID; */ public class ConditionUtils { + /** + * Constructor used to hide the public constructor + */ + private ConditionUtils() { + throw new IllegalStateException("Utility class"); + } + /** * Check if the plugin can display the data. * diff --git a/Plan/src/main/java/com/djrapitops/plan/command/PlanCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/PlanCommand.java index b64543c45..9a840ab58 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/PlanCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/PlanCommand.java @@ -4,7 +4,6 @@ import com.djrapitops.plugin.command.CommandType; import com.djrapitops.plugin.command.TreeCommand; import com.djrapitops.plugin.command.defaultcmds.StatusCommand; import com.djrapitops.plugin.settings.ColorScheme; -import com.djrapitops.plugin.settings.DefaultMessages; import main.java.com.djrapitops.plan.Permissions; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.command.commands.*; @@ -35,8 +34,6 @@ public class PlanCommand extends TreeCommand { private void setHelp(Plan plugin) { ColorScheme colorScheme = plugin.getColorScheme(); - String ball = DefaultMessages.BALL.toString(); - String mCol = colorScheme.getMainColor(); String sCol = colorScheme.getSecondaryColor(); String tCol = colorScheme.getTertiaryColor(); @@ -47,6 +44,8 @@ public class PlanCommand extends TreeCommand { sCol + " /plan - List subcommands", sCol + " /plan ? - in depth help" }; + + setInDepthHelp(help); } @Override 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 363e1fcc6..5b1b2ce97 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 @@ -61,10 +61,10 @@ public class AnalyzeCommand extends SubCommand { if (!Check.isTrue(ConditionUtils.pluginHasViewCapability(), Phrase.ERROR_WEBSERVER_OFF_ANALYSIS.toString(), sender)) { return true; } - if (!Check.isTrue(analysisCache.isAnalysisEnabled(), Phrase.ERROR_ANALYSIS_DISABLED_TEMPORARILY.toString(), sender)) { - if (!analysisCache.isCached()) { - return true; - } + + if (!Check.isTrue(analysisCache.isAnalysisEnabled(), Phrase.ERROR_ANALYSIS_DISABLED_TEMPORARILY.toString(), sender) + && !analysisCache.isCached()) { + return true; } sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + ""); 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 3e9d5aef8..150543275 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 @@ -59,14 +59,14 @@ public class QuickAnalyzeCommand extends SubCommand { @Override public boolean onCommand(ISender sender, String commandLabel, String[] args) { - if (!Check.isTrue(ConditionUtils.pluginHasViewCapability(), Phrase.ERROR_WEBSERVER_OFF_ANALYSIS + "", sender)) { + if (!Check.isTrue(ConditionUtils.pluginHasViewCapability(), Phrase.ERROR_WEBSERVER_OFF_ANALYSIS.toString(), sender)) { return true; } - if (!Check.isTrue(analysisCache.isAnalysisEnabled(), Phrase.ERROR_ANALYSIS_DISABLED_TEMPORARILY + "", sender)) { - if (!analysisCache.isCached()) { - return true; - } + if (!Check.isTrue(analysisCache.isAnalysisEnabled(), Phrase.ERROR_ANALYSIS_DISABLED_TEMPORARILY.toString(), sender) + && !analysisCache.isCached()) { + return true; } + updateCache(); runMessageSenderTask(sender); diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java index 671809b8f..f0a96c11b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java @@ -73,7 +73,7 @@ public class ManageRestoreCommand extends SubCommand { public void run() { try { String backupDBName = args[0]; - boolean containsDBFileExtension = backupDBName.contains(".db"); + boolean containsDBFileExtension = backupDBName.endsWith(".db"); File backupDBFile = new File(plugin.getDataFolder(), backupDBName + (containsDBFileExtension ? "" : ".db")); if (!Check.isTrue(Verify.exists(backupDBFile), Phrase.MANAGE_ERROR_BACKUP_FILE_NOT_FOUND + " " + args[0], sender)) { @@ -81,7 +81,7 @@ public class ManageRestoreCommand extends SubCommand { } if (containsDBFileExtension) { - backupDBName = backupDBName.replace(".db", ""); + backupDBName = backupDBName.substring(0, backupDBName.length() - 3); } SQLiteDB backupDB = new SQLiteDB(plugin, backupDBName); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/AnalysisData.java b/Plan/src/main/java/com/djrapitops/plan/data/AnalysisData.java index b47e590d3..3c89fb8f9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/AnalysisData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/AnalysisData.java @@ -25,7 +25,7 @@ import java.util.Map; * @author Rsl1122 * @since 3.5.2 */ -public class AnalysisData extends RawData { +public class AnalysisData extends RawData { private final ActivityPart activityPart; private final CommandUsagePart commandUsagePart; @@ -136,7 +136,7 @@ public class AnalysisData extends RawData { addValue("version", planVersion); final List parts = getAllParts(); - parts.forEach((part) -> { + parts.forEach(part -> { try { Benchmark.start("Analysis Phase: " + part.getClass().getSimpleName()); part.analyseData(); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/TPS.java b/Plan/src/main/java/com/djrapitops/plan/data/TPS.java index 300efb0f3..7c8bf34cd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/TPS.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/TPS.java @@ -119,17 +119,20 @@ public class TPS { if (this == obj) { return true; } + if (obj == null) { return false; } + if (getClass() != obj.getClass()) { return false; } + final TPS other = (TPS) obj; - return this.date == other.date - && Double.doubleToLongBits(this.tps) == Double.doubleToLongBits(other.tps) + return date == other.date + && Double.compare(this.tps, other.tps) == 0 && this.players == other.players - && this.cpuUsage == other.cpuUsage; + && Double.compare(cpuUsage, other.cpuUsage) == 0; } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/data/UserData.java b/Plan/src/main/java/com/djrapitops/plan/data/UserData.java index 4818760aa..3a8571c37 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/UserData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/UserData.java @@ -180,7 +180,7 @@ public class UserData { public String toString() { try { return "{" + "accessing:" + accessing + "|uuid:" + uuid + "|ips:" + ips + "|nicknames:" + nicknames + "|lastNick:" + lastNick + "|registered:" + registered + "|lastPlayed:" + lastPlayed + "|playTime:" + playTime + "|loginTimes:" + loginTimes + "|timesKicked:" + timesKicked + "|lastGmSwapTime:" + lastGmSwapTime + "|lastGamemode:" + lastGamemode + "|gmTimes:" + gmTimes + "|isOp:" + isOp + "|isBanned:" + isBanned + "|geolocation:" + geolocation + "|mobKills:" + mobKills + "|playerKills:" + playerKills + "|deaths:" + deaths + "|name:" + name + "|isOnline:" + isOnline + "|currentSession:" + currentSession + "|sessions:" + sessions + '}'; - } catch (Throwable e) { + } catch (Exception e) { return "UserData: Error on toString:" + e; } } @@ -752,41 +752,6 @@ public class UserData { this.lastNick = lastNick; } - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - - final UserData other = (UserData) obj; -// if (this.lastPlayed != other.lastPlayed) { -// return false; -// } - - return this.registered == other.registered - && this.playTime == other.playTime - && this.loginTimes == other.loginTimes - && this.timesKicked == other.timesKicked - && this.lastGmSwapTime == other.lastGmSwapTime - && this.mobKills == other.mobKills - && this.deaths == other.deaths - && Objects.equals(this.lastNick, other.lastNick) - && Objects.equals(this.name, other.name) - && Objects.equals(this.uuid, other.uuid) - && Objects.equals(this.ips, other.ips) - && Objects.equals(this.nicknames, other.nicknames) - && Objects.equals(this.lastGamemode, other.lastGamemode) - && Objects.equals(this.gmTimes, other.gmTimes) - && Objects.equals(this.playerKills, other.playerKills) - && Objects.equals(this.sessions, other.sessions); - } - /** * Check whether or not the object should be cleared from cache after it has * been saved. @@ -814,4 +779,65 @@ public class UserData { public void setGeolocation(String geolocation) { this.geolocation = geolocation; } + + @Override + public int hashCode() { + int result = sessions.hashCode(); + result = 31 * result + accessing; + result = 31 * result + (clearAfterSave ? 1 : 0); + result = 31 * result + uuid.hashCode(); + result = 31 * result + ips.hashCode(); + result = 31 * result + nicknames.hashCode(); + result = 31 * result + lastNick.hashCode(); + result = 31 * result + (int) (registered ^ (registered >>> 32)); + result = 31 * result + (int) (lastPlayed ^ (lastPlayed >>> 32)); + result = 31 * result + (int) (playTime ^ (playTime >>> 32)); + result = 31 * result + loginTimes; + result = 31 * result + timesKicked; + result = 31 * result + (int) (lastGmSwapTime ^ (lastGmSwapTime >>> 32)); + result = 31 * result + lastGamemode.hashCode(); + result = 31 * result + gmTimes.hashCode(); + result = 31 * result + (isOp ? 1 : 0); + result = 31 * result + (isBanned ? 1 : 0); + result = 31 * result + geolocation.hashCode(); + result = 31 * result + mobKills; + result = 31 * result + playerKills.hashCode(); + result = 31 * result + deaths; + result = 31 * result + name.hashCode(); + result = 31 * result + (isOnline ? 1 : 0); + result = 31 * result + currentSession.hashCode(); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + + final UserData other = (UserData) obj; + + return this.registered == other.registered + && this.playTime == other.playTime + && this.loginTimes == other.loginTimes + && this.timesKicked == other.timesKicked + && this.lastGmSwapTime == other.lastGmSwapTime + && this.mobKills == other.mobKills + && this.deaths == other.deaths + && Objects.equals(this.lastNick, other.lastNick) + && Objects.equals(this.name, other.name) + && Objects.equals(this.uuid, other.uuid) + && Objects.equals(this.ips, other.ips) + && Objects.equals(this.nicknames, other.nicknames) + && Objects.equals(this.lastGamemode, other.lastGamemode) + && Objects.equals(this.gmTimes, other.gmTimes) + && Objects.equals(this.playerKills, other.playerKills) + && Objects.equals(this.sessions, other.sessions); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/additional/HookHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/additional/HookHandler.java index 517ba0b0d..45eaf5d43 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/additional/HookHandler.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/additional/HookHandler.java @@ -30,7 +30,7 @@ public class HookHandler { configHandler = new PluginConfigSectionHandler(plugin); try { Bridge.hook(this); - } catch (Throwable e) { + } catch (Exception e) { Log.toLog(this.getClass().getName(), e); Log.error("Plan Plugin Bridge not included in the plugin jar."); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/ActivityPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/ActivityPart.java index dc2d72503..fc5afe461 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/ActivityPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/ActivityPart.java @@ -36,7 +36,7 @@ import java.util.stream.Collectors; * @author Rsl1122 * @since 3.5.2 */ -public class ActivityPart extends RawData { +public class ActivityPart extends RawData { private final JoinInfoPart joins; private final TPSPart tpsPart; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java index 9224005a3..8375abd77 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/CommandUsagePart.java @@ -22,7 +22,7 @@ import java.util.Map; * @author Rsl1122 * @since 3.5.2 */ -public class CommandUsagePart extends RawData { +public class CommandUsagePart extends RawData { private final Map commandUsage; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/GamemodePart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/GamemodePart.java index 150d9df1f..8b6d15f0b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/GamemodePart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/GamemodePart.java @@ -20,7 +20,7 @@ import java.util.Arrays; * @author Rsl1122 * @since 3.5.2 */ -public class GamemodePart extends RawData { +public class GamemodePart extends RawData { private long survivalTime; private long creativeTime; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java index 39ac9ebcd..3c56d3ce0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/GeolocationPart.java @@ -15,7 +15,7 @@ import java.util.Map; * @author Rsl1122 * @since 3.5.2 */ -public class GeolocationPart extends RawData { +public class GeolocationPart extends RawData { private final Map geoLocations; private final Map geoCodes; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/JoinInfoPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/JoinInfoPart.java index 2fa550f33..96eae1576 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/JoinInfoPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/JoinInfoPart.java @@ -25,7 +25,7 @@ import java.util.stream.Collectors; * @author Rsl1122 * @since 3.5.2 */ -public class JoinInfoPart extends RawData { +public class JoinInfoPart extends RawData { private final Map> sessions; private final List registered; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/KillPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/KillPart.java index 84932918e..68e93e54d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/KillPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/KillPart.java @@ -22,7 +22,7 @@ import java.util.UUID; * @author Rsl1122 * @since 3.5.2 */ -public class KillPart extends RawData { +public class KillPart extends RawData { private final PlayerCountPart playerCount; private final Map> playerKills; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlayerCountPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlayerCountPart.java index 6ebde1eee..fd29df0d4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlayerCountPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlayerCountPart.java @@ -19,7 +19,7 @@ import java.util.UUID; * @author Rsl1122 * @since 3.5.2 */ -public class PlayerCountPart extends RawData { +public class PlayerCountPart extends RawData { private final Set uuids; private final Set ops; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlaytimePart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlaytimePart.java index a4d0f12ee..7070e8776 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlaytimePart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/PlaytimePart.java @@ -13,7 +13,7 @@ import main.java.com.djrapitops.plan.utilities.analysis.MathUtils; * @author Rsl1122 * @since 3.5.2 */ -public class PlaytimePart extends RawData { +public class PlaytimePart extends RawData { private final PlayerCountPart playerCount; private long totalPlaytime; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/RawData.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/RawData.java index 9c6d53784..5cdcdfdc3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/RawData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/RawData.java @@ -9,11 +9,10 @@ import java.util.Map; /** * Extending objects should represent, add together and analyse data. * - * @param The extending class, return value for get method. * @author Rsl1122 * @since 3.5.2 */ -public abstract class RawData { +public abstract class RawData { private final Map replaceMap; @@ -79,10 +78,10 @@ public abstract class RawData { private String addPlaceholderSigns(String placeholder) { if (placeholder.charAt(0) != '%') { - placeholder = '%' + placeholder; + placeholder = "%" + placeholder; } if (placeholder.charAt(placeholder.length() - 1) != '%') { - placeholder += '%'; + placeholder += "%"; } return placeholder; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/analysis/TPSPart.java b/Plan/src/main/java/com/djrapitops/plan/data/analysis/TPSPart.java index bbf0154f1..e76bc9c7d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/analysis/TPSPart.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/analysis/TPSPart.java @@ -26,7 +26,7 @@ import java.util.List; * @author Rsl1122 * @since 3.5.2 */ -public class TPSPart extends RawData { +public class TPSPart extends RawData { private final List tpsData; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/DBCallableProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/DBCallableProcessor.java index 897809186..a12c62d72 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/DBCallableProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/DBCallableProcessor.java @@ -3,7 +3,7 @@ package main.java.com.djrapitops.plan.data.cache; import main.java.com.djrapitops.plan.data.UserData; /** - * This abstract class can be extended with anything as the process method and + * This interface can be extended with anything as the process method and * given to the Database. *

* The process method will be called with the UserData object fetched from the @@ -12,7 +12,7 @@ import main.java.com.djrapitops.plan.data.UserData; * @author Rsl1122 * @since 2.6.0 */ -public abstract class DBCallableProcessor { +public interface DBCallableProcessor { /** * Method used to do multiple things to UserData objects such as Caching, @@ -21,5 +21,5 @@ public abstract class DBCallableProcessor { * @param data UserData object given to the DBCallableProcessor by the * method it was given as parameter to. */ - public abstract void process(UserData data); + void process(UserData data); } 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 0fe0d2412..c395283d1 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 @@ -384,7 +384,7 @@ public class DataCacheHandler extends SessionCache { */ public void saveHandlerDataToCache() { final List onlinePlayers = plugin.fetch().getOnlinePlayers(); - onlinePlayers.forEach((p) -> saveHandlerDataToCache(p, false)); + onlinePlayers.forEach(p -> saveHandlerDataToCache(p, false)); } private void saveHandlerDataToCache(IPlayer player, boolean pool) { @@ -477,9 +477,9 @@ public class DataCacheHandler extends SessionCache { /** * Used to get the contents of the cache. * - * @return The HashMap containing all Cached UserData + * @return The Map containing all Cached UserData */ - public HashMap getDataCache() { + public Map getDataCache() { return dataCache; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/GeolocationCacheHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/GeolocationCacheHandler.java index f4a7fe0ce..5dcde6df6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/GeolocationCacheHandler.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/GeolocationCacheHandler.java @@ -7,6 +7,7 @@ import main.java.com.djrapitops.plan.utilities.Benchmark; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.net.MalformedURLException; import java.net.URL; import java.util.Map; @@ -21,6 +22,14 @@ import java.util.Map; * @since 3.5.5 */ public class GeolocationCacheHandler { + + /** + * Constructor used to hide the public constructor + */ + private GeolocationCacheHandler() { + throw new IllegalStateException("Utility class"); + } + private static final Cache geolocationCache = CacheBuilder.newBuilder() .maximumSize(10000) .build(); @@ -71,12 +80,20 @@ public class GeolocationCacheHandler { */ private static String getUncachedCountry(String ipAddress) { Benchmark.start("getUncachedCountry"); + + URL url; + + String urlString = "http://freegeoip.net/csv/" + ipAddress; try { - URL url = new URL("http://freegeoip.net/csv/" + ipAddress); - BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); + url = new URL(urlString); + } catch (MalformedURLException e) { + Log.error("The URL \"" + urlString + "\" couldn't be converted to URL: " + e.getCause()); //Shouldn't ever happen + return "Not Known"; + } + + try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) { String resultLine = in.readLine(); - Log.debug(resultLine); - in.close(); + Log.debug("Result for country request for " + ipAddress + ": " + resultLine); String[] results = resultLine.split(","); String result = results[2]; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/Consumer.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/Consumer.java index 7fe3065ed..7c99348e0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/Consumer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/Consumer.java @@ -1,6 +1,7 @@ package main.java.com.djrapitops.plan.data.cache.queue; import com.djrapitops.plugin.task.AbsRunnable; +import main.java.com.djrapitops.plan.Log; import java.util.concurrent.BlockingQueue; @@ -34,6 +35,8 @@ public abstract class Consumer extends AbsRunnable { consume(queue.take()); } } catch (InterruptedException ex) { + Log.error("Consumer interrupted: " + ex.getCause()); + Thread.currentThread().interrupt(); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java index 686efed11..f7151d29d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheGetQueue.java @@ -50,7 +50,7 @@ public class DataCacheGetQueue extends Queue } public boolean containsUUIDtoBeCached(UUID uuid) { - return uuid != null && new ArrayList<>(queue).stream().anyMatch((map) -> (map.get(uuid) != null && map.get(uuid).size() >= 2)); + return uuid != null && new ArrayList<>(queue).stream().anyMatch(map -> (map.get(uuid) != null && map.get(uuid).size() >= 2)); } } @@ -70,11 +70,15 @@ class GetConsumer extends Consumer>> { } try { - for (UUID uuid : processors.keySet()) { + for (Map.Entry> entrySet : processors.entrySet()) { + UUID uuid = entrySet.getKey(); + if (uuid == null) { continue; } - List processorsList = processors.get(uuid); + + List processorsList = entrySet.getValue(); + if (processorsList != null) { Log.debug(uuid + ": Get, For:" + processorsList.size()); try { diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueue.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueue.java index 8ac9a9c44..31d69b64f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueue.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheSaveQueue.java @@ -116,13 +116,11 @@ class SaveConsumer extends Consumer { db.saveUserData(data); data.stopAccessing(); Log.debug(uuid + ": Saved!"); - if (data.shouldClearAfterSave()) { - if (handler != null) { - handler.getClearTask().scheduleForClear(uuid); - } + if (data.shouldClearAfterSave() + && handler != null) { + handler.getClearTask().scheduleForClear(uuid); } } catch (SQLException ex) { -// queue.add(data); Log.toLog(this.getClass().getName(), ex); } } @@ -132,6 +130,7 @@ class SaveConsumer extends Consumer { if (db != null) { db = null; } + if (handler != null) { handler = null; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/ChatHandling.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/ChatHandling.java index a8e47afe9..c46a34446 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/ChatHandling.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/ChatHandling.java @@ -11,15 +11,21 @@ import main.java.com.djrapitops.plan.data.UserData; */ public class ChatHandling { + /** + * Constructor used to hide the public constructor + */ + private ChatHandling() { + throw new IllegalStateException("Utility class"); + } + /** * Processes the information of the Event and changes UserData object * accordingly. * * @param data UserData of the player. * @param nickname Nickname of the player during the event. - * @param msg Message sent by the player. */ - public static void processChatInfo(UserData data, String nickname, String msg) { + public static void processChatInfo(UserData data, String nickname) { data.addNickname(nickname); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/ImportUtils.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/ImportUtils.java index be17fc0a7..546d315a6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/ImportUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/importing/ImportUtils.java @@ -36,7 +36,7 @@ public class ImportUtils { try { importers.put("ontime", new OnTimeImporter()); importers.put("offline", new OfflinePlayerImporter()); - } catch (Throwable e) { + } catch (Exception e) { Log.toLog("ImportUtils.getImporters", e); Log.error("Plan Plugin Bridge not included in the plugin jar."); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/info/ChatInfo.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/info/ChatInfo.java index 99def6e85..447d28f95 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/info/ChatInfo.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/info/ChatInfo.java @@ -34,7 +34,7 @@ public class ChatInfo extends HandlingInfo { if (!uData.getUuid().equals(uuid)) { return false; } - ChatHandling.processChatInfo(uData, nickname, message); + ChatHandling.processChatInfo(uData, nickname); return true; } } 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 9ee87bf58..9c25f8fd9 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 @@ -60,10 +60,10 @@ public class PlanDeathEventListener implements Listener { Material itemInHand; try { itemInHand = killer.getInventory().getItemInMainHand().getType(); - } catch (Throwable e) { + } catch (Exception e) { try { itemInHand = killer.getInventory().getItemInHand().getType(); // Support for non dual wielding versions. - } catch (Throwable e2) { + } catch (Exception e2) { itemInHand = Material.AIR; } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/DBUtils.java b/Plan/src/main/java/com/djrapitops/plan/database/DBUtils.java index e60d662d4..8548c3136 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/DBUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/DBUtils.java @@ -19,6 +19,13 @@ import java.util.Map.Entry; */ public class DBUtils { + /** + * Constructor used to hide the public constructor + */ + private DBUtils() { + throw new IllegalStateException("Utility class"); + } + private static final int BATCH_SIZE = 2048; /** 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 b4c711467..b7d777365 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 @@ -15,6 +15,7 @@ import main.java.com.djrapitops.plan.utilities.FormatUtils; import java.net.InetAddress; import java.sql.Connection; import java.sql.SQLException; +import java.sql.Statement; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -63,12 +64,22 @@ public abstract class SQLDB extends Database { plugin.getRunnableFactory().createNew(new AbsRunnable("DBConnectionPingTask " + getName()) { @Override public void run() { + Statement statement = null; try { if (connection != null && !connection.isClosed()) { - connection.createStatement().execute("/* ping */ SELECT 1"); + statement = connection.createStatement(); + statement.execute("/* ping */ SELECT 1"); } } catch (SQLException e) { connection = getNewConnection(); + } finally { + if (statement != null) { + try { + statement.close(); + } catch (SQLException e) { + Log.error("Error at closing statement"); + } + } } } }).runTaskTimerAsynchronously(60 * 20, 60 * 20); @@ -113,27 +124,34 @@ public abstract class SQLDB extends Database { getVersion(); newDatabase = false; } catch (Exception e) { + } if (!versionTable.createTable()) { Log.error("Failed to create table: " + versionTable.getTableName()); return false; } + if (newDatabase) { Log.info("New Database created."); setVersion(7); } + Benchmark.start("Database: Create tables"); + for (Table table : getAllTables()) { if (!table.createTable()) { Log.error("Failed to create table: " + table.getTableName()); return false; } } + if (!securityTable.createTable()) { Log.error("Failed to create table: " + securityTable.getTableName()); return false; } + Benchmark.stop("Database: Create tables"); + if (!newDatabase && getVersion() < 7) { setVersion(7); } @@ -304,7 +322,7 @@ public abstract class SQLDB extends Database { List nicknames = nicknamesTable.getNicknames(userId); data.addNicknames(nicknames); - if (nicknames.size() > 0) { + if (!nicknames.isEmpty()) { data.setLastNick(nicknames.get(nicknames.size() - 1)); } @@ -397,13 +415,16 @@ public abstract class SQLDB extends Database { Map> sessions = new HashMap<>(); Map> gmTimes = new HashMap<>(); // Put to dataset - for (UUID uuid : userDatas.keySet()) { + for (Map.Entry entrySet : userDatas.entrySet()) { + UUID uuid = entrySet.getKey(); + UserData uData = entrySet.getValue(); Integer id = userIds.get(uuid); - UserData uData = userDatas.get(uuid); + if (id == -1) { Log.debug("User not seen before, saving last: " + uuid); continue; } + uData.access(); nicknames.put(id, new HashSet<>(uData.getNicknames())); lastNicks.put(id, uData.getLastNick()); @@ -464,7 +485,6 @@ public abstract class SQLDB extends Database { checkConnection(); tpsTable.clean(); locationsTable.removeAllData(); -// sessionsTable.clean(); Log.info("Clean complete."); } catch (SQLException e) { Log.toLog(this.getClass().getName(), e); diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java index bf6de867d..b595e9acd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java @@ -90,14 +90,17 @@ public class CommandUseTable extends Table { insertCommands(newData); Map updateData = new HashMap<>(data); updateData.keySet().removeAll(newData.keySet()); - for (String cmd : saved.keySet()) { - Integer toSave = updateData.get(cmd); - if (toSave != null) { - if (toSave <= saved.get(cmd)) { - updateData.remove(cmd); - } + for (Map.Entry entrySet : saved.entrySet()) { + String cmd = entrySet.getKey(); + Integer toSave = entrySet.getValue(); + + if (toSave == null || toSave > saved.get(cmd)) { + continue; } + + updateData.remove(cmd); } + updateCommands(updateData); Benchmark.stop("Database: Save Commanduse"); } @@ -108,16 +111,20 @@ public class CommandUseTable extends Table { String updateStatement = "UPDATE " + tableName + " SET " + columnTimesUsed + "=? WHERE (" + columnCommand + "=?)"; statement = prepareStatement(updateStatement); boolean commitRequired = false; - for (String key : data.keySet()) { - Integer amount = data.get(key); + for (Map.Entry entrySet : data.entrySet()) { + String key = entrySet.getKey(); + Integer amount = entrySet.getValue(); + if (key.length() > 20) { continue; } + statement.setInt(1, amount); statement.setString(2, key); statement.addBatch(); commitRequired = true; } + if (commitRequired) { statement.executeBatch(); } @@ -135,16 +142,20 @@ public class CommandUseTable extends Table { + ") VALUES (?, ?)"; statement = prepareStatement(insertStatement); boolean commitRequired = false; - for (String key : data.keySet()) { - Integer amount = data.get(key); + for (Map.Entry entrySet : data.entrySet()) { + String key = entrySet.getKey(); + Integer amount = entrySet.getValue(); + if (key.length() > 20) { continue; } + statement.setString(1, key); statement.setInt(2, amount); statement.addBatch(); commitRequired = true; } + if (commitRequired) { statement.executeBatch(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java index 20672bd19..5526f2bec 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/GMTimesTable.java @@ -208,20 +208,20 @@ public class GMTimesTable extends Table { + columnSpectatorTime + "=? " + " WHERE (" + columnUserID + "=?)"); boolean commitRequired = false; - for (Integer id : gamemodeTimes.keySet()) { + for (Map.Entry> entrySet : gamemodeTimes.entrySet()) { + Integer id = entrySet.getKey(); + if (!savedIDs.contains(id)) { continue; } + statement.setInt(5, id); for (int i = 0; i < gms.length; i++) { try { - Map times = gamemodeTimes.get(id); + Map times = entrySet.getValue(); Long time = times.get(gms[i]); - if (time != null) { - statement.setLong(i + 1, time); - } else { - statement.setLong(i + 1, 0); - } + + statement.setLong(i + 1, time != null ? time : 0); } catch (NoSuchFieldError e) { statement.setLong(i + 1, 0); } @@ -229,13 +229,16 @@ public class GMTimesTable extends Table { statement.addBatch(); commitRequired = true; } + if (commitRequired) { statement.executeBatch(); } + gamemodeTimes.keySet().removeAll(savedIDs); } finally { close(statement); } + addNewGMTimesRows(gamemodeTimes); Benchmark.stop("Database: Save GMTimes"); } @@ -257,17 +260,16 @@ public class GMTimesTable extends Table { + columnSpectatorTime + ") VALUES (?, ?, ?, ?, ?)"); boolean commitRequired = false; - for (Integer id : gamemodeTimes.keySet()) { + for (Map.Entry> entrySet : gamemodeTimes.entrySet()) { + Integer id = entrySet.getKey(); + statement.setInt(1, id); for (int i = 0; i < gms.length; i++) { try { - Map times = gamemodeTimes.get(id); + Map times = entrySet.getValue(); Long time = times.get(gms[i]); - if (time != null) { - statement.setLong(i + 2, time); - } else { - statement.setLong(i + 2, 0); - } + + statement.setLong(i + 1, time != null ? time : 0); } catch (NoSuchFieldError e) { statement.setLong(i + 2, 0); } @@ -275,6 +277,7 @@ public class GMTimesTable extends Table { statement.addBatch(); commitRequired = true; } + if (commitRequired) { statement.executeBatch(); } @@ -300,15 +303,13 @@ public class GMTimesTable extends Table { for (int i = 0; i < gms.length; i++) { try { Long time = gamemodeTimes.get(gms[i]); - if (time != null) { - statement.setLong(i + 2, time); - } else { - statement.setLong(i + 2, 0); - } + + statement.setLong(i + 2, time != null ? time : 0); } catch (NoSuchFieldError e) { statement.setLong(i + 2, 0); } } + statement.execute(); } finally { close(statement); diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java index bb07eab03..e07fd29d4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java @@ -83,9 +83,11 @@ public class IPsTable extends Table { set = statement.executeQuery(); List ips = new ArrayList<>(); while (set.next()) { + String ipAddressName = set.getString(columnIP); try { - ips.add(InetAddress.getByName(set.getString(columnIP))); + ips.add(InetAddress.getByName(ipAddressName)); } catch (UnknownHostException e) { + Log.error("Host not found at getIPAddresses: " + ipAddressName); //Shouldn't ever happen } } return ips; @@ -105,11 +107,14 @@ public class IPsTable extends Table { if (ips == null) { return; } + Benchmark.start("Database: Save Ips"); ips.removeAll(getIPAddresses(userId)); + if (ips.isEmpty()) { return; } + PreparedStatement statement = null; try { statement = prepareStatement("INSERT INTO " + tableName + " (" @@ -118,14 +123,18 @@ public class IPsTable extends Table { + ") VALUES (?, ?)"); boolean commitRequired = false; for (InetAddress ip : ips) { + if (ip == null) { continue; } + statement.setInt(1, userId); statement.setString(2, ip.getHostAddress()); statement.addBatch(); + commitRequired = true; } + if (commitRequired) { statement.executeBatch(); } @@ -144,26 +153,36 @@ public class IPsTable extends Table { if (ids == null || ids.isEmpty()) { return new HashMap<>(); } + Benchmark.start("Database: Get Ips Multiple"); PreparedStatement statement = null; ResultSet set = null; + try { statement = prepareStatement("SELECT * FROM " + tableName); set = statement.executeQuery(); Map> ips = new HashMap<>(); + for (Integer id : ids) { ips.put(id, new HashSet<>()); } + while (set.next()) { Integer id = set.getInt(columnUserID); + if (!ids.contains(id)) { continue; } + + String ipAddressName = set.getString(columnIP); + try { - ips.get(id).add(InetAddress.getByName(set.getString(columnIP))); + ips.get(id).add(InetAddress.getByName(ipAddressName)); } catch (UnknownHostException e) { + Log.error("Host not found at getIPAddresses: " + ipAddressName); //Shouldn't ever happen } } + return ips; } finally { close(set); @@ -190,19 +209,25 @@ public class IPsTable extends Table { + ") VALUES (?, ?)"); boolean commitRequired = false; int i = 0; - for (Integer id : ips.keySet()) { - Set ipAddresses = ips.get(id); + for (Map.Entry> entrySet : ips.entrySet()) { + Integer id = entrySet.getKey(); + Set ipAddresses = entrySet.getValue(); + Set s = saved.get(id); + if (s != null) { ipAddresses.removeAll(s); } + if (ipAddresses.isEmpty()) { continue; } + for (InetAddress ip : ipAddresses) { if (ip == null) { continue; } + statement.setInt(1, id); statement.setString(2, ip.getHostAddress()); statement.addBatch(); @@ -210,13 +235,14 @@ public class IPsTable extends Table { i++; } } + if (commitRequired) { Log.debug("Executing ips batch: " + i); statement.executeBatch(); } - Benchmark.stop("Database: Save Ips Multiple"); } finally { close(statement); + Benchmark.stop("Database: Save Ips Multiple"); } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java index 0f11df651..f8dd0b5f8 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java @@ -93,7 +93,7 @@ public class KillsTable extends Table { List killData = new ArrayList<>(); while (set.next()) { int victimID = set.getInt(columnVictimUserID); - UUID victimUUID = usersTable.getUserUUID(victimID + ""); + UUID victimUUID = usersTable.getUserUUID(String.valueOf(victimID)); killData.add(new KillData(victimUUID, victimID, set.getString(columnWeapon), set.getLong(columnDate))); } return killData; @@ -131,20 +131,24 @@ public class KillsTable extends Table { if (kill == null) { continue; } + statement.setInt(1, userId); int victimUserID = kill.getVictimUserID(); + if (victimUserID == -1) { victimUserID = db.getUsersTable().getUserId(kill.getVictim()); if (victimUserID == -1) { continue; } } + statement.setInt(2, victimUserID); statement.setString(3, kill.getWeapon()); statement.setLong(4, kill.getDate()); statement.addBatch(); commitRequired = true; } + if (commitRequired) { statement.executeBatch(); } @@ -200,6 +204,7 @@ public class KillsTable extends Table { if (kills == null || kills.isEmpty()) { return; } + Benchmark.start("Database: Save Kills multiple"); Map> saved = getPlayerKills(kills.keySet(), uuids); @@ -213,16 +218,22 @@ public class KillsTable extends Table { + ") VALUES (?, ?, ?, ?)"); boolean commitRequired = false; int i = 0; - for (Integer id : kills.keySet()) { - List playerKills = kills.get(id); + + for (Map.Entry> entrySet : kills.entrySet()) { + Integer id = entrySet.getKey(); + List playerKills = entrySet.getValue(); + List s = saved.get(id); + if (s != null) { playerKills.removeAll(s); } + for (KillData kill : playerKills) { if (kill == null) { continue; } + statement.setInt(1, id); int victimUserID = kill.getVictimUserID(); if (victimUserID == -1) { @@ -230,11 +241,14 @@ public class KillsTable extends Table { .stream().filter(e -> e.getValue().equals(kill.getVictim())) .map(Map.Entry::getKey) .collect(Collectors.toList()); + if (matchingIds.isEmpty()) { continue; } + victimUserID = matchingIds.get(0); } + statement.setInt(2, victimUserID); statement.setString(3, kill.getWeapon()); statement.setLong(4, kill.getDate()); @@ -242,14 +256,15 @@ public class KillsTable extends Table { commitRequired = true; i++; } + if (commitRequired) { Log.debug("Executing kills batch: " + i); statement.executeBatch(); } } - Benchmark.stop("Database: Save Kills multiple"); } finally { close(statement); + Benchmark.stop("Database: Save Kills multiple"); } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/LocationsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/LocationsTable.java index 787f097bb..705b6a787 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/LocationsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/LocationsTable.java @@ -21,6 +21,7 @@ public class LocationsTable extends Table { /** * @param db * @param usingMySQL + * @deprecated Deprecated because it isn't used anymore */ @Deprecated public LocationsTable(SQLDB db, boolean usingMySQL) { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java index cc52579f4..b94152b47 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java @@ -61,10 +61,8 @@ public class NicknamesTable extends Table { } else { query = "ALTER TABLE " + tableName + " ADD COLUMN " + columnCurrent + " boolean NOT NULL DEFAULT 0"; } - try { - execute(query); - } catch (Exception e) { - } + + executeUnsafe(query); } /** @@ -201,11 +199,15 @@ public class NicknamesTable extends Table { lastNicks.put(id, nickname); } } - for (Integer id : lastNicks.keySet()) { - String lastNick = lastNicks.get(id); + + //TODO figure out what the heck that method does @Rsl1122 + for (Map.Entry entrySet : lastNicks.entrySet()) { + Integer id = entrySet.getKey(); + String lastNick = entrySet.getValue(); + List list = nicks.get(id); - list.remove(lastNick); - list.add(lastNick); + list.remove(lastNick); //NOTE: Remove here? + list.add(lastNick); //NOTE: And add here again? } return nicks; @@ -225,7 +227,9 @@ public class NicknamesTable extends Table { if (nicknames == null || nicknames.isEmpty()) { return; } + Benchmark.start("Database: Save Nicknames Multiple"); + Map> saved = getNicknames(nicknames.keySet()); PreparedStatement statement = null; try { @@ -235,16 +239,22 @@ public class NicknamesTable extends Table { + columnCurrent + ", " + columnNick + ") VALUES (?, ?, ?)"); - for (Integer id : nicknames.keySet()) { - Set newNicks = nicknames.get(id); + + for (Map.Entry> entrySet : nicknames.entrySet()) { + Integer id = entrySet.getKey(); + Set newNicks = entrySet.getValue(); + String lastNick = lastNicks.get(id); List s = saved.get(id); + if (s != null) { newNicks.removeAll(s); } + if (newNicks.isEmpty()) { continue; } + for (String name : newNicks) { statement.setInt(1, id); statement.setInt(2, (name.equals(lastNick)) ? 1 : 0); @@ -253,6 +263,7 @@ public class NicknamesTable extends Table { commitRequired = true; } } + if (commitRequired) { statement.executeBatch(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index 7596a2b36..193dce2bd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -190,20 +190,27 @@ public class SessionsTable extends Table { if (sessions == null || sessions.isEmpty()) { return; } + Benchmark.start("Database: Save Sessions multiple"); + Map> saved = getSessionData(sessions.keySet()); - for (Integer id : sessions.keySet()) { - List sessionList = sessions.get(id); + for (Map.Entry> entrySet : sessions.entrySet()) { + Integer id = entrySet.getKey(); + List sessionList = entrySet.getValue(); + List s = saved.get(id); if (s != null) { sessionList.removeAll(s); } + if (sessionList.isEmpty()) { continue; } + saved.put(id, sessionList); } List>> batches = splitIntoBatches(sessions); + for (List> batch : batches) { saveSessionBatch(batch); } @@ -252,29 +259,40 @@ public class SessionsTable extends Table { public void clean() throws SQLException { Map loginTimes = db.getUsersTable().getLoginTimes(); Map> allSessions = getSessionData(loginTimes.keySet()); + Benchmark.start("Database: Combine Sessions"); + int before = MathUtils.sumInt(allSessions.values().stream().map(List::size)); + Log.debug("Sessions before: " + before); + Map beforeM = new HashMap<>(); Map afterM = new HashMap<>(); - for (Integer id : allSessions.keySet()) { - List sessions = allSessions.get(id); + + for (Map.Entry> entrySet : allSessions.entrySet()) { + Integer id = entrySet.getKey(); + List sessions = entrySet.getValue(); + beforeM.put(id, sessions.size()); if (sessions.isEmpty()) { afterM.put(id, 0); continue; } + Integer times = loginTimes.get(id); if (sessions.size() == times) { afterM.put(id, times); continue; } + List combined = ManageUtils.combineSessions(sessions, times); afterM.put(id, combined.size()); allSessions.put(id, combined); } + int after = MathUtils.sumInt(allSessions.values().stream().map(List::size)); Log.debug("Sessions after: " + after); + if (before - after > 50) { Benchmark.start("Database: Save combined sessions"); for (Integer id : new HashSet<>(allSessions.keySet())) { @@ -287,6 +305,7 @@ public class SessionsTable extends Table { saveSessionData(allSessions); Benchmark.stop("Database: Save combined sessions"); } + Benchmark.stop("Database: Combine Sessions"); Log.info("Combined " + (before - after) + " sessions."); } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java index 7c53bcfd1..a9a41f5ee 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java @@ -10,6 +10,7 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.sql.Statement; import java.util.List; import java.util.Map; @@ -68,13 +69,21 @@ public abstract class Table { } /** - * @param statement + * @param statementString * @return * @throws SQLException */ - protected boolean execute(String statement) throws SQLException { + protected boolean execute(String statementString) throws SQLException { Connection connection = getConnection(); - return connection.createStatement().execute(statement); + Statement statement = null; + try { + statement = connection.createStatement(); + return statement.execute(statementString); + } finally { + if (statement != null) { + statement.close(); + } + } } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index 0382f75c6..a70ae706d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -23,9 +23,15 @@ public class UsersTable extends Table { private final String columnID; private final String columnUUID; - @Deprecated // Removed in 3.5.2 + /** + * @deprecated removed in 3.5.2 + */ + @Deprecated private final String columnDemAge; - @Deprecated // Removed in 3.5.2 + /** + * @deprecated removed in 3.5.2 + */ + @Deprecated private final String columnDemGender; private final String columnGeolocation; private final String columnLastGM; diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/Html.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/Html.java index 1632cbacf..04655ff8e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/Html.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/Html.java @@ -27,12 +27,12 @@ public enum Html { COLOR_7(""), COLOR_8(""), COLOR_9(""), - COLOR_a(""), - COLOR_b(""), - COLOR_c(""), - COLOR_d(""), - COLOR_e(""), - COLOR_f(""), + COLOR_A(""), + COLOR_B(""), + COLOR_C(""), + COLOR_D(""), + COLOR_E(""), + COLOR_F(""), // FONT_AWESOME_ICON(""), MINOTAR_SMALL_IMG("\"""), @@ -115,19 +115,21 @@ public enum Html { * @param localeFile */ public static void loadLocale(File localeFile) { - try { - Scanner localeScanner = new Scanner(localeFile, "UTF-8"); + try (Scanner localeScanner = new Scanner(localeFile, "UTF-8")){ List localeRows = new ArrayList<>(); boolean html = false; + while (localeScanner.hasNextLine()) { String line = localeScanner.nextLine(); if (line.equals("<<<<<>>>>>")) { html = true; continue; } + if (!html) { continue; } + localeRows.add(line); } for (String localeRow : localeRows) { @@ -139,7 +141,7 @@ public enum Html { } } } catch (IOException e) { - + Log.error("Something went wrong at loading locale " + localeFile.getAbsoluteFile() + ": " + e.getCause()); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/RecentPlayersButtonsCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/RecentPlayersButtonsCreator.java index 1678bce17..ddf5b3d35 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/RecentPlayersButtonsCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/RecentPlayersButtonsCreator.java @@ -9,6 +9,13 @@ import java.util.List; */ public class RecentPlayersButtonsCreator { + /** + * Constructor used to hide the public constructor + */ + private RecentPlayersButtonsCreator() { + throw new IllegalStateException("Utility class"); + } + /** * Creates recent players buttons inside a p-tag. * diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/CPUGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/CPUGraphCreator.java index d587766df..2377e85e7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/CPUGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/CPUGraphCreator.java @@ -8,6 +8,14 @@ import java.util.List; import java.util.stream.Collectors; public class CPUGraphCreator { + + /** + * Constructor used to hide the public constructor + */ + private CPUGraphCreator() { + throw new IllegalStateException("Utility class"); + } + public static String buildScatterDataString(List tpsData, long scale) { long now = MiscUtils.getTime(); List points = tpsData.stream() diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/NewPlayersGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/NewPlayersGraphCreator.java index a261ed7df..93f9edd4b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/NewPlayersGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/NewPlayersGraphCreator.java @@ -13,6 +13,13 @@ import java.util.stream.Collectors; */ public class NewPlayersGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private NewPlayersGraphCreator() { + throw new IllegalStateException("Utility class"); + } + /** * Creates a scatter data string from given data. * diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PlayerActivityGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PlayerActivityGraphCreator.java index 959df1d1c..4a821af45 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PlayerActivityGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PlayerActivityGraphCreator.java @@ -8,6 +8,7 @@ import main.java.com.djrapitops.plan.utilities.analysis.Point; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -15,6 +16,13 @@ import java.util.stream.Collectors; */ public class PlayerActivityGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private PlayerActivityGraphCreator() { + throw new IllegalStateException("Utility class"); + } + public static String buildScatterDataString(List tpsData, long scale) { long now = MiscUtils.getTime(); List points = tpsData.stream() @@ -40,9 +48,9 @@ public class PlayerActivityGraphCreator { private static List filterSessions(List sessions, long nowMinusScale) { return sessions.parallelStream() - .filter(session -> (session != null)) + .filter(Objects::nonNull) .filter(session -> session.isValid() || session.getSessionEnd() == -1) - .filter((session) -> (session.getSessionStart() >= nowMinusScale || session.getSessionEnd() >= nowMinusScale)) + .filter(session -> session.getSessionStart() >= nowMinusScale || session.getSessionEnd() >= nowMinusScale) .distinct() .collect(Collectors.toList()); } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java index 5f0bdb4db..d555b5b2d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/PunchCardGraphCreator.java @@ -21,6 +21,13 @@ import java.util.stream.Collectors; */ public class PunchCardGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private PunchCardGraphCreator() { + throw new IllegalStateException("Utility class"); + } + /** * @param data * @return @@ -85,6 +92,7 @@ public class PunchCardGraphCreator { valueMinusAvg[i][j] = (int) Math.pow(Math.abs(array[i][j] - avg), 2); } } + int size = array.length * array[0].length; int sum = sum(valueMinusAvg); return Math.sqrt(sum / size); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/RamGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/RamGraphCreator.java index b60a36a95..e3ee3ac32 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/RamGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/RamGraphCreator.java @@ -16,6 +16,13 @@ import java.util.stream.Collectors; */ public class RamGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private RamGraphCreator() { + throw new IllegalStateException("Utility class"); + } + /** * Creates a scatter data string from given data. * diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java index 5b6c72142..1e1d2db43 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/ScatterGraphCreator.java @@ -23,13 +23,19 @@ import java.util.Set; */ public class ScatterGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private ScatterGraphCreator() { + throw new IllegalStateException("Utility class"); + } + public static String scatterGraph(List points, boolean reduceGapTriangles) { return scatterGraph(points, reduceGapTriangles, true); } public static String scatterGraph(List points, boolean reduceGapTriangles, boolean reducePoints) { - StringBuilder arrayBuilder = new StringBuilder(); - arrayBuilder.append("["); + StringBuilder arrayBuilder = new StringBuilder("["); if (reducePoints) { points = DouglasPeuckerAlgorithm.reducePoints(points, 0); @@ -45,7 +51,7 @@ public class ScatterGraphCreator { long lastDate = (long) lastPoint.getX(); double y = point.getY(); double lastY = lastPoint.getY(); - if (y != lastY && Math.abs(lastY - y) > 0.5) { + if (Double.compare(y, lastY) != 0 && Math.abs(lastY - y) > 0.5) { if (lastDate < date - TimeAmount.MINUTE.ms() * 10L) { toAdd.add(new Point(lastDate + 1, lastY)); toAdd.add(new Point(date - 1, lastY)); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SessionLengthDistributionGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SessionLengthDistributionGraphCreator.java index 695667449..485a43635 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SessionLengthDistributionGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/SessionLengthDistributionGraphCreator.java @@ -9,7 +9,6 @@ import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils; import main.java.com.djrapitops.plan.utilities.analysis.MathUtils; -import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; @@ -18,6 +17,13 @@ import java.util.stream.Collectors; */ public class SessionLengthDistributionGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private SessionLengthDistributionGraphCreator() { + throw new IllegalStateException("Utility class"); + } + /** * @param data * @return @@ -33,15 +39,14 @@ public class SessionLengthDistributionGraphCreator { */ public static String[] generateDataArray(Collection lengths) { Map values = getValues(lengths); -// Map scaled = scale(values); StringBuilder arrayBuilder = buildString(values); StringBuilder labelBuilder = buildLabels(values); + return new String[]{arrayBuilder.toString(), labelBuilder.toString()}; } private static StringBuilder buildString(Map scaled) { - StringBuilder arrayBuilder = new StringBuilder(); - arrayBuilder.append("["); + StringBuilder arrayBuilder = new StringBuilder("["); long big = MathUtils.getBiggestLong(scaled.keySet()); for (long key = 0; key <= big; key++) { @@ -59,8 +64,7 @@ public class SessionLengthDistributionGraphCreator { } private static StringBuilder buildLabels(Map scaled) { - StringBuilder arrayBuilder = new StringBuilder(); - arrayBuilder.append("["); + StringBuilder arrayBuilder = new StringBuilder("["); long big = MathUtils.getBiggestLong(scaled.keySet()); for (long key = 0; key <= big; key++) { @@ -81,6 +85,7 @@ public class SessionLengthDistributionGraphCreator { List unused = new ArrayList<>(lengths); Map values = new HashMap<>(); long lengthInMinutes = 5; + while (!unused.isEmpty() && lengthInMinutes < 120) { long length = lengthInMinutes * 60 * 1000; List lessThan = unused.stream().filter(l -> l < length).collect(Collectors.toList()); @@ -90,13 +95,4 @@ public class SessionLengthDistributionGraphCreator { } return values; } - - private static Map scale(Map values) { - Map scaled = new HashMap<>(); - int total = MathUtils.sumInt(values.values().stream().map(i -> (Serializable) i)); - for (long key : values.keySet()) { - scaled.put(key, (int) ((1.0 * values.get(key) / total) * 100)); - } - return scaled; - } } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java index 2928995d2..bf1abc784 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/TPSGraphCreator.java @@ -14,6 +14,13 @@ import java.util.stream.Collectors; */ public class TPSGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private TPSGraphCreator() { + throw new IllegalStateException("Utility class"); + } + public static String buildScatterDataStringTPS(List tpsData, long scale) { long now = MiscUtils.getTime(); List points = tpsData.stream() diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldLoadGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldLoadGraphCreator.java index 1edaa9014..b1ba43391 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldLoadGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/graphs/WorldLoadGraphCreator.java @@ -16,6 +16,13 @@ import java.util.stream.Collectors; */ public class WorldLoadGraphCreator { + /** + * Constructor used to hide the public constructor + */ + private WorldLoadGraphCreator() { + throw new IllegalStateException("Utility class"); + } + /** * Creates scatter graph data of entity load. * diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/CommandUseTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/CommandUseTableCreator.java index 2111141c1..1b682c900 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/CommandUseTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/CommandUseTableCreator.java @@ -14,6 +14,13 @@ import java.util.Map; */ public class CommandUseTableCreator { + /** + * Constructor used to hide the public constructor + */ + private CommandUseTableCreator() { + throw new IllegalStateException("Utility class"); + } + /** * @param commandUse * @return diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java index 1e0ca522e..8cc79dbeb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/KillsTableCreator.java @@ -14,6 +14,13 @@ import java.util.List; */ public class KillsTableCreator { + /** + * Constructor used to hide the public constructor + */ + private KillsTableCreator() { + throw new IllegalStateException("Utility class"); + } + /** * @param killData * @return diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java index c7f0629c3..78f003053 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/html/tables/PlayersTableCreator.java @@ -16,6 +16,13 @@ import java.util.List; */ public class PlayersTableCreator { + /** + * Constructor used to hide the public constructor + */ + private PlayersTableCreator() { + throw new IllegalStateException("Utility class"); + } + /** * @param data * @return diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/text/TextUI.java b/Plan/src/main/java/com/djrapitops/plan/ui/text/TextUI.java index 7b2dfa86a..5b56c79fa 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/text/TextUI.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/text/TextUI.java @@ -20,6 +20,13 @@ import java.util.UUID; */ public class TextUI { + /** + * Constructor used to hide the public constructor + */ + private TextUI() { + throw new IllegalStateException("Utility class"); + } + /** * @param uuid * @return diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/Authenticator.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/Authenticator.java index c4f623ed6..cf73b6219 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/Authenticator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/Authenticator.java @@ -28,8 +28,7 @@ public class Authenticator extends BasicAuthenticator { } } - private boolean isAuthorized(String user, String passwordRaw, String target) throws IllegalArgumentException, PassEncryptUtil.CannotPerformOperationException, PassEncryptUtil.InvalidHashException, SQLException { - + private boolean isAuthorized(String user, String passwordRaw, String target) throws PassEncryptUtil.CannotPerformOperationException, PassEncryptUtil.InvalidHashException, SQLException { SecurityTable securityTable = plugin.getDB().getSecurityTable(); if (!securityTable.userExists(user)) { throw new IllegalArgumentException("User Doesn't exist"); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java index 7a42449b6..e79485139 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java @@ -19,9 +19,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; -import java.net.InetAddress; import java.net.InetSocketAddress; -import java.net.Socket; import java.security.*; import java.security.cert.Certificate; import java.security.cert.CertificateException; @@ -35,18 +33,13 @@ import java.util.concurrent.Executors; */ public class WebSocketServer { - private final int PORT; - private final Plan plugin; private final DataRequestHandler dataReqHandler; private boolean enabled = false; - private Socket sslServer; private HttpServer server; + private final int port; private boolean shutdown; - private KeyManagerFactory keyManagerFactory; - private TrustManagerFactory trustManagerFactory; - /** * Class Constructor. *

@@ -56,7 +49,7 @@ public class WebSocketServer { */ public WebSocketServer(Plan plugin) { this.plugin = plugin; - this.PORT = Settings.WEBSERVER_PORT.getNumber(); + this.port = Settings.WEBSERVER_PORT.getNumber(); shutdown = false; dataReqHandler = new DataRequestHandler(plugin); } @@ -71,8 +64,6 @@ public class WebSocketServer { } Log.info(Phrase.WEBSERVER_INIT.toString()); try { - InetAddress ip = InetAddress.getByName(Settings.WEBSERVER_IP.toString()); - String keyStorePath = Settings.WEBSERVER_CERTIFICATE_PATH.toString(); if (!keyStorePath.contains(":")) { keyStorePath = plugin.getDataFolder() + keyStorePath; @@ -82,8 +73,7 @@ public class WebSocketServer { String alias = Settings.WEBSERVER_CERTIFICATE_ALIAS.toString(); boolean startSuccessful = false; - try { - FileInputStream fIn = new FileInputStream(keyStorePath); + try (FileInputStream fIn = new FileInputStream(keyStorePath)) { KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(fIn, storepass); @@ -91,39 +81,31 @@ public class WebSocketServer { Log.info("Found Certificate: " + cert.getType()); - keyManagerFactory = KeyManagerFactory.getInstance("SunX509"); + KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509"); keyManagerFactory.init(keystore, keypass); - trustManagerFactory = TrustManagerFactory.getInstance("SunX509"); + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509"); trustManagerFactory.init(keystore); - server = HttpsServer.create(new InetSocketAddress(PORT), 10); + server = HttpsServer.create(new InetSocketAddress(port), 10); SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(keyManagerFactory.getKeyManagers(), null/*trustManagerFactory.getTrustManagers()*/, null); ((HttpsServer) server).setHttpsConfigurator(new HttpsConfigurator(sslContext) { + @Override public void configure(HttpsParameters params) { -// try { -// SSLContext c = SSLContext.getDefault(); - SSLEngine engine = sslContext.createSSLEngine(); + SSLEngine engine = sslContext.createSSLEngine(); - params.setNeedClientAuth(false); - params.setCipherSuites(engine.getEnabledCipherSuites()); - params.setProtocols(engine.getEnabledProtocols()); + params.setNeedClientAuth(false); + params.setCipherSuites(engine.getEnabledCipherSuites()); + params.setProtocols(engine.getEnabledProtocols()); - SSLParameters defaultSSLParameters = sslContext.getDefaultSSLParameters(); - params.setSSLParameters(defaultSSLParameters); -// } catch (NoSuchAlgorithmException e) { -// Log.error("WebServer: SSL Engine loading Failed."); -// Log.toLog(this.getClass().getName(), e); -// } + SSLParameters defaultSSLParameters = sslContext.getDefaultSSLParameters(); + params.setSSLParameters(defaultSSLParameters); } }); startSuccessful = true; - } catch (KeyManagementException e) { - Log.error("WebServer: SSL Context Initialization Failed."); - Log.toLog(this.getClass().getName(), e); - } catch (NoSuchAlgorithmException e) { + } catch (KeyManagementException | NoSuchAlgorithmException e) { Log.error("WebServer: SSL Context Initialization Failed."); Log.toLog(this.getClass().getName(), e); } catch (FileNotFoundException e) { @@ -135,7 +117,7 @@ public class WebSocketServer { Log.toLog(this.getClass().getName(), e); } - Log.debug("Start Successful: "+startSuccessful); + Log.debug("Start Successful: " + startSuccessful); if (!startSuccessful) { return; // TODO Http Server @@ -156,42 +138,9 @@ public class WebSocketServer { server.setExecutor(Executors.newSingleThreadExecutor()); server.start(); - -// server = new ServerSocket(PORT, 1, ip); -// -// plugin.getRunnableFactory().createNew(new AbsRunnable("WebServerTask") { -// @Override -// public void run() { -// while (!shutdown) { -// /*SSL*/ -// Socket socket = null; -// InputStream input = null; -// OutputStream output = null; -// Request request = null; -// try { -// socket = /*(SSLSocket)*/ server.accept(); -// Log.debug("New Socket Connection: " + socket.getInetAddress()); -// input = socket.getInputStream(); -// output = socket.getOutputStream(); -// request = new Request(input); -// Benchmark.start("Webserver Response"); -// request.parse(); -// Response response = getResponse(request, output); -// Log.debug("Parsed response: " + response.getClass().getSimpleName()); -// response.sendStaticResource(); -// } catch (IOException | IllegalArgumentException e) { -// } finally { -// MiscUtils.close(input, request, output, socket); -// Benchmark.stop("Webserver Response"); -// } -// } -// this.cancel(); -// } -// }).runTaskAsynchronously(); - enabled = true; - Log.info(Phrase.WEBSERVER_RUNNING.parse(server.getAddress().getPort() + "")); + Log.info(Phrase.WEBSERVER_RUNNING.parse(String.valueOf(server.getAddress().getPort()))); } catch (IllegalArgumentException | IllegalStateException | IOException e) { Log.toLog(this.getClass().getName(), e); enabled = false; @@ -307,7 +256,7 @@ public class WebSocketServer { return dataReqHandler; } - private boolean isAuthorized(Request request) throws IllegalArgumentException, PassEncryptUtil.CannotPerformOperationException, PassEncryptUtil.InvalidHashException, SQLException { + private boolean isAuthorized(Request request) throws PassEncryptUtil.CannotPerformOperationException, PassEncryptUtil.InvalidHashException, SQLException { Base64.Decoder decoder = Base64.getDecoder(); String auth = request.getAuthorization(); byte[] decoded = decoder.decode(auth); @@ -320,7 +269,7 @@ public class WebSocketServer { return isAuthorized(user, passwordRaw, request.getTarget()); } - private boolean isAuthorized(String user, String passwordRaw, String target) throws IllegalArgumentException, PassEncryptUtil.CannotPerformOperationException, PassEncryptUtil.InvalidHashException, SQLException { + private boolean isAuthorized(String user, String passwordRaw, String target) throws PassEncryptUtil.CannotPerformOperationException, PassEncryptUtil.InvalidHashException, SQLException { SecurityTable securityTable = plugin.getDB().getSecurityTable(); if (!securityTable.userExists(user)) { diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/PlayersPageResponse.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/PlayersPageResponse.java index aa2f909a6..dff5d5cbd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/PlayersPageResponse.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/PlayersPageResponse.java @@ -22,10 +22,10 @@ public class PlayersPageResponse extends Response { } public static String buildContent(List cached) { - StringBuilder html = new StringBuilder(); + StringBuilder html = new StringBuilder("

Cached Players

"); + int size = cached.size(); - html.append("

Cached Players

") - .append(size) + html.append(size) .append(" players. Use browser's Search to find players by name. (Chrome Ctrl+F)

"); cached.sort(new UserDataNameComparator()); int i = 1; @@ -33,10 +33,9 @@ public class PlayersPageResponse extends Response { String name = userData.getName(); String link = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name); html.append(""); - if (i < size) { - if (i % 8 == 0) { - html.append(""); - } + if (i < size + && i % 8 == 0) { + html.append(""); } i++; } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/Benchmark.java b/Plan/src/main/java/com/djrapitops/plan/utilities/Benchmark.java index 6a9013f97..a3238eacc 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/Benchmark.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/Benchmark.java @@ -8,6 +8,13 @@ import main.java.com.djrapitops.plan.Plan; */ public class Benchmark { + /** + * Constructor used to hide the public constructor + */ + private Benchmark() { + throw new IllegalStateException("Utility class"); + } + /** * @param source */ diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/Check.java b/Plan/src/main/java/com/djrapitops/plan/utilities/Check.java index f2361b56d..4f093f0bf 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/Check.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/Check.java @@ -11,6 +11,13 @@ import main.java.com.djrapitops.plan.Log; */ public class Check { + /** + * Constructor used to hide the public constructor + */ + private Check() { + throw new IllegalStateException("Utility class"); + } + /** * If check is false, send message. * @@ -47,7 +54,7 @@ public class Check { * @param message Message to send if Condition is false * @return Condition */ - public static boolean isTrue_Error(boolean condition, String message) { + public static boolean ErrorIfFalse(boolean condition, String message) { if (!condition) { Log.error(message); Log.toLog(message, Log.getErrorsFilename()); 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 2df7fa506..eb7f822f0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/FormatUtils.java @@ -12,6 +12,15 @@ import java.text.DecimalFormat; */ public class FormatUtils { + private static DecimalFormat df = new DecimalFormat(Settings.FORMAT_DECIMALS.toString()); + + /** + * Constructor used to hide the public constructor + */ + private FormatUtils() { + throw new IllegalStateException("Utility class"); + } + /** * @param ms * @return @@ -170,8 +179,6 @@ public class FormatUtils { * @return */ public static String cutDecimals(double d) { - DecimalFormat df = new DecimalFormat(Settings.FORMAT_DECIMALS.toString()); -// df.setRoundingMode(RoundingMode.CEILING); return df.format(d); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java index 196bc866b..77b7078c3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java @@ -16,6 +16,13 @@ import java.util.Scanner; */ public class HtmlUtils { + /** + * Constructor used to hide the public constructor + */ + private HtmlUtils() { + throw new IllegalStateException("Utility class"); + } + /** * @param fileName * @return @@ -52,9 +59,13 @@ public class HtmlUtils { * @return */ public static String replacePlaceholders(String html, Map replaceMap) { - for (String key : replaceMap.keySet()) { - html = html.replace(key, replaceMap.get(key)); + for (Map.Entry entrySet : replaceMap.entrySet()) { + String placeholder = entrySet.getKey(); + String replacer = entrySet.getValue(); + + html = html.replace(placeholder, replacer); } + return html; } @@ -73,7 +84,7 @@ public class HtmlUtils { String ip = Plan.getInstance().getVariable().getIp() + ":" + port; boolean useAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue(); if (useAlternativeIP) { - ip = Settings.ALTERNATIVE_IP.toString().replace("%port%", "" + port); + ip = Settings.ALTERNATIVE_IP.toString().replace("%port%", String.valueOf(port)); } return "//" + ip + "/server"; } @@ -95,7 +106,7 @@ public class HtmlUtils { String ip = Plan.getInstance().getVariable().getIp() + ":" + port; boolean useAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue(); if (useAlternativeIP) { - ip = Settings.ALTERNATIVE_IP.toString().replace("%port%", "" + port); + ip = Settings.ALTERNATIVE_IP.toString().replace("%port%", String.valueOf(port)); } return "//" + ip + "/player/" + playerName; } @@ -167,7 +178,7 @@ public class HtmlUtils { 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}; + Html.COLOR_A, Html.COLOR_B, Html.COLOR_C, Html.COLOR_D, Html.COLOR_E, Html.COLOR_F}; for (Html html : replacer) { string = string.replace("§" + html.name().charAt(6), html.parse()); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java index 0bc1ab7a7..3de2a4679 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java @@ -18,15 +18,21 @@ import java.util.stream.Collectors; */ public class ManageUtils { + /** + * Constructor used to hide the public constructor + */ + private ManageUtils() { + throw new IllegalStateException("Utility class"); + } + /** * Creates a new backup sqlite file with the data of copyFromDB. * * @param dbName Name of database (mysql/sqlite) * @param copyFromDB Database you want to backup. * @return success? - * @throws java.sql.SQLException */ - public static boolean backup(String dbName, Database copyFromDB) throws SQLException { + public static boolean backup(String dbName, Database copyFromDB) { Plan plugin = Plan.getInstance(); String timeStamp = new Date().toString().substring(4, 10).replace(" ", "-"); String fileName = dbName + "-backup-" + timeStamp; 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 1a90cc9e9..764ae2640 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/MiscUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/MiscUtils.java @@ -22,6 +22,13 @@ import java.util.stream.Collectors; */ public class MiscUtils { + /** + * Constructor used to hide the public constructor + */ + private MiscUtils() { + throw new IllegalStateException("Utility class"); + } + /** * Used to get the current time as milliseconds. * @@ -56,7 +63,7 @@ public class MiscUtils { } else if (args.length > 0) { if (sender.hasPermission(perm.getPermission())) { playerName = args[0]; - } else if (args[0].toLowerCase().equals(sender.getName().toLowerCase())) { + } else if (args[0].equalsIgnoreCase(sender.getName())) { playerName = sender.getName(); } else { sender.sendMessage(Phrase.COMMAND_NO_PERMISSION.toString()); 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 b77c9a14c..de8738637 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java @@ -10,6 +10,13 @@ import main.java.com.djrapitops.plan.data.UserData; */ public class NewPlayerCreator { + /** + * Constructor used to hide the public constructor + */ + private NewPlayerCreator() { + throw new IllegalStateException("Utility class"); + } + /** * Creates a new instance of UserData with default values. * diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java b/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java index d8fac5fe1..c600b1d49 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java @@ -17,6 +17,13 @@ import java.security.spec.InvalidKeySpecException; */ public class PassEncryptUtil { + /** + * Constructor used to hide the public constructor + */ + private PassEncryptUtil() { + throw new IllegalStateException("Utility class"); + } + public static final String PBKDF2_ALGORITHM = "PBKDF2WithHmacSHA1"; // These constants may be changed without breaking existing hashes. public static final int SALT_BYTE_SIZE = 24; @@ -161,25 +168,25 @@ public class PassEncryptUtil { } @SuppressWarnings("serial") - static public class InvalidHashException extends Exception { + public static class InvalidHashException extends Exception { - public InvalidHashException(String message) { + InvalidHashException(String message) { super(message); } - public InvalidHashException(String message, Throwable source) { + InvalidHashException(String message, Throwable source) { super(message, source); } } @SuppressWarnings("serial") - static public class CannotPerformOperationException extends Exception { + public static class CannotPerformOperationException extends Exception { - public CannotPerformOperationException(String message) { + CannotPerformOperationException(String message) { super(message); } - public CannotPerformOperationException(String message, Throwable source) { + CannotPerformOperationException(String message, Throwable source) { super(message, source); } } 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 1c0710dfe..c9b38ffe7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java @@ -23,6 +23,13 @@ import java.util.UUID; */ public class PlaceholderUtils { + /** + * Constructor used to hide the public constructor + */ + private PlaceholderUtils() { + throw new IllegalStateException("Utility class"); + } + /** * Gets the HashMap that is used to replace placeholders in Analysis. * @@ -94,19 +101,19 @@ public class PlaceholderUtils { 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()); - replaceMap.put("%deaths%", data.getDeaths() + ""); - replaceMap.put("%playerkills%", data.getPlayerKills().size() + ""); - replaceMap.put("%mobkills%", data.getMobKills() + ""); + replaceMap.put("%deaths%", String.valueOf(data.getDeaths())); + replaceMap.put("%playerkills%", String.valueOf(data.getPlayerKills().size())); + replaceMap.put("%mobkills%", String.valueOf(data.getMobKills())); replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(data.getSessions())))); replaceMap.put("%killstable%", KillsTableCreator.createKillsTable(data.getPlayerKills())); Plan plugin = Plan.getInstance(); replaceMap.put("%version%", plugin.getDescription().getVersion()); replaceMap.put("%planlite%", ""); - replaceMap.put("%graphmaxplayers%", 2 + ""); + replaceMap.put("%graphmaxplayers%", "2"); String scatterGraphData = PlayerActivityGraphCreator.buildScatterDataStringSessions(data.getSessions(), TimeAmount.WEEK.ms()); replaceMap.put("%dataweek%", scatterGraphData); - replaceMap.put("%playersgraphcolor%", Settings.HCOLOR_ACT_ONL + ""); - replaceMap.put("%playersgraphfill%", Settings.HCOLOR_ACT_ONL_FILL + ""); + replaceMap.put("%playersgraphcolor%", Settings.HCOLOR_ACT_ONL.toString()); + replaceMap.put("%playersgraphfill%", Settings.HCOLOR_ACT_ONL_FILL.toString()); replaceMap.put("%datapunchcard%", PunchCardGraphCreator.generateDataArray(data.getSessions())); String[] distribution = SessionLengthDistributionGraphCreator.generateDataArraySessions(data.getSessions()); replaceMap.put("%datasessiondistribution%", distribution[0]); @@ -119,8 +126,8 @@ public class PlaceholderUtils { replaceMap.put("#" + defaultCols[i], "#" + colors[i]); } } - replaceMap.put("%refreshlong%", plugin.getInspectCache().getCacheTime(uuid) + ""); - replaceMap.put("%currenttime%", MiscUtils.getTime() + ""); + replaceMap.put("%refreshlong%", String.valueOf(plugin.getInspectCache().getCacheTime(uuid))); + replaceMap.put("%currenttime%", String.valueOf(MiscUtils.getTime())); replaceMap.put("%servername%", Settings.SERVER_NAME.toString()); String pluginsTabHtml = plugin.getHookHandler().getPluginsTabLayoutForInspect(); Map additionalReplaceRules = plugin.getHookHandler().getAdditionalInspectReplaceRules(uuid); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java index 524b7e243..79fecb3b6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java @@ -130,7 +130,7 @@ public class Analysis { Benchmark.start("Analysis Phase"); plugin.processStatus().setStatus("Analysis", "Analysis Phase"); - log(Phrase.ANALYSIS_BEGIN_ANALYSIS.parse(rawData.size() + "", fetchPhaseLength + "")); + log(Phrase.ANALYSIS_BEGIN_ANALYSIS.parse(String.valueOf(rawData.size()), String.valueOf(fetchPhaseLength))); String playersTable = PlayersTableCreator.createSortablePlayersTable(rawData); analysisData.setPlayersTable(playersTable); @@ -146,11 +146,12 @@ public class Analysis { analysisCache.cache(analysisData); long time = plugin.processStatus().finishExecution("Analysis"); + if (Settings.ANALYSIS_LOG_FINISHED.isTrue()) { - Log.info(Phrase.ANALYSIS_COMPLETE.parse(time + "", HtmlUtils.getServerAnalysisUrlWithProtocol())); + Log.info(Phrase.ANALYSIS_COMPLETE.parse(String.valueOf(time), HtmlUtils.getServerAnalysisUrlWithProtocol())); } ExportUtility.export(plugin, analysisData, rawData); - } catch (Throwable e) { + } catch (Exception e) { Log.toLog(this.getClass().getName(), e); plugin.processStatus().setStatus("Analysis", "Error: " + e); return false; @@ -207,7 +208,7 @@ public class Analysis { if (analysisTypes.contains(boolTot)) { replaceMap.put(source.getPlaceholder(boolTot.getPlaceholderModifier()), AnalysisUtils.getBooleanTotal(boolTot, source, uuids)); } - } catch (Throwable e) { + } catch (Exception e) { Log.error("A PluginData-source caused an exception: " + source.getPlaceholder("").replace("%", "")); Log.toLog(this.getClass().getName(), e); @@ -247,7 +248,7 @@ public class Analysis { long now = MiscUtils.getTime(); Benchmark.start("Analysis: Fill Dataset"); - rawData.forEach((uData) -> { + rawData.forEach(uData -> { uData.access(); Map gmTimes = uData.getGmTimes(); String[] gms = new String[]{"SURVIVAL", "CREATIVE", "ADVENTURE", "SPECTATOR"}; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java index 6b901a23a..705606252 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java @@ -18,6 +18,13 @@ import java.util.stream.Stream; */ public class AnalysisUtils { + /** + * Constructor used to hide the public constructor + */ + private AnalysisUtils() { + throw new IllegalStateException("Utility class"); + } + /** * @param now * @param lastPlayed @@ -27,18 +34,16 @@ public class AnalysisUtils { */ 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 (now - lastPlayed < twoWeeks) { - if (loginTimes > 3) { - if (playTime > 60 * timeToActive) { - return true; - } - } - } - return false; + + return now - lastPlayed < twoWeeks + && loginTimes > 3 + && playTime > 60 * timeToActive; } /** @@ -99,8 +104,8 @@ public class AnalysisUtils { default: return source.parseContainer("", "Wrong Analysistype specified: " + analysisType.name()); } - return source.parseContainer(analysisType.getModifier(), total + ""); - } catch (Throwable e) { + return source.parseContainer(analysisType.getModifier(), String.valueOf(total)); + } catch (Exception e) { return logPluginDataCausedError(source, e); } } @@ -131,7 +136,7 @@ public class AnalysisUtils { return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount((long) average)); case LONG_AVG: long averageLong = MathUtils.averageLong(getCorrectValues(uuids, source).map(i -> (Long) i)); - return source.parseContainer(analysisType.getModifier(), averageLong + ""); + return source.parseContainer(analysisType.getModifier(), String.valueOf(averageLong)); case LONG_TIME_MS_AVG: average = MathUtils.averageLong(getCorrectValues(uuids, source).map(i -> (Long) i)); return source.parseContainer(analysisType.getModifier(), FormatUtils.formatTimeAmount((long) average)); @@ -145,7 +150,7 @@ public class AnalysisUtils { return source.parseContainer("Err ", "Wrong Analysistype specified: " + analysisType.name()); } return source.parseContainer(analysisType.getModifier(), FormatUtils.cutDecimals(average)); - } catch (Throwable e) { + } catch (Exception e) { return logPluginDataCausedError(source, e); } } @@ -164,7 +169,7 @@ public class AnalysisUtils { .collect(Collectors.toList()); long count = tempList.stream().filter(value -> value).count(); return source.parseContainer(analysisType.getModifier(), ((double) (count / tempList.size()) * 100) + "%"); - } catch (Throwable e) { + } catch (Exception e) { return logPluginDataCausedError(source, e); } } @@ -185,7 +190,7 @@ public class AnalysisUtils { .collect(Collectors.toList()); long count = tempList.stream().filter(value -> value).count(); return source.parseContainer(analysisType.getModifier(), count + " / " + tempList.size()); - } catch (Throwable e) { + } catch (Exception e) { return logPluginDataCausedError(source, e); } } @@ -210,15 +215,12 @@ public class AnalysisUtils { long now = MiscUtils.getTime(); long nowMinusScale = now - scale; Set uniqueJoins = new HashSet<>(); - sessions.keySet().forEach((uuid) -> { - List s = sessions.get(uuid); - for (SessionData session : s) { - if (session.getSessionStart() < nowMinusScale) { - continue; - } - uniqueJoins.add(uuid); - } - }); + sessions.forEach((uuid, s) -> + s.stream() + .filter(session -> session.getSessionStart() >= nowMinusScale) + .map(session -> uuid) + .forEach(uniqueJoins::add) + ); return uniqueJoins.size(); } @@ -231,13 +233,12 @@ public class AnalysisUtils { Map> uniqueJoins = new HashMap<>(); long now = MiscUtils.getTime(); long nowMinusScale = now - scale; - sessions.keySet().forEach((uuid) -> { - List s = sessions.get(uuid); + + sessions.forEach((uuid, s) -> { for (SessionData session : s) { - if (scale != -1) { - if (session.getSessionStart() < nowMinusScale) { - continue; - } + if (scale != -1 + && session.getSessionStart() < nowMinusScale) { + continue; } int day = getDayOfYear(session); @@ -246,11 +247,14 @@ public class AnalysisUtils { uniqueJoins.get(day).add(uuid); } }); + int total = MathUtils.sumInt(uniqueJoins.values().stream().map(Set::size)); - int numberOfDays = uniqueJoins.keySet().size(); + int numberOfDays = uniqueJoins.size(); + if (numberOfDays == 0) { return 0; } + return total / numberOfDays; } @@ -268,8 +272,10 @@ public class AnalysisUtils { days.add(day); } } + long total = registers.stream().filter(date -> date >= nowMinusScale).count(); int numberOfDays = days.size(); + if (numberOfDays == 0) { return 0; } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java index 1694ef16b..8d909d60b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/DouglasPeuckerAlgorithm.java @@ -13,11 +13,18 @@ import java.util.List; */ public class DouglasPeuckerAlgorithm { + /** + * Constructor used to hide the public constructor + */ + private DouglasPeuckerAlgorithm() { + throw new IllegalStateException("Utility class"); + } + public static List reducePoints(List points, double epsilon) { if (points.isEmpty()) { return points; } - if (epsilon == -1) { + if (Double.compare(epsilon, -1) == 0) { epsilon = 0.002; } int size = points.size(); 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 ff057faa6..024ec1f28 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 @@ -22,6 +22,13 @@ import java.util.List; */ public class ExportUtility { + /** + * Constructor used to hide the public constructor + */ + private ExportUtility() { + throw new IllegalStateException("Utility class"); + } + /** * @return */ @@ -29,10 +36,9 @@ public class ExportUtility { String path = Settings.ANALYSIS_EXPORT_PATH.toString(); if (path.contains(":")) { File folder = new File(path); - if (folder.exists()) { - if (folder.isDirectory()) { - return folder; - } + if (folder.exists() + && folder.isDirectory()) { + return folder; } folder.mkdirs(); return folder; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Line.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Line.java index 8e0ee19b2..03212d13e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Line.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Line.java @@ -55,7 +55,6 @@ public class Line { public double getPerpendicularDistance(Point from) { double a = getA(); - double b = -1; double x = from.getX(); double y = from.getY(); return Math.abs(a * x - y + c) / Math.sqrt(Math.pow(a, 2) + 1); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/MathUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/MathUtils.java index 0bf418da4..bf1ea03b0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/MathUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/MathUtils.java @@ -11,6 +11,13 @@ import java.util.stream.Stream; */ public class MathUtils { + /** + * Constructor used to hide the public constructor + */ + private MathUtils() { + throw new IllegalStateException("Utility class"); + } + private static final DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(Locale.ENGLISH); private static final DecimalFormat decimalFormat = new DecimalFormat("#.##", decimalFormatSymbols); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java index f1eba4c7c..352fa9c77 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java @@ -10,6 +10,13 @@ import java.util.Map; */ public class MapComparator { + /** + * Constructor used to hide the public constructor + */ + private MapComparator() { + throw new IllegalStateException("Utility class"); + } + /** * Sorts a HashMap of String, Integer by the Values of the HashMap. * @@ -19,7 +26,7 @@ public class MapComparator { */ public static List sortByValue(Map hashMap) { List sortedList = new ArrayList<>(); - hashMap.keySet().forEach((key) -> sortedList.add(new String[]{"" + hashMap.get(key), key})); + hashMap.keySet().forEach(key -> sortedList.add(new String[]{String.valueOf(hashMap.get(key)), key})); sortedList.sort(Comparator.comparingInt(strings -> Integer.parseInt(strings[0]))); return sortedList; } @@ -30,7 +37,7 @@ public class MapComparator { */ public static List sortByValueLong(Map hashMap) { List sortedList = new ArrayList<>(); - hashMap.keySet().forEach((key) -> sortedList.add(new String[]{"" + hashMap.get(key), key})); + hashMap.keySet().forEach(key -> sortedList.add(new String[]{String.valueOf(hashMap.get(key)), key})); sortedList.sort(Comparator.comparing(strings -> Long.valueOf(strings[0]))); return sortedList; } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/Metrics.java b/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/Metrics.java index 028ed39cf..7d390da0c 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/Metrics.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/metrics/Metrics.java @@ -351,9 +351,9 @@ public class Metrics { return null; } chart.put("data", data); - } catch (Throwable t) { + } catch (Exception e) { if (logFailedRequests) { - Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t); + Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, e); } return null; } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/uuid/UUIDUtility.java b/Plan/src/main/java/com/djrapitops/plan/utilities/uuid/UUIDUtility.java index e00e8324f..8000fa78e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/uuid/UUIDUtility.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/uuid/UUIDUtility.java @@ -18,6 +18,13 @@ import java.util.UUID; */ public class UUIDUtility { + /** + * Constructor used to hide the public constructor + */ + private UUIDUtility() { + throw new IllegalStateException("Utility class"); + } + /** * @param playername * @return 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 b3792bc73..8af82d60f 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 @@ -30,7 +30,7 @@ public class PhraseTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); } /** @@ -49,7 +49,7 @@ public class PhraseTest { * */ @Test - public void testParse_0args() { + public void testParseWithZeroArgs() { Phrase instance = Phrase.DEM_UNKNOWN; String expResult = "Not Known"; String result = instance.parse(); @@ -60,7 +60,7 @@ public class PhraseTest { * */ @Test - public void testParse_StringArr() { + public void testParseStringArr() { Phrase instance = Phrase.REPLACE0; String expResult = "Test"; String result = instance.parse(expResult); 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 d39a6253c..d0bf2470b 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 @@ -38,7 +38,7 @@ public class SettingsTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); } /** 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 59ed1e1b3..9c5355247 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 @@ -74,7 +74,7 @@ public class DataCacheHandlerTest { } @Override - public HashMap getCommandUse() { + public Map getCommandUse() { return new HashMap<>(); } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java index 2f9c863a7..9815f778d 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java @@ -41,7 +41,7 @@ public class SessionCacheTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); test = new SessionCache(); } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueueTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueueTest.java index b97269237..fd6613001 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueueTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueueTest.java @@ -50,7 +50,7 @@ public class DataCacheProcessQueueTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); handler = new DataCacheHandler(Plan.getInstance()) { @Override public boolean getCommandUseFromDb() { 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 b34688f9a..52440e1a2 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 @@ -63,7 +63,6 @@ public class DataCacheSaveQueueTest { calledSaveUserData2 = true; } calledSaveUserData = true; - } }; when(plan.getDB()).thenReturn(db); diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/ChatHandlingTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/ChatHandlingTest.java index 0bc5e0d43..7a7d46dfe 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/ChatHandlingTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/ChatHandlingTest.java @@ -36,7 +36,7 @@ public class ChatHandlingTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); } /** @@ -46,7 +46,7 @@ public class ChatHandlingTest { public void testProcessChatInfoAddedNickname() { UserData data = MockUtils.mockUser2(); String expected = "TestNicknameChatHandling"; - ChatHandling.processChatInfo(data, expected, ""); + ChatHandling.processChatInfo(data, expected); assertTrue("Didn't add nickname", data.getNicknames().contains(expected)); } } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KickInfoTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KickInfoTest.java index eaeee56f1..7aa312247 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KickInfoTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/KickInfoTest.java @@ -37,7 +37,7 @@ public class KickInfoTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); } /** diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/LogoutInfoTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/LogoutInfoTest.java index 3c929ef84..7215eb344 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/LogoutInfoTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/handling/info/LogoutInfoTest.java @@ -43,7 +43,6 @@ public class LogoutInfoTest { data.setLastPlayed(10L); data.updateBanned(false); long time = 20L; - Exception ex = null; data.setLastGamemode("SURVIVAL"); LogoutInfo i = new LogoutInfo(data.getUuid(), time, true, Gamemode.CREATIVE, new SessionData(0, 1)); assertTrue(i.process(data)); diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/ui/HtmlTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/ui/HtmlTest.java index b3df7440c..47248be64 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/ui/HtmlTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/ui/HtmlTest.java @@ -26,7 +26,7 @@ public class HtmlTest { * */ @Test - public void testParse_0args() { + public void testParseWithZeroArgs() { Html instance = Html.REPLACE0; String expResult = "REPLACE0"; String result = instance.parse(); @@ -37,7 +37,7 @@ public class HtmlTest { * */ @Test - public void testParse_StringArr() { + public void testParseStringArr() { Html instance = Html.REPLACE0; String expResult = "Test"; String result = instance.parse(expResult); 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 5d57d3ca2..69f83f25a 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 @@ -42,7 +42,7 @@ public class FormatUtilsTest { */ @Test public void testFormatTimeAmount() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); long second = 1000L; String expResult = "1s"; String result = FormatUtils.formatTimeAmount(second); diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java index 40b0a54c2..f63f20619 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java @@ -45,7 +45,7 @@ public class HtmlUtilsTest { */ @Test public void testGetHtmlStringFromResource() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); String fileName = "player.html"; String result = HtmlUtils.getStringFromResource(fileName); assertTrue("Result empty", !result.isEmpty()); diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/ManageUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/ManageUtilsTest.java index eb6f46368..e37180f70 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/ManageUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/ManageUtilsTest.java @@ -43,7 +43,7 @@ public class ManageUtilsTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); } /** diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtilsTest.java index 024fa9201..c698f6c78 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtilsTest.java @@ -40,7 +40,7 @@ public class AnalysisUtilsTest { */ @Before public void setUp() throws Exception { - TestInit t = TestInit.init(); + TestInit.init(); } /** diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/MathUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/MathUtilsTest.java index 1b2a7e947..6424f233c 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/MathUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/analysis/MathUtilsTest.java @@ -38,7 +38,7 @@ public class MathUtilsTest { l.add(5); l.add(15); double result = MathUtils.averageInt(l.stream()); - assertTrue(exp == result); + assertTrue(Double.compare(exp, result) == 0); } /** @@ -49,7 +49,7 @@ public class MathUtilsTest { List l = new ArrayList<>(); double exp = 0; double result = MathUtils.averageInt(l.stream()); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } /** @@ -64,7 +64,7 @@ public class MathUtilsTest { l.add(5L); l.add(15L); double result = MathUtils.averageLong(l); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } /** @@ -79,7 +79,7 @@ public class MathUtilsTest { l.add(4.5); l.add(15.0); double result = MathUtils.averageDouble(l.stream()); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } @@ -90,7 +90,7 @@ public class MathUtilsTest { public void testAverage() { double exp = 10; double result = MathUtils.average(40, 4); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } /** @@ -107,7 +107,7 @@ public class MathUtilsTest { l.add(false); } long result = MathUtils.countTrueBoolean(l.stream()); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } /** @@ -122,7 +122,7 @@ public class MathUtilsTest { l.add(5); l.add(15); double result = MathUtils.sumInt(l.stream()); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } /** @@ -137,7 +137,7 @@ public class MathUtilsTest { l.add(5L); l.add(15L); long result = MathUtils.sumLong(l.stream()); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } /** @@ -152,6 +152,6 @@ public class MathUtilsTest { l.add(45.0); l.add(5.0531541); double result = MathUtils.sumDouble(l.stream()); - assertTrue(result + "/" + exp, exp == result); + assertTrue(result + "/" + exp, Double.compare(exp, result) == 0); } } From fb4225a377db503509785fac29ec76f7ee9f52ec Mon Sep 17 00:00:00 2001 From: Fuzzlemann Date: Sat, 29 Jul 2017 10:26:58 +0200 Subject: [PATCH 5/5] Fixed some bugs resulting of my changes --- .../main/java/com/djrapitops/plan/utilities/HtmlUtils.java | 4 +++- .../java/com/djrapitops/plan/utilities/analysis/Analysis.java | 2 +- .../com/djrapitops/plan/utilities/analysis/AnalysisUtils.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java index 77b7078c3..5113bcef7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/HtmlUtils.java @@ -181,12 +181,14 @@ public class HtmlUtils { Html.COLOR_A, Html.COLOR_B, Html.COLOR_C, Html.COLOR_D, Html.COLOR_E, Html.COLOR_F}; for (Html html : replacer) { - string = string.replace("§" + html.name().charAt(6), html.parse()); + string = string.replace("§" + Character.toLowerCase(html.name().charAt(6)), html.parse()); } + int spans = string.split("
").append(link).append("