diff --git a/.gitignore b/.gitignore
index f68374daf..7276b0495 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,9 @@
/dist/
/build/
/nbproject/
-/Plan Lite/build/
-/Plan Lite/dist/
-/Plan Lite/nbproject/private/
/Plan/nbproject/
/Plan/target/
/Plan/temporaryTestFolder/
/Debugger/nbproject/private/
-/PlanDebugger/nbproject/private/
\ No newline at end of file
+/PlanDebugger/
+/Plan Lite/
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/Log.java b/Plan/src/main/java/com/djrapitops/plan/Log.java
index 23a7e839f..357df98ad 100644
--- a/Plan/src/main/java/com/djrapitops/plan/Log.java
+++ b/Plan/src/main/java/com/djrapitops/plan/Log.java
@@ -9,13 +9,15 @@ import java.util.Date;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
/**
+ * This class manages the messages going to the Bukkit's Logger.
*
* @author Rsl1122
+ * @since 3.0.0
*/
public class Log {
/**
- * Logs the message to the console.
+ * Logs the message to the console as INFO.
*
* @param message "Message" will show up as [INFO][Plan]: Message
*/
@@ -27,17 +29,22 @@ public class Log {
}
/**
- * Logs an error message to the console.
+ * Logs an error message to the console as ERROR.
*
* @param message "Message" will show up as [ERROR][Plan]: Message
*/
- public static void errorMsg(String message) {
+ public static void error(String message) {
Plan instance = Plan.getInstance();
if (instance != null) {
instance.getLogger().severe(message);
}
}
+ /**
+ * Logs a debug message to the console as INFO if Settings.Debug is true.
+ *
+ * @param message "Message" will show up as [INFO][Plan]: [DEBUG] Message
+ */
public static void debug(String message) {
if (Settings.DEBUG.isTrue()) {
info("[DEBUG] " + message);
@@ -51,7 +58,7 @@ public class Log {
* @param e Throwable, eg NullPointerException
*/
public static void toLog(String source, Throwable e) {
- errorMsg(Phrase.ERROR_LOGGED.parse(e.toString()));
+ error(Phrase.ERROR_LOGGED.parse(e.toString()));
toLog(source + " Caught " + e);
for (StackTraceElement x : e.getStackTrace()) {
toLog(" " + x);
diff --git a/Plan/src/main/java/com/djrapitops/plan/Permissions.java b/Plan/src/main/java/com/djrapitops/plan/Permissions.java
index d200aff90..174075a69 100644
--- a/Plan/src/main/java/com/djrapitops/plan/Permissions.java
+++ b/Plan/src/main/java/com/djrapitops/plan/Permissions.java
@@ -6,6 +6,7 @@ import org.bukkit.command.CommandSender;
* Permissions class is used easily check every permission node.
*
* @author Rsl1122
+ * @since 3.0.0
*/
public enum Permissions {
diff --git a/Plan/src/main/java/com/djrapitops/plan/Phrase.java b/Plan/src/main/java/com/djrapitops/plan/Phrase.java
index 531a948bd..68b0330c7 100644
--- a/Plan/src/main/java/com/djrapitops/plan/Phrase.java
+++ b/Plan/src/main/java/com/djrapitops/plan/Phrase.java
@@ -14,6 +14,7 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
* or ChatColor.
*
* @author Rsl1122
+ * @since 2.0.0
*/
public enum Phrase {
REPLACE0("REPLACE0"),
diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java
index 3e0d77b27..62fa32fca 100644
--- a/Plan/src/main/java/com/djrapitops/plan/Plan.java
+++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java
@@ -22,11 +22,9 @@ package main.java.com.djrapitops.plan;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintWriter;
import java.net.URL;
import java.util.Collection;
import java.util.Date;
@@ -42,7 +40,6 @@ import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.databases.*;
import main.java.com.djrapitops.plan.ui.Html;
import main.java.com.djrapitops.plan.ui.webserver.WebSocketServer;
-import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
@@ -56,6 +53,7 @@ import org.bukkit.scheduler.BukkitTask;
* the Bukkit console & various get methods.
*
* @author Rsl1122
+ * @since 1.0.0
*/
public class Plan extends JavaPlugin {
@@ -99,7 +97,7 @@ public class Plan extends JavaPlugin {
if (initDatabase()) {
Log.info(Phrase.DB_ESTABLISHED.parse(db.getConfigName()));
} else {
- Log.errorMsg(Phrase.DB_FAILURE_DISABLE.toString());
+ Log.error(Phrase.DB_FAILURE_DISABLE.toString());
getServer().getPluginManager().disablePlugin(this);
return;
}
@@ -179,7 +177,7 @@ public class Plan extends JavaPlugin {
*/
@Deprecated
public void logError(String message) {
- Log.errorMsg(message);
+ Log.error(message);
}
/**
diff --git a/Plan/src/main/java/com/djrapitops/plan/Settings.java b/Plan/src/main/java/com/djrapitops/plan/Settings.java
index 0e0cc7c39..bd54b0c3f 100644
--- a/Plan/src/main/java/com/djrapitops/plan/Settings.java
+++ b/Plan/src/main/java/com/djrapitops/plan/Settings.java
@@ -1,12 +1,11 @@
package main.java.com.djrapitops.plan;
-import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
-
/**
* This enum contains all of the config settings used by the plugin for easier
* access.
*
* @author Rsl1122
+ * @since 2.3.2
*/
public enum Settings {
// Boolean
@@ -70,7 +69,7 @@ public enum Settings {
* @return Boolean value of the config setting, false if not boolean.
*/
public boolean isTrue() {
- return getPlugin(Plan.class).getConfig().getBoolean(configPath);
+ return Plan.getInstance().getConfig().getBoolean(configPath);
}
/**
@@ -80,7 +79,7 @@ public enum Settings {
*/
@Override
public String toString() {
- return getPlugin(Plan.class).getConfig().getString(configPath);
+ return Plan.getInstance().getConfig().getString(configPath);
}
/**
@@ -89,7 +88,7 @@ public enum Settings {
* @return Integer value of the config setting
*/
public int getNumber() {
- return getPlugin(Plan.class).getConfig().getInt(configPath);
+ return Plan.getInstance().getConfig().getInt(configPath);
}
/**
diff --git a/Plan/src/main/java/com/djrapitops/plan/api/API.java b/Plan/src/main/java/com/djrapitops/plan/api/API.java
index d638e30ed..e90945481 100644
--- a/Plan/src/main/java/com/djrapitops/plan/api/API.java
+++ b/Plan/src/main/java/com/djrapitops/plan/api/API.java
@@ -11,8 +11,12 @@ import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.UUIDFetcher;
/**
+ * This class contains the API methods.
+ *
+ * Revamp incoming in 3.1.0
*
* @author Rsl1122
+ * @since 2.0.0
*/
public class API {
@@ -102,8 +106,9 @@ public class API {
* Returns the ip:port/player/playername html as a string so it can be
* integrated into other webserver plugins.
*
- * Should use cacheUserDataToInspectCache(UUID uuid) before using this method.
- *
+ * Should use cacheUserDataToInspectCache(UUID uuid) before using this
+ * method.
+ *
* If UserData of the specified player is not in the Cache returns
404
* Data was not found in cache
*
@@ -134,7 +139,7 @@ public class API {
* other webserver plugins.
*
* Should use updateAnalysisCache() before using this method.
- *
+ *
* If AnalysisData is not in the AnalysisCache: returns 404 Data was not
* found in cache
*
diff --git a/Plan/src/main/java/com/djrapitops/plan/api/Gender.java b/Plan/src/main/java/com/djrapitops/plan/api/Gender.java
index c08e7c619..c21b25a8c 100644
--- a/Plan/src/main/java/com/djrapitops/plan/api/Gender.java
+++ b/Plan/src/main/java/com/djrapitops/plan/api/Gender.java
@@ -4,6 +4,7 @@ package main.java.com.djrapitops.plan.api;
* This class contains Genders used by the plugin.
*
* @author Rsl1122
+ * @since 2.0.0
*/
public enum Gender {
MALE, FEMALE, OTHER, UNKNOWN;
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/CommandType.java b/Plan/src/main/java/com/djrapitops/plan/command/CommandType.java
index 71fe1f3ca..925a64178 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/CommandType.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/CommandType.java
@@ -7,6 +7,7 @@ package main.java.com.djrapitops.plan.command;
* CONSOLE_WITH_ARGUMENTS can be used always, except with arguments on console.
*
* @author Rsl1122
+ * @since 1.0.0
*/
public enum CommandType {
CONSOLE,
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 bc2c999b9..5bf0c1734 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/PlanCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/PlanCommand.java
@@ -15,6 +15,7 @@ import org.bukkit.entity.Player;
* CommandExecutor for the /plan command, and all subcommands.
*
* @author Rsl1122
+ * @since 1.0.0
*/
public class PlanCommand implements CommandExecutor {
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/SubCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/SubCommand.java
index afb4c0277..ef1dbf88e 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/SubCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/SubCommand.java
@@ -9,6 +9,7 @@ import org.bukkit.command.CommandSender;
* command.
*
* @author Rsl1122
+ * @since 1.0.0
*/
public abstract class SubCommand {
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 b06234f6b..01e05757a 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
@@ -22,6 +22,7 @@ import org.bukkit.scheduler.BukkitTask;
* This subcommand is used to run the analysis and access the /server link.
*
* @author Rsl1122
+ * @since 2.0.0
*/
public class AnalyzeCommand extends SubCommand {
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/HelpCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/HelpCommand.java
index 9f40b5025..787f7d941 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/commands/HelpCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/HelpCommand.java
@@ -15,6 +15,7 @@ import org.bukkit.entity.Player;
* This subcommand is used to view the subcommands.
*
* @author Rsl1122
+ * @since 1.0.0
*/
public class HelpCommand extends SubCommand {
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/InfoCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/InfoCommand.java
index d6925c92d..3bbea48f5 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/commands/InfoCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/InfoCommand.java
@@ -14,6 +14,7 @@ import org.bukkit.command.CommandSender;
* This subcommand is used to view the version & the database type in use.
*
* @author Rsl1122
+ * @since 2.0.0
*/
public class InfoCommand extends SubCommand {
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 323fee5b5..288b9444a 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
@@ -24,6 +24,7 @@ import org.bukkit.scheduler.BukkitTask;
* This command is used to cache UserData to InspectCache and display the link.
*
* @author Rsl1122
+ * @since 1.0.0
*/
public class InspectCommand extends SubCommand {
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 078f98a70..266accc52 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
@@ -14,8 +14,12 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
+ * This command is used to manage the database of the plugin.
+ *
+ * No arguments will run ManageHelpCommand. Contains subcommands.
*
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageCommand extends SubCommand {
@@ -28,7 +32,7 @@ public class ManageCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageCommand(Plan plugin) {
- super("manage, m", Permissions.MANAGE, Phrase.CMD_USG_MANAGE+"", CommandType.CONSOLE, "");
+ super("manage, m", Permissions.MANAGE, Phrase.CMD_USG_MANAGE + "", CommandType.CONSOLE, "");
this.plugin = plugin;
commands = new ArrayList<>();
commands.add(new ManageHelpCommand(plugin, this));
@@ -39,10 +43,12 @@ public class ManageCommand extends SubCommand {
commands.add(new ManageStatusCommand(plugin));
commands.add(new ManageImportCommand(plugin));
commands.add(new ManageRemoveCommand(plugin));
- commands.add(new ManageClearCommand(plugin));
+ commands.add(new ManageClearCommand(plugin));
}
/**
+ * Used to get the list of manage subcommands.
+ *
* @return Initialized SubCommands
*/
public List getCommands() {
@@ -105,7 +111,7 @@ public class ManageCommand extends SubCommand {
}
if (console && args.length < 2 && command.getCommandType() == CommandType.CONSOLE_WITH_ARGUMENTS) {
- sender.sendMessage("" + Phrase.COMMAND_REQUIRES_ARGUMENTS.parse(Phrase.USE_MANAGE+""));
+ sender.sendMessage("" + Phrase.COMMAND_REQUIRES_ARGUMENTS.parse(Phrase.USE_MANAGE + ""));
return true;
}
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 253c720ca..6d3237f07 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
@@ -4,24 +4,21 @@ import java.util.Date;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
-import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.command.CommandType;
import main.java.com.djrapitops.plan.command.SubCommand;
import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler;
import main.java.com.djrapitops.plan.ui.TextUI;
-import main.java.com.djrapitops.plan.utilities.HtmlUtils;
-import org.bukkit.Bukkit;
import org.bukkit.command.Command;
-import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
- * This subcommand is used to run the analysis and access the /server link.
+ * This subcommand is used to run the analysis and to view some of the data in
+ * game.
*
* @author Rsl1122
+ * @since 3.0.0
*/
public class QuickAnalyzeCommand extends SubCommand {
@@ -71,7 +68,7 @@ public class QuickAnalyzeCommand extends SubCommand {
public void run() {
timesrun++;
if (analysisCache.isCached()) {
- sender.sendMessage(Phrase.CMD_ANALYZE_HEADER + "");
+ sender.sendMessage(Phrase.CMD_ANALYZE_HEADER + "");
sender.sendMessage(TextUI.getAnalysisMessages());
sender.sendMessage(Phrase.CMD_FOOTER + "");
this.cancel();
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 6a4b5cfda..ebcb6ebc0 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
@@ -9,21 +9,21 @@ import main.java.com.djrapitops.plan.command.CommandType;
import main.java.com.djrapitops.plan.command.SubCommand;
import main.java.com.djrapitops.plan.data.cache.InspectCacheHandler;
import main.java.com.djrapitops.plan.ui.TextUI;
-import main.java.com.djrapitops.plan.utilities.HtmlUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.UUIDFetcher;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
- * This command is used to cache UserData to InspectCache and display the link.
+ * This command is used to cache UserData to InspectCache and to view some of
+ * the data in game.
*
* @author Rsl1122
+ * @since 3.0.0
*/
public class QuickInspectCommand extends SubCommand {
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/ReloadCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/ReloadCommand.java
index 05286986f..0af309c1f 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/commands/ReloadCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/ReloadCommand.java
@@ -9,8 +9,10 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
/**
+ * This subcommand is used to reload the plugin.
*
* @author Rsl1122
+ * @since 2.0.0
*/
public class ReloadCommand extends SubCommand {
@@ -33,7 +35,6 @@ public class ReloadCommand extends SubCommand {
plugin.onDisable();
plugin.onEnable();
sender.sendMessage(Phrase.RELOAD_COMPLETE + "");
-
return true;
}
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 59d4fbb32..0fe5dddbf 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
@@ -22,8 +22,10 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
+ * This subcommand is used to search for a user, and to view all matches' data.
*
* @author Rsl1122
+ * @since 2.0.0
*/
public class SearchCommand extends SubCommand {
@@ -44,7 +46,7 @@ public class SearchCommand extends SubCommand {
/**
* Subcommand search.
*
- * Searches database for matching playernames and caches matching PlayerData
+ * Searches database for matching playernames and caches matching UserData
* to InspectCache. Shows all links to matching players data.
*
* @param sender
@@ -110,10 +112,10 @@ public class SearchCommand extends SubCommand {
Bukkit.getServer().dispatchCommand(
Bukkit.getConsoleSender(),
"tellraw " + player.getName() + " [\"\",{\"text\":\"Click Me\",\"underlined\":true,"
- + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}}]");
+ + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}}]");
}
}.runTask(plugin);
-
+
}
}
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java
index 5d5e71dbe..4c1fd8f0f 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java
@@ -12,8 +12,10 @@ import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
+ * This manage subcommand is used to backup a database to a .db file.
*
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageBackupCommand extends SubCommand {
@@ -36,7 +38,7 @@ public class ManageBackupCommand extends SubCommand {
* @param sender
* @param cmd
* @param commandLabel
- * @param args Player's name or nothing - if empty sender's name is used.
+ * @param args mysql or sqlite, -a to confirm.
* @return true in all cases.
*/
@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 d0c744550..066044f70 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
@@ -13,11 +13,13 @@ import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
+ * This manage subcommand is used to clear a database of all data.
*
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageClearCommand extends SubCommand {
-
+
private final Plan plugin;
/**
@@ -27,7 +29,7 @@ public class ManageClearCommand extends SubCommand {
*/
public ManageClearCommand(Plan plugin) {
super("clear", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_CLEAR + "", CommandType.CONSOLE_WITH_ARGUMENTS, " [-a]");
-
+
this.plugin = plugin;
}
@@ -59,7 +61,7 @@ public class ManageClearCommand extends SubCommand {
sender.sendMessage(Phrase.COMMAND_ADD_CONFIRMATION_ARGUMENT.parse(Phrase.WARN_REMOVE.parse(args[0])));
return true;
}
-
+
Database clearDB = null;
for (Database database : plugin.getDatabases()) {
if (dbToClear.equalsIgnoreCase(database.getConfigName())) {
@@ -72,7 +74,7 @@ public class ManageClearCommand extends SubCommand {
plugin.logError(dbToClear + " was null!");
return true;
}
-
+
final Database clearThisDB = clearDB;
(new BukkitRunnable() {
@Override
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHelpCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHelpCommand.java
index 624db1a03..ef7a3ef97 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHelpCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHelpCommand.java
@@ -12,8 +12,10 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
+ * This manage subcommand is used to view all other manage subcommands.
*
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageHelpCommand extends SubCommand {
@@ -34,7 +36,7 @@ public class ManageHelpCommand extends SubCommand {
}
@Override
- public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
+ public boolean onCommand(CommandSender sender, Command c, String commandLabel, String[] args) {
ChatColor oColor = Phrase.COLOR_MAIN.color();
ChatColor tColor = Phrase.COLOR_SEC.color();
@@ -43,21 +45,21 @@ public class ManageHelpCommand extends SubCommand {
// Header
sender.sendMessage(Phrase.CMD_MANAGE_HELP_HEADER + "");
// Help results
- for (SubCommand command : this.command.getCommands()) {
- if (command.getName().equalsIgnoreCase(getName())) {
+ for (SubCommand cmd : this.command.getCommands()) {
+ if (cmd.getName().equalsIgnoreCase(getName())) {
continue;
}
- if (!command.getPermission().userHasThisPermission(sender)) {
+ if (!cmd.getPermission().userHasThisPermission(sender)) {
continue;
}
- if (!(sender instanceof Player) && command.getCommandType() == CommandType.PLAYER) {
+ if (!(sender instanceof Player) && cmd.getCommandType() == CommandType.PLAYER) {
continue;
}
sender.sendMessage(tColor + " " + Phrase.BALL.toString() + oColor
- + " /plan manage " + command.getFirstName() + " " + command.getArguments() + tColor + " - " + command.getUsage());
+ + " /plan manage " + cmd.getFirstName() + " " + cmd.getArguments() + tColor + " - " + cmd.getUsage());
}
// Footer
sender.sendMessage(hColor + Phrase.ARROWS_RIGHT.toString());
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 83b1a4a4c..f9a0845aa 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
@@ -11,8 +11,11 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
/**
+ * This manage subcommand is used to swap to a different database and reload the
+ * plugin if the connection to the new database can be established.
*
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageHotswapCommand extends SubCommand {
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 d4b01a7de..7d336abeb 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
@@ -22,8 +22,12 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
- *
+ * This manage subcommand is used to import data from 3rd party plugins.
+ *
+ * Supported plugins (v3.0.0) : OnTime
+ *
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageImportCommand extends SubCommand {
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java
index ce38f63d3..b74ebef25 100644
--- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java
+++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java
@@ -15,8 +15,12 @@ import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
- *
+ * This manage subcommand is used to move all data from one database to another.
+ *
+ * Destination database will be cleared.
+ *
* @author Rsl1122
+ * @since 2.3.0
*/
public class ManageMoveCommand extends SubCommand {
@@ -32,20 +36,7 @@ public class ManageMoveCommand extends SubCommand {
this.plugin = plugin;
}
-
- /**
- * Subcommand inspect.
- *
- * Adds player's data from DataCache/DB to the InspectCache for amount of
- * time specified in the config, and clears the data from Cache with a timer
- * task.
- *
- * @param sender
- * @param cmd
- * @param commandLabel
- * @param args Player's name or nothing - if empty sender's name is used.
- * @return true in all cases.
- */
+
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (args.length < 2) {
@@ -93,7 +84,7 @@ public class ManageMoveCommand extends SubCommand {
plugin.logError(toDB + " was null!");
return true;
}
-
+
final Database moveFromDB = fromDatabase;
final Database moveToDB = toDatabase;
(new BukkitRunnable() {
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 761ad1bf4..4bc89eb43 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
@@ -17,6 +17,8 @@ import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
+ * This manage subcommand is used to remove a single player's data from the
+ * database.
*
* @author Rsl1122
*/
@@ -35,19 +37,6 @@ public class ManageRemoveCommand extends SubCommand {
this.plugin = plugin;
}
- /**
- * Subcommand inspect.
- *
- * Adds player's data from DataCache/DB to the InspectCache for amount of
- * time specified in the config, and clears the data from Cache with a timer
- * task.
- *
- * @param sender
- * @param cmd
- * @param commandLabel
- * @param args Player's name or nothing - if empty sender's name is used.
- * @return true in all cases.
- */
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (args.length == 0) {
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 88d9b997a..fccbf1544 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
@@ -18,12 +18,14 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
+ * This manage subcommand is used to restore a backup.db file in the
+ * /plugins/Plan folder.
*
* @author Rsl1122
*/
public class ManageRestoreCommand extends SubCommand {
- private Plan plugin;
+ private final Plan plugin;
/**
* Class Constructor.
@@ -36,15 +38,6 @@ public class ManageRestoreCommand extends SubCommand {
this.plugin = plugin;
}
- /**
- * Subcommand Manage backup.
- *
- * @param sender
- * @param cmd
- * @param commandLabel
- * @param args Player's name or nothing - if empty sender's name is used.
- * @return true in all cases.
- */
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
try {
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 c8c286b1e..b256b59b0 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
@@ -10,12 +10,13 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
/**
+ * This manage subcommand is used to check the status of the database.
*
* @author Rsl1122
*/
public class ManageStatusCommand extends SubCommand {
- private Plan plugin;
+ private final Plan plugin;
/**
* Class Constructor.
@@ -28,29 +29,14 @@ public class ManageStatusCommand extends SubCommand {
this.plugin = plugin;
}
- /**
- * Subcommand inspect.
- *
- * Adds player's data from DataCache/DB to the InspectCache for amount of
- * time specified in the config, and clears the data from Cache with a timer
- * task.
- *
- * @param sender
- * @param cmd
- * @param commandLabel
- * @param args Player's name or nothing - if empty sender's name is used.
- * @return true in all cases.
- */
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
ChatColor hColor = Phrase.COLOR_TER.color();
- // Header
sender.sendMessage(Phrase.CMD_MANAGE_STATUS_HEADER + "");
sender.sendMessage(Phrase.CMD_MANAGE_STATUS_ACTIVE_DB.parse(plugin.getDB().getConfigName()));
- // Footer
sender.sendMessage(hColor + Phrase.ARROWS_RIGHT.toString());
return true;
}
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 5acac496a..4de10f67b 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/AnalysisData.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/AnalysisData.java
@@ -3,10 +3,23 @@ package main.java.com.djrapitops.plan.data;
import java.util.Arrays;
import java.util.Objects;
import main.java.com.djrapitops.plan.ui.Html;
+import main.java.com.djrapitops.plan.ui.RecentPlayersButtonsCreator;
+import main.java.com.djrapitops.plan.ui.tables.SortableCommandUseTableCreator;
+import main.java.com.djrapitops.plan.ui.tables.SortablePlayersTableCreator;
+import main.java.com.djrapitops.plan.utilities.Analysis;
+import main.java.com.djrapitops.plan.utilities.AnalysisUtils;
+import main.java.com.djrapitops.plan.utilities.PlaceholderUtils;
/**
+ * This class is used to store result data from Analysis at runtime.
+ *
+ * Most of the variables need to be set with various set methods, as they are
+ * not initialized in a constructor.
*
* @author Rsl1122
+ * @since 2.0.0
+ * @see Analysis
+ * @see PlaceholderUtils
*/
public class AnalysisData {
@@ -17,7 +30,6 @@ public class AnalysisData {
private double averageAge;
private String commandUseTableHtml;
private long totalCommands;
- private String top20ActivePlayers;
private String recentPlayers;
private String sortablePlayersTable;
private String[] playersDataArray;
@@ -56,12 +68,11 @@ public class AnalysisData {
/**
* Class constructor.
*
- * All data has to be set with setters to avoid NPE.
+ * All data has to be set with setters to avoid NPEs.
*/
public AnalysisData() {
sortablePlayersTable = Html.ERROR_NOT_SET + "";
commandUseTableHtml = Html.ERROR_NOT_SET + "";
- top20ActivePlayers = Html.ERROR_NOT_SET + "";
recentPlayers = Html.ERROR_NOT_SET + "";
geomapCountries = Html.ERROR_NOT_SET + "";
geomapZ = Html.ERROR_NOT_SET + "";
@@ -70,7 +81,6 @@ public class AnalysisData {
genderData = new int[]{0, 0, 0};
}
- // Getters and setters v---------------------------------v
@Override
public boolean equals(Object obj) {
if (this == obj) {
@@ -155,9 +165,6 @@ public class AnalysisData {
if (!Objects.equals(this.commandUseTableHtml, other.commandUseTableHtml)) {
return false;
}
- if (!Objects.equals(this.top20ActivePlayers, other.top20ActivePlayers)) {
- return false;
- }
if (!Objects.equals(this.recentPlayers, other.recentPlayers)) {
return false;
}
@@ -183,106 +190,151 @@ public class AnalysisData {
}
/**
+ * Used to get the toString representation of a String[] containing all
+ * countries on the Plotly.js Chloropleth map.
*
- * @return
+ * @return ["Finland","Sweden","Etc.."]
*/
public String getGeomapCountries() {
return geomapCountries;
}
/**
+ * Used to set the toString representation of a String[] containing all
+ * countries on the Plotly.js Chloropleth map.
*
- * @param geomapCountries
+ * Incorrect value will break the Chloropleth map on analysis.html page.
+ *
+ * @param geomapCountries ["Finland","Sweden","Etc.."]
*/
public void setGeomapCountries(String geomapCountries) {
this.geomapCountries = geomapCountries;
}
/**
+ * Used to get the toString representation of a int[] containing all player
+ * amounts on the Plotly.js Chloropleth map.
*
- * @return
+ * Must contain same amount of numbers as countries in GeomapCountries.
+ *
+ * @return [0,0,0,3,0,Etc..]
*/
public String getGeomapZ() {
return geomapZ;
}
/**
+ * Used to set the toString representation of a int[] containing all player
+ * amounts on the Plotly.js Chloropleth map.
*
- * @param geomapZ
+ * Must contain same amount of numbers as countries in GeomapCountries.
+ * Incorrect amount will break the Chloropleth map on analysis.html page.
+ *
+ * @param geomapZ [0,0,0,3,0,Etc..]
*/
public void setGeomapZ(String geomapZ) {
this.geomapZ = geomapZ;
}
/**
+ * Used to get the toString representation of a String[] containing all
+ * country codes on the Plotly.js Chloropleth map.
*
- * @return
+ * Must contain same amount of numbers as countries in GeomapCountries.
+ *
+ * @return ["PNG","KHM","KAZ","PRY","SYR","SLB","MLI","Etc.."]
*/
public String getGeomapCodes() {
return geomapCodes;
}
/**
+ * Used to set the toString representation of a String[] containing all
+ * country codes on the Plotly.js Chloropleth map.
*
- * @param geomapCodes
+ * Must contain same amount of numbers as countries in GeomapCountries.
+ *
+ * @param geomapCodes ["PNG","KHM","KAZ","PRY","SYR","SLB","MLI","Etc.."]
*/
public void setGeomapCodes(String geomapCodes) {
this.geomapCodes = geomapCodes;
}
/**
+ * Used to get the html for players table.
*
- * @return
+ * @return Html string.
+ * @see SortablePlayersTableCreator
*/
public String getSortablePlayersTable() {
return sortablePlayersTable;
}
/**
+ * Used to set the html for players table.
*
- * @param sortablePlayersTable
+ * @param sortablePlayersTable Html string.
+ * @see SortablePlayersTableCreator
*/
public void setSortablePlayersTable(String sortablePlayersTable) {
this.sortablePlayersTable = sortablePlayersTable;
}
/**
- * @return The Amount of players who have joined only once
+ * Used to get the amount of players who have joined only once
+ *
+ * @return Number from 0 to Integer.MAX
*/
public int getJoinleaver() {
return joinleaver;
}
/**
- * @param joinleaver The Amount of players who have joined only once
+ * Used to set the amount of players who have joined only once.
+ *
+ * No check for correct value.
+ *
+ * @param joinleaver Number from 0 to Integer.MAX
*/
public void setJoinleaver(int joinleaver) {
this.joinleaver = joinleaver;
}
/**
- * @return HTML String of the Top50CommandsList
+ * Used to get the html for the commands table.
+ *
+ * @return Html string.
+ * @see SortableCommandUseTableCreator
*/
public String getCommandUseListHtml() {
return commandUseTableHtml;
}
/**
- * @param top50CommandsListHtml HTML String of the Top50CommandsList
+ * Used to get the html for the commands table.
+ *
+ * @param commandsTableHtml Html string.
+ * @see SortableCommandUseTableCreator
*/
- public void setCommandUseTableHtml(String top50CommandsListHtml) {
- this.commandUseTableHtml = top50CommandsListHtml;
+ public void setCommandUseTableHtml(String commandsTableHtml) {
+ this.commandUseTableHtml = commandsTableHtml;
}
/**
- * @return Amount of banned players
+ * Used to get the amount of banned players.
+ *
+ * @return 0 to Integer.MAX
*/
public int getBanned() {
return banned;
}
/**
- * @param banned Amount of banned players
+ * Used to set the amount of banned players.
+ *
+ * No check for correct value.
+ *
+ * @param banned 0 to Integer.MAX
*/
public void setBanned(int banned) {
this.banned = banned;
@@ -294,6 +346,7 @@ public class AnalysisData {
* Activity is determined by AnalysisUtils.isActive()
*
* @return Amount of active players
+ * @see AnalysisUtils
*/
public int getActive() {
return active;
@@ -305,166 +358,233 @@ public class AnalysisData {
* Activity is determined by AnalysisUtils.isActive()
*
* @param active Amount of active players
+ * @see AnalysisUtils
*/
public void setActive(int active) {
this.active = active;
}
/**
+ * Set the amount of inactive players.
+ *
+ * Activity is determined by AnalysisUtils.isActive()
+ *
* @return Amount of inactive players
+ * @see AnalysisUtils
*/
public int getInactive() {
return inactive;
}
/**
+ * Set the amount of inactive players.
+ *
+ * Activity is determined by AnalysisUtils.isActive()
+ *
* @param inactive Amount of inactive players
+ * @see AnalysisUtils
*/
public void setInactive(int inactive) {
this.inactive = inactive;
}
/**
- * @return Total Amount of players used to calculate activity
+ * Get the total amount of players used to calculate activity.
+ *
+ * @return 0 to Integer.MAX
*/
public int getTotal() {
return total;
}
/**
- * @param total Total Amount of players used to calculate activity
+ * Set the total amount of players used to calculate activity.
+ *
+ * No check for correct value.
+ *
+ * @param total 0 to Integer.MAX
*/
public void setTotal(int total) {
this.total = total;
}
/**
- * @return Percentage of Gamemode usage time as a whole
+ * Get percentage of Gamemode usage time as a whole.
+ *
+ * @return 0.0 to 1.0
*/
public double getGm0Perc() {
return gm0Perc;
}
/**
- * @param gm0Perc Percentage of Gamemode usage time as a whole
+ * Set percentage of Gamemode usage time as a whole.
+ *
+ * No check for correct value.
+ *
+ * @param gm0Perc 0.0 to 1.0
*/
public void setGm0Perc(double gm0Perc) {
this.gm0Perc = gm0Perc;
}
/**
- * @return Percentage of Gamemode usage time as a whole
+ * Get percentage of Gamemode usage time as a whole.
+ *
+ * @return 0.0 to 1.0
*/
public double getGm1Perc() {
return gm1Perc;
}
/**
- * @param gm1Perc Percentage of Gamemode usage time as a whole
+ * Set percentage of Gamemode usage time as a whole.
+ *
+ * No check for correct value.
+ *
+ * @param gm1Perc 0.0 to 1.0
*/
public void setGm1Perc(double gm1Perc) {
this.gm1Perc = gm1Perc;
}
/**
- * @return Percentage of Gamemode usage time as a whole
+ * Get percentage of Gamemode usage time as a whole.
+ *
+ * @return 0.0 to 1.0
*/
public double getGm2Perc() {
return gm2Perc;
}
/**
- * @param gm2Perc Percentage of Gamemode usage time as a whole
+ * Set percentage of Gamemode usage time as a whole.
+ *
+ * No check for correct value.
+ *
+ * @param gm2Perc 0.0 to 1.0
*/
public void setGm2Perc(double gm2Perc) {
this.gm2Perc = gm2Perc;
}
/**
- * @return Percentage of Gamemode usage time as a whole
+ * Get percentage of Gamemode usage time as a whole.
+ *
+ * @return 0.0 to 1.0
*/
public double getGm3Perc() {
return gm3Perc;
}
/**
- * @param gm3Perc Percentage of Gamemode usage time as a whole
+ * Set percentage of Gamemode usage time as a whole.
+ *
+ * No check for correct value.
+ *
+ * @param gm3Perc 0.0 to 1.0
*/
public void setGm3Perc(double gm3Perc) {
this.gm3Perc = gm3Perc;
}
/**
- * @return Total number of players according to bukkit's data.
+ * Get percentage of Gamemode usage time as a whole.
+ *
+ * @return 0.0 to 1.0
*/
public int getTotalPlayers() {
return totalPlayers;
}
/**
- * @param totalPlayers Total number of players according to bukkit's data.
+ * Get the Total number of players according to bukkit's data.
+ *
+ * @param totalPlayers 0 to Integer.MAX
*/
public void setTotalPlayers(int totalPlayers) {
this.totalPlayers = totalPlayers;
}
/**
- * @return How long has been played, long in ms.
+ * Get how long time has been played, long in ms.
+ *
+ * @return 0 to Long.MAX
*/
public long getTotalPlayTime() {
return totalPlayTime;
}
/**
- * @param totalPlayTime How long has been played, long in ms.
+ * Set how long time has been played, long in ms.
+ *
+ * No check for correct value.
+ *
+ * @param totalPlayTime 0 to Long.MAX
*/
public void setTotalPlayTime(long totalPlayTime) {
this.totalPlayTime = totalPlayTime;
}
/**
- * @return Last Analysis Refresh, long in ms.
+ * Retrieve the refresh Epoch millisecond this object's data was calculated.
+ *
+ * @return the refresh Epoch millisecond.
*/
public long getRefreshDate() {
return refreshDate;
}
/**
- * @return How long has been played on average, long in ms.
+ * Get How long players have played on average.
+ *
+ * @return long in ms.
*/
public long getAveragePlayTime() {
return averagePlayTime;
}
/**
- * @return Average age of the players whose age has been gathered.
+ * Get the average age of the players whose age has been gathered.
+ *
+ * -1 if none have been gathered.
+ *
+ * @return -1 or from 1.0 to 99.0
*/
public double getAverageAge() {
return averageAge;
}
/**
- * @return How many times players have joined.
+ * Get How many times players have joined in total.
+ *
+ * @return 0 to Long.MAX
*/
public long getTotalLoginTimes() {
return totalLoginTimes;
}
/**
- * @return How many operators are on the server.
+ * Get How many operators are on the server.
+ *
+ * @return 0 to Integer.MAX
*/
public int getOps() {
return ops;
}
/**
- * @param refreshDate Last Analysis Refresh, long in ms.
+ * Set the refresh Epoch millisecond this object's data was calculated.
+ *
+ * @param refreshDate Epoch millisecond.
*/
public void setRefreshDate(long refreshDate) {
this.refreshDate = refreshDate;
}
/**
+ * Set the average playtime of all players.
+ *
* @param averagePlayTime long in ms.
*/
public void setAveragePlayTime(long averagePlayTime) {
@@ -472,147 +592,167 @@ public class AnalysisData {
}
/**
- * @param averageAge Average age of the players whose age has been gathered.
+ * Set the average age of the players whose age has been gathered.
+ *
+ * No check for correct value.
+ *
+ * @param averageAge 1.0 to 99.0 or -1 if none have been gathered.
*/
public void setAverageAge(double averageAge) {
this.averageAge = averageAge;
}
/**
- * @param totalLoginTimes How many times playes have logged in
+ * Set How many times playes have logged in.
+ *
+ * @param totalLoginTimes 0 to Long.MAX
*/
public void setTotalLoginTimes(long totalLoginTimes) {
this.totalLoginTimes = totalLoginTimes;
}
/**
- * @param ops Amount of operators.
+ * Set the amount of operators.
+ *
+ * @param ops 0 to Integer.MAX
*/
public void setOps(int ops) {
this.ops = ops;
}
/**
+ * Get the html for Recent player buttons.
*
- * @return
- */
- public String getTop20ActivePlayers() {
- return top20ActivePlayers;
- }
-
- /**
- *
- * @param top20ActivePlayers
- */
- public void setTop20ActivePlayers(String top20ActivePlayers) {
- this.top20ActivePlayers = top20ActivePlayers;
- }
-
- /**
- *
- * @return
+ * @return html string.
+ * @see RecentPlayersButtonsCreator
*/
public String getRecentPlayers() {
return recentPlayers;
}
/**
+ * Set the html for Recent player buttons.
*
- * @param recentPlayers
+ * @param recentPlayers html string.
+ * @see RecentPlayersButtonsCreator
*/
public void setRecentPlayers(String recentPlayers) {
this.recentPlayers = recentPlayers;
}
/**
+ * Get the amount of registered players in last 30 days.
*
- * @return
+ * @return 0 to Integer.MAX
*/
public int getNewPlayersMonth() {
return newPlayersMonth;
}
/**
+ * Set the amount of registered players in last 30 days.
*
- * @param newPlayersMonth
+ * No check for correct value.
+ *
+ * @param newPlayersMonth 0 to Integer.MAX
*/
public void setNewPlayersMonth(int newPlayersMonth) {
this.newPlayersMonth = newPlayersMonth;
}
/**
+ * Get the amount of registered players in last 7 days.
*
- * @return
+ * @return 0 to Integer.MAX
*/
public int getNewPlayersWeek() {
return newPlayersWeek;
}
/**
+ * Set the amount of registered players in last 7 days.
*
- * @param newPlayersWeek
+ * No check for correct value.
+ *
+ * @param newPlayersWeek 0 to Integer.MAX
*/
public void setNewPlayersWeek(int newPlayersWeek) {
this.newPlayersWeek = newPlayersWeek;
}
/**
+ * Get the amount of registered players in last 24 hours.
*
- * @return
+ * @return 0 to Integer.MAX
*/
public int getNewPlayersDay() {
return newPlayersDay;
}
/**
+ * Set the amount of registered players in last 24 hours.
*
- * @param newPlayersDay
+ * No check for correct value.
+ *
+ * @param newPlayersDay 0 to Integer.MAX
*/
public void setNewPlayersDay(int newPlayersDay) {
this.newPlayersDay = newPlayersDay;
}
/**
+ * Get the amount of times players have killed each other.
*
- * @return
+ * @return 0 to Long.MAX
*/
public long getTotalPlayerKills() {
return totalkills;
}
/**
+ * Get the amount of mob kills the players have.
*
- * @return
+ * @return 0 to Long.MAX
*/
public long getTotalMobKills() {
return totalmobkills;
}
/**
+ * Get how many times the playes have died.
*
- * @return
+ * @return 0 to Long.MAX
*/
public long getTotalDeaths() {
return totaldeaths;
}
/**
+ * Set the amount of times players have killed each other.
*
- * @param totalkills
+ * No check for correct value.
+ *
+ * @param totalkills 0 to Long.MAX
*/
public void setTotalkills(long totalkills) {
this.totalkills = totalkills;
}
/**
+ * Set the amount of mob kills the players have.
*
- * @param totalmobkills
+ * No check for correct value.
+ *
+ * @param totalmobkills 0 to Long.MAX
*/
public void setTotalmobkills(long totalmobkills) {
this.totalmobkills = totalmobkills;
}
/**
+ * Set how many times the playes have died.
+ *
+ * No check for correct value.
*
* @param totaldeaths
*/
@@ -621,56 +761,83 @@ public class AnalysisData {
}
/**
+ * Used to store all arrays created in
+ * Analysis#createPlayerActivityGraphs().
*
- * @return
+ * 0, 2, 4 contain data. 1, 3, 5 contain labels.
+ *
+ * 0, 1 day; 2, 3 week; 4, 5 month
+ *
+ * @return String array containing multiple toString representations of
+ * number & label arrays.
+ * @see PlayersActivityGraphCreator
+ * @see Analysis
*/
public String[] getPlayersDataArray() {
return playersDataArray;
}
/**
+ * Used to store all arrays created in
+ * Analysis#createPlayerActivityGraphs().
*
- * @param playersDataArray
+ * 0, 2, 4 contain data. 1, 3, 5 contain labels.
+ *
+ * 0, 1 day; 2, 3 week; 4, 5 month
+ *
+ * @param playersDataArray String array containing multiple toString
+ * representations of number & label arrays.
+ * @see PlayersActivityGraphCreator
+ * @see Analysis
*/
public void setPlayersDataArray(String[] playersDataArray) {
this.playersDataArray = playersDataArray;
}
/**
+ * Set the total number of unique commands.
*
- * @param totalCommands
+ * No check for correct value.
+ *
+ * @param totalCommands 0 to Long.MAX
*/
public void setTotalCommands(long totalCommands) {
this.totalCommands = totalCommands;
}
/**
+ * Get the total number of unique commands.
*
- * @return
+ * @return 0 to Long.MAX
*/
public long getTotalCommands() {
return totalCommands;
}
/**
+ * Get the average length of every session on the server.
*
- * @return
+ * @return long in ms.
*/
public long getSessionAverage() {
return sessionAverage;
}
/**
+ * Set the average length of every session on the server.
*
- * @param sessionAverage
+ * @param sessionAverage 0 to Long.MAX
*/
public void setSessionAverage(long sessionAverage) {
this.sessionAverage = sessionAverage;
}
/**
+ * Get the integer array containing 3 numbers.
*
- * @return
+ * 0 Male, 1 Female, 2 Unknown.
+ *
+ * @return for example [0, 4, 5] when 0 male, 4 female and 5 unknown.
*/
public int[] getGenderData() {
return genderData;
@@ -678,7 +845,11 @@ public class AnalysisData {
/**
*
- * @param genderData
+ * Set the integer array containing 3 numbers.
+ *
+ * 0 Male, 1 Female, 2 Unknown.
+ *
+ * @param genderData for example [0, 4, 5]
*/
public void setGenderData(int[] genderData) {
this.genderData = genderData;
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/DemographicsData.java b/Plan/src/main/java/com/djrapitops/plan/data/DemographicsData.java
index a54ba9baf..a7256b9d8 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/DemographicsData.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/DemographicsData.java
@@ -2,10 +2,15 @@ package main.java.com.djrapitops.plan.data;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.api.Gender;
+import main.java.com.djrapitops.plan.data.handling.LoginHandling;
/**
+ * This class is used to store Demographics data inside the UserData.
+ *
+ * Originally these data points were created by Plade (Player Demographics).
*
* @author Rsl1122
+ * @since 2.0.0
*/
public class DemographicsData {
@@ -16,9 +21,10 @@ public class DemographicsData {
/**
* Creates demographics data object from existing data.
*
- * @param age
- * @param gender
- * @param geoLocation
+ * @param age Age, -1 if unknown
+ * @param gender Gender Enum.
+ * @param geoLocation Name of the geolocation. Phrase.DEM_UNKNOWN if not
+ * known.
*/
public DemographicsData(int age, Gender gender, String geoLocation) {
this.age = age;
@@ -30,17 +36,21 @@ public class DemographicsData {
* Creates new demographics data object with default parameters.
*/
public DemographicsData() {
- this(-1, Gender.UNKNOWN, Phrase.DEM_UNKNOWN+"");
+ this(-1, Gender.UNKNOWN, Phrase.DEM_UNKNOWN + "");
}
/**
- * @return Age of the player, -1 if not known
+ * Get the age of the player.
+ *
+ * @return 1 to 99, -1 if not known
*/
public int getAge() {
return age;
}
/**
+ * Get the gender of the player.
+ *
* @return Gender Enum of the Player. UNKNOWN if not known
*/
public Gender getGender() {
@@ -48,28 +58,40 @@ public class DemographicsData {
}
/**
- * @return Geolocation string of the player "Not known" if not known.
+ * Get the geolocation string.
+ *
+ * @return Geolocation string of the player Phrase.DEM_UNKNOWN if not known.
*/
public String getGeoLocation() {
return geoLocation;
}
/**
- * @param age
+ * Set the age of the player.
+ *
+ * @param age 0 to 99, -1 if not known.
*/
public void setAge(int age) {
this.age = age;
}
/**
- * @param gender
+ * Set the gender of the player.
+ *
+ * @param gender Gender Enum. UNKNOWN if not known.
*/
public void setGender(Gender gender) {
this.gender = gender;
}
/**
- * @param geoLocation
+ * Set the Geolocation of the player.
+ *
+ * LoginHandling.updateGeolocation() is used to get the geolocation
+ * information.
+ *
+ * @param geoLocation Country name, eg. Republic of Kongo, the
+ * @see LoginHandling
*/
public void setGeoLocation(String geoLocation) {
this.geoLocation = geoLocation;
@@ -79,6 +101,4 @@ public class DemographicsData {
public String toString() {
return "{" + "age:" + age + "|gender:" + gender + "|geoLocation:" + geoLocation + '}';
}
-
-
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/KillData.java b/Plan/src/main/java/com/djrapitops/plan/data/KillData.java
index a296a9a77..f9aa6a4f8 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/KillData.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/KillData.java
@@ -3,6 +3,8 @@ package main.java.com.djrapitops.plan.data;
import java.util.UUID;
/**
+ * This class is used to store data about a player kill inside the UserData
+ * object.
*
* @author Rsl1122
*/
@@ -14,11 +16,12 @@ public class KillData {
private final String weapon;
/**
+ * Creates a KillData object with given parameters.
*
- * @param victim
- * @param victimID
- * @param weapon
- * @param date
+ * @param victim UUID of the victim.
+ * @param victimID ID of the victim, get from the database.
+ * @param weapon Weapon used.
+ * @param date Epoch millisecond at which the kill occurrred.
*/
public KillData(UUID victim, int victimID, String weapon, long date) {
this.victim = victim;
@@ -28,32 +31,36 @@ public class KillData {
}
/**
+ * Get the victim's UUID
*
- * @return
+ * @return UUID of the victim.
*/
public UUID getVictim() {
return victim;
}
/**
+ * Get the Epoch millisecond the kill occurred.
*
- * @return
+ * @return long in ms.
*/
public long getDate() {
return date;
}
/**
+ * Get the Weapon used as string.
*
- * @return
+ * @return For example DIAMOND_SWORD
*/
public String getWeapon() {
return weapon;
}
/**
+ * Get the UserID of the victim, found from the database.
*
- * @return
+ * @return For example: 6
*/
public int getVictimUserID() {
return victimUserID;
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/RawAnalysisData.java b/Plan/src/main/java/com/djrapitops/plan/data/RawAnalysisData.java
index 9a710a353..fb0902619 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/RawAnalysisData.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/RawAnalysisData.java
@@ -6,8 +6,11 @@ import java.util.List;
import java.util.Map;
/**
+ * This class is used for storing combined data of several UserData objects
+ * during Analysis.
*
* @author Rsl1122
+ * @since 2.6.0
*/
public class RawAnalysisData {
@@ -36,7 +39,7 @@ public class RawAnalysisData {
private int[] genders;
/**
- *
+ * Constructor for a new empty dataset.
*/
public RawAnalysisData() {
gmZero = 0;
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/SessionData.java b/Plan/src/main/java/com/djrapitops/plan/data/SessionData.java
index d4e8d57d1..c0d46d68d 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/SessionData.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/SessionData.java
@@ -1,6 +1,8 @@
package main.java.com.djrapitops.plan.data;
/**
+ * This class is used for storing start and end of a playsession inside UserData
+ * object.
*
* @author Rsl1122
*/
@@ -10,8 +12,9 @@ public class SessionData {
private long sessionEnd;
/**
+ * Creates a new session with given start and end of -1.
*
- * @param sessionStart
+ * @param sessionStart Epoch millisecond the session was started.
*/
public SessionData(long sessionStart) {
this.sessionStart = sessionStart;
@@ -19,9 +22,10 @@ public class SessionData {
}
/**
+ * Creates a new session with given start and end.
*
- * @param sessionStart
- * @param sessionEnd
+ * @param sessionStart Epoch millisecond the session was started.
+ * @param sessionEnd Epoch millisecond the session ended.
*/
public SessionData(long sessionStart, long sessionEnd) {
this.sessionStart = sessionStart;
@@ -29,45 +33,52 @@ public class SessionData {
}
/**
+ * Ends the session with given end point.
*
- * @param endOfSession
+ * (Changes the end to the parameter.).
+ *
+ * @param endOfSession Epoch millisecond the session ended.
*/
public void endSession(long endOfSession) {
sessionEnd = endOfSession;
}
/**
+ * Get the start of the session.
*
- * @return
+ * @return Epoch millisecond the session started.
*/
public long getSessionStart() {
return sessionStart;
}
/**
+ * Get the end of the session.
*
- * @return
+ * @return Epoch millisecond the session ended.
*/
public long getSessionEnd() {
return sessionEnd;
}
-
+
/**
+ * Get the length of the session in milliseconds.
*
- * @return
+ * @return Long in ms.
*/
public long getLength() {
- return sessionEnd-sessionStart;
+ return sessionEnd - sessionStart;
}
@Override
public String toString() {
return "s:" + sessionStart + " e:" + sessionEnd;
}
-
+
/**
+ * Check if the session start was before the end.
*
- * @return
+ * @return Is the length positive?
*/
public boolean isValid() {
return sessionStart <= sessionEnd;
@@ -93,6 +104,4 @@ public class SessionData {
}
return true;
}
-
-
}
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 3c63bc92b..1389786be 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/UserData.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/UserData.java
@@ -6,18 +6,19 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
+import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import main.java.com.djrapitops.plan.Log;
-import main.java.com.djrapitops.plan.Plan;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
-import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
/**
+ * This class is used for storing information about a player during runtime.
*
* @author Rsl1122
*/
@@ -29,8 +30,8 @@ public class UserData {
private UUID uuid;
private Location location;
private List locations;
- private HashSet ips;
- private HashSet nicknames;
+ private Set ips;
+ private Set nicknames;
private String lastNick;
private long registered;
private long lastPlayed;
@@ -39,7 +40,7 @@ public class UserData {
private int timesKicked;
private long lastGmSwapTime;
private GameMode lastGamemode;
- private HashMap gmTimes;
+ private Map gmTimes;
private boolean isOp;
private boolean isBanned;
private DemographicsData demData;
@@ -55,15 +56,28 @@ public class UserData {
private List sessions;
/**
+ * Creates a new UserData object with given values & default values.
*
- * @param uuid
- * @param reg
- * @param loc
- * @param op
- * @param lastGM
- * @param demData
- * @param name
- * @param online
+ * Some variables are left uninitialized: isBanned, lastPlayed, playTime,
+ * loginTimes, timesKicked, lastGmSwapTime, mobKills, deaths &
+ * currentSession.
+ *
+ * These variables need to be set with setters.
+ *
+ * All Collections are left empty: locations, nicknames, ips, sessions,
+ * playerKills. Because nicknames is empty, lastNick is an empty string.
+ *
+ * gmTimes Hashmap will contain 4 '0L' values: SURVIVAL, CREATIVE,
+ * ADVENTURE, SPECTATOR
+ *
+ * @param uuid UUID of the player
+ * @param reg Epoch millisecond the player registered.
+ * @param loc Current Location in a world.
+ * @param op Is the player op? (true/false)
+ * @param lastGM last GameMode the player was seen in.
+ * @param demData Demographics data.
+ * @param name Name of the player.
+ * @param online Is the player online?
*/
public UserData(UUID uuid, long reg, Location loc, boolean op, GameMode lastGM, DemographicsData demData, String name, boolean online) {
accessing = 0;
@@ -93,32 +107,60 @@ public class UserData {
}
/**
+ * Creates a new UserData object with the variables inside a Player object.
*
- * @param player
- * @param demData
+ * Some variables are left uninitialized: lastPlayed, playTime, loginTimes,
+ * timesKicked, lastGmSwapTime, mobKills, deaths & currentSession.
+ *
+ * These variables need to be set with setters.
+ *
+ * All Collections are left empty: locations, nicknames, ips, sessions,
+ * playerKills. Because nicknames is empty, lastNick is an empty string.
+ *
+ * gmTimes Hashmap will contain 4 '0L' values: SURVIVAL, CREATIVE,
+ * ADVENTURE, SPECTATOR
+ *
+ * @param player Player object.
+ * @param demData Demographics data.
*/
public UserData(Player player, DemographicsData demData) {
this(player.getUniqueId(), player.getFirstPlayed(), player.getLocation(), player.isOp(), player.getGameMode(), demData, player.getName(), player.isOnline());
try {
isBanned = player.isBanned();
} catch (Exception e) {
- Log.errorMsg("Error getting ban date from Bukkit files. " + uuid.toString());
+ Log.error("Error getting ban date from Bukkit files. " + uuid.toString());
Log.toLog(this.getClass().getName(), e);
isBanned = false;
}
}
/**
+ * Creates a new UserData object with the variables inside a OfflinePlayer
+ * object.
*
- * @param player
- * @param demData
+ * Some variables are left uninitialized: location, lastPlayed, playTime,
+ * loginTimes, timesKicked, lastGmSwapTime, mobKills, deaths &
+ * currentSession.
+ *
+ * These variables need to be set with setters.
+ *
+ * All Collections are left empty: locations, nicknames, ips, sessions,
+ * playerKills. Because nicknames is empty, lastNick is an empty string.
+ *
+ * gmTimes Hashmap will contain 4 '0L' values: SURVIVAL, CREATIVE,
+ * ADVENTURE, SPECTATOR
+ *
+ * lastGM will be set as SURVIVAL
+ *
+ * @param player OfflinePlayer object.
+ * @param demData Demographics data.
*/
public UserData(OfflinePlayer player, DemographicsData demData) {
this(player.getUniqueId(), player.getFirstPlayed(), null, player.isOp(), GameMode.SURVIVAL, demData, player.getName(), player.isOnline());
try {
isBanned = player.isBanned();
} catch (Exception e) {
- Log.errorMsg("Error getting ban date from Bukkit files. " + uuid.toString());
+ Log.error("Error getting ban date from Bukkit files. " + uuid.toString());
Log.toLog(this.getClass().getName(), e);
isBanned = false;
}
@@ -171,18 +213,20 @@ public class UserData {
}
/**
+ * Adds an to the ips Set if it is not null or the set doesn't contain it.
*
- * @param ip
+ * @param ip InetAddress of the player.
*/
public void addIpAddress(InetAddress ip) {
- if (ip != null && !ips.contains(ip)) {
+ if (ip != null) {
ips.add(ip);
}
}
/**
+ * Adds multiple ips to the ips set if they're not null.
*
- * @param addIps
+ * @param addIps a Collection of InetAddresses the player has logged from.
*/
public void addIpAddresses(Collection addIps) {
ips.addAll(addIps.stream().filter(ip -> ip != null).collect(Collectors.toList()));
@@ -190,8 +234,11 @@ public class UserData {
}
/**
+ * Adds a location to the locations list.
*
- * @param loc
+ * null value filtered. loc will be set as the latest location.
+ *
+ * @param loc Location of the player.
*/
public void addLocation(Location loc) {
if (loc != null) {
@@ -201,8 +248,11 @@ public class UserData {
}
/**
+ * Adds multiple locations to the locations list.
*
- * @param addLocs
+ * null value filtered.
+ *
+ * @param addLocs Collection of Locations.
*/
public void addLocations(Collection addLocs) {
if (!addLocs.isEmpty()) {
@@ -213,35 +263,43 @@ public class UserData {
}
/**
+ * Adds a nickname to the nicknames Set.
*
- * @param nick
- * @return
+ * null or empty values filtered.
+ *
+ * lastNick will be set as the given parameter, if accepted.
+ *
+ * @param nick Displayname of the player.
+ * @return was lastNick updated?
*/
public boolean addNickname(String nick) {
- if (!nicknames.contains(nick)) {
- if (nick != null) {
- if (!nick.isEmpty()) {
- nicknames.add(nick);
- lastNick = nick;
- return true;
- }
+ if (nick != null && !nick.isEmpty()) {
+ boolean isNew = !nicknames.contains(nick);
+ nicknames.add(nick);
+ if (isNew) {
+ lastNick = nick;
}
+ return isNew;
}
return false;
}
/**
+ * Adds nicknames to the nicknames Set.
*
- * @param addNicks
+ * null or empty values filtered.
+ *
+ * @param addNicks Collection of nicknames.
*/
public void addNicknames(Collection addNicks) {
- nicknames.addAll(addNicks.stream().filter(nick -> nick != null).collect(Collectors.toList()));
+ nicknames.addAll(addNicks.stream().filter(nick -> nick != null && !nick.isEmpty()).collect(Collectors.toList()));
}
/**
+ * Set a specific GameMode's millisecond value.
*
- * @param gm
- * @param time
+ * @param gm GameMode.
+ * @param time Milliseconds spent in the gamemode.
*/
public void setGMTime(GameMode gm, long time) {
if (gmTimes == null) {
@@ -253,11 +311,12 @@ public class UserData {
}
/**
+ * Set every GameMode's millisecond value.
*
- * @param survivalTime
- * @param creativeTime
- * @param adventureTime
- * @param spectatorTime
+ * @param survivalTime ms spent in SURVIVAL
+ * @param creativeTime ms spent in CREATIVE
+ * @param adventureTime ms spent in ADVENTURE
+ * @param spectatorTime ms spent in SPECTATOR
*/
public void setAllGMTimes(long survivalTime, long creativeTime, long adventureTime, long spectatorTime) {
gmTimes.clear();
@@ -271,8 +330,11 @@ public class UserData {
}
/**
+ * Adds a new SessionData to the sessions list.
*
- * @param session
+ * null and invalid sessions filtered.
+ *
+ * @param session SessionData object
*/
public void addSession(SessionData session) {
if (session != null && session.isValid()) {
@@ -281,8 +343,11 @@ public class UserData {
}
/**
+ * Adds SessionData objects to the sessions list.
*
- * @param sessions
+ * null and invalid sessions filtered.
+ *
+ * @param sessions Collection of SessionData objects.
*/
public void addSessions(Collection sessions) {
Collection filteredSessions = sessions.stream()
@@ -290,143 +355,175 @@ public class UserData {
.filter(session -> session.isValid())
.collect(Collectors.toList());
if (sessions.size() != filteredSessions.size()) {
- Log.debug("Some sessions were filtered! "+getUuid()+": Org:"+sessions.size()+" Fil:"+filteredSessions.size());
+ Log.debug(getUuid() + ": Some sessions were filtered! Org:" + sessions.size() + " Fil:" + filteredSessions.size());
}
this.sessions.addAll(filteredSessions);
}
/**
+ * Sets the current session.
*
- * @param session
+ * Currently unused.
+ *
+ * @param session SessionData object, no restrictions.
*/
public void setCurrentSession(SessionData session) {
currentSession = session;
}
/**
+ * Gets the current session.
*
- * @return
+ * Currently unused.
+ *
+ * @return SessionData object with a recent start.
*/
public SessionData getCurrentSession() {
return currentSession;
}
/**
+ * Changes the value of isBanned.
*
- * @param isBanned
+ * @param isBanned Is the player banned?
*/
public void updateBanned(boolean isBanned) {
this.isBanned = isBanned;
}
/**
+ * Checks whether or not the UserData object is accessed by different save
+ * processes.
*
- * @return
+ * @return true if accessed.
*/
public boolean isAccessed() {
return accessing > 0;
}
/**
- *
+ * Accesses the UserData object to protect it from being cleared.
*/
public void access() {
accessing++;
}
/**
- *
+ * Stops accessing the object so that it can now be cleared.
*/
public void stopAccessing() {
accessing--;
}
- // Getters -------------------------------------------------------------
/**
+ * Used to get the UUID of the player.
*
- * @return
+ * @return UUID.
*/
public UUID getUuid() {
return uuid;
}
/**
+ * Used to get the latest location.
*
- * @return
+ * NOT INITIALIZED BY CONSTRUCTORS
+ *
+ * @return Location.
*/
public Location getLocation() {
return location;
}
/**
+ * Get the list of all locations inside the UserData object.
*
- * @return
+ * @return a list of Locations.
*/
public List getLocations() {
return locations;
}
/**
+ * Get the InetAddress Set.
*
- * @return
+ * @return a HashSet of ips.
*/
- public HashSet getIps() {
+ public Set getIps() {
return ips;
}
/**
+ * Get the nickname String Set
*
- * @return
+ * @return a HashSet of Strings.
*/
- public HashSet getNicknames() {
+ public Set getNicknames() {
return nicknames;
}
/**
+ * Get the Epoch millisecond the player registered.
*
- * @return
+ * @return long in ms.
*/
public long getRegistered() {
return registered;
}
/**
+ * Get the Epoch millisecond the player was last seen.
*
- * @return
+ * NOT INITIALIZED BY CONSTRUCTORS. Value is updated periodically by cache
+ * if the player is online.
+ *
+ * @return long in ms.
*/
public long getLastPlayed() {
return lastPlayed;
}
/**
+ * Get the playtime in milliseconds.
*
- * @return
+ * NOT INITIALIZED BY CONSTRUCTORS. Value is updated periodically by cache
+ * if the player is online.
+ *
+ * @return time in ms.
*/
public long getPlayTime() {
return playTime;
}
/**
+ * Get how many times the player has logged in.
*
- * @return
+ * NOT INITIALIZED BY CONSTRUCTORS.
+ *
+ * @return 0 to Integer.MAX
*/
public int getLoginTimes() {
return loginTimes;
}
/**
+ * Get how many times the player has been kicked.
*
- * @return
+ * NOT INITIALIZED BY CONSTRUCTORS.
+ *
+ * @return 0 to Integer.MAX
*/
public int getTimesKicked() {
return timesKicked;
}
/**
+ * Get the GMTimes Map.
*
- * @return
+ * @return a GameMode map with 4 keys: SURVIVAL, CREATIVE, ADVENTURE,
+ * SPECTATOR.
*/
- public HashMap getGmTimes() {
+ public Map getGmTimes() {
if (gmTimes == null) {
gmTimes = new HashMap<>();
}
@@ -434,265 +531,325 @@ public class UserData {
}
/**
+ * Get the last time a Gamemode time was updated.
*
- * @return
+ * @return Epoch millisecond of last GM Time update.
*/
public long getLastGmSwapTime() {
return lastGmSwapTime;
}
/**
+ * Get the last Gamemode that the user was seen in.
*
- * @return
+ * When player changes to SURVIVAL this is set to SURVIVAL.
+ *
+ * @return Gamemode.
*/
public GameMode getLastGamemode() {
return lastGamemode;
}
/**
+ * Is the user Operator?
*
- * @return
+ * @return opped?
*/
public boolean isOp() {
return isOp;
}
/**
+ * Is the user Banned?
*
- * @return
+ * @return banned?
*/
public boolean isBanned() {
return isBanned;
}
/**
+ * Get the DemographicsData of the user.
*
- * @return
+ * @return Demographics data.
*/
public DemographicsData getDemData() {
return demData;
}
/**
+ * Get the username of the player.
*
- * @return
+ * @return username.
*/
public String getName() {
return name;
}
- // Setters -------------------------------------------------------------
/**
+ * Set the UUID.
*
- * @param uuid
+ * @param uuid UUID
*/
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
/**
+ * Set the current location.
*
- * @param location
+ * Not in use.
+ *
+ * @param location a location in the world.
*/
public void setLocation(Location location) {
this.location = location;
}
/**
+ * Set the list of locations the user has been in.
*
- * @param locations
+ * Not in use.
+ *
+ * @param locations a list of Locations.
*/
public void setLocations(List locations) {
- this.locations = locations;
+ if (locations != null) {
+ this.locations = locations;
+ }
}
/**
+ * Set the ips set.
*
- * @param ips
+ * @param ips ips of the user.
*/
- public void setIps(HashSet ips) {
- this.ips = ips;
+ public void setIps(Set ips) {
+ if (ips != null) {
+ this.ips = ips;
+ }
}
/**
+ * Set the nicknames set.
*
- * @param nicknames
+ * @param nicknames nicknames of the user.
*/
- public void setNicknames(HashSet nicknames) {
- this.nicknames = nicknames;
+ public void setNicknames(Set nicknames) {
+ if (nicknames != null) {
+ this.nicknames = nicknames;
+ }
}
/**
+ * Set the time the user was registered.
*
- * @param registered
+ * @param registered Epoch millisecond of register time.
*/
public void setRegistered(long registered) {
this.registered = registered;
}
/**
+ * Set the time the user was last seen.
*
- * @param lastPlayed
+ * Affects playtime calculation, playtime should be updated before updating
+ * this value.
+ *
+ * @param lastPlayed Epoch millisecond of last seen moment.
*/
public void setLastPlayed(long lastPlayed) {
this.lastPlayed = lastPlayed;
}
/**
+ * Set the time the user has been playing.
*
- * @param playTime
+ * @param playTime Time in ms.
*/
public void setPlayTime(long playTime) {
this.playTime = playTime;
}
/**
+ * Set how many times the user has logged in.
*
- * @param loginTimes
+ * No check for input.
+ *
+ * @param loginTimes 0 to Int.MAX
*/
public void setLoginTimes(int loginTimes) {
this.loginTimes = loginTimes;
}
/**
+ * Set how many times the user has been kicked.
*
- * @param timesKicked
+ * No check for input.
+ *
+ * @param timesKicked 0 to Int.MAX
*/
public void setTimesKicked(int timesKicked) {
this.timesKicked = timesKicked;
}
/**
+ * Set the GM Times map containing playtime in each gamemode.
*
- * @param gmTimes
+ * @param gmTimes Map containing SURVIVAL, CREATIVE, ADVENTURE & SPECTATOR
+ * (After 1.8) keys.
*/
- public void setGmTimes(HashMap gmTimes) {
- this.gmTimes = gmTimes;
+ public void setGmTimes(Map gmTimes) {
+ if (gmTimes != null) {
+ this.gmTimes = gmTimes;
+ }
}
/**
+ * Set the last time a Gamemode time was updated.
*
- * @param lastGmSwapTime
+ * @param lastGmSwapTime Epoch millisecond a gm time was updated.
*/
public void setLastGmSwapTime(long lastGmSwapTime) {
this.lastGmSwapTime = lastGmSwapTime;
}
/**
+ * Set the last gamemode the user was seen in.
*
- * @param lastGamemode
+ * @param lastGamemode gamemode.
*/
public void setLastGamemode(GameMode lastGamemode) {
this.lastGamemode = lastGamemode;
}
/**
+ * Set whether or not player is op.
*
- * @param isOp
+ * @param isOp operator?
*/
public void setIsOp(boolean isOp) {
this.isOp = isOp;
}
/**
+ * Set the DemographicsData of the user.
*
- * @param demData
+ * @param demData demographics data.
*/
public void setDemData(DemographicsData demData) {
this.demData = demData;
}
/**
+ * Set the username of the user.
*
- * @param name
+ * @param name username.
*/
public void setName(String name) {
this.name = name;
}
/**
+ * Is the player online?
*
- * @return
+ * @return true if data is cached to datacache, false if not.
*/
public boolean isOnline() {
return isOnline;
}
/**
+ * Get how many mob kills the player has.
*
- * @return
+ * @return 0 to Int.MAX
*/
public int getMobKills() {
return mobKills;
}
/**
+ * Get how many mob kills the player has.
*
- * @param mobKills
+ * @param mobKills 0 to Int.MAX
*/
public void setMobKills(int mobKills) {
this.mobKills = mobKills;
}
/**
+ * Get the player kills list.
*
- * @return
+ * @return playerkills list.
*/
public List getPlayerKills() {
return playerKills;
}
/**
+ * Set the playerkills list.
*
- * @param playerKills
+ * @param playerKills list of players kills.
*/
public void setPlayerKills(List playerKills) {
- this.playerKills = playerKills;
+ if (playerKills != null) {
+ this.playerKills = playerKills;
+ }
}
/**
+ * Add a Killdata to player's kills list.
*
- * @param kill
+ * @param kill KillData representing a player kill.
*/
public void addPlayerKill(KillData kill) {
playerKills.add(kill);
}
/**
+ * Get how many times the player has died.
*
- * @return
+ * @return 0 to Int.MAX
*/
public int getDeaths() {
return deaths;
}
/**
+ * Set how many times the player has died.
*
- * @param deaths
+ * @param deaths 0 to Int.MAX
*/
public void setDeaths(int deaths) {
this.deaths = deaths;
}
/**
+ * Get the sessions of a player.
*
- * @return
+ * @return a list of SessionData.
*/
public List getSessions() {
return sessions;
}
/**
+ * Get the last nickname the user has set.
*
- * @return
+ * Set when using addNickname(String)
+ *
+ * @return last nickname used.
*/
public String getLastNick() {
return lastNick;
}
/**
+ * Set the last nickname the user has set.
*
- * @param lastNick
+ * Also set when using addNickname(String)
+ *
+ * @param lastNick last nickname used.
*/
public void setLastNick(String lastNick) {
this.lastNick = lastNick;
@@ -764,10 +921,22 @@ public class UserData {
return true;
}
+ /**
+ * Check wether or not the object should be cleared from cache after it has
+ * been saved.
+ *
+ * @return true/false
+ */
public boolean shouldClearAfterSave() {
return clearAfterSave;
}
+ /**
+ * Set wether or not the object should be cleared from cache after it has
+ * been saved.
+ *
+ * @param clearAfterSave true/false
+ */
public void setClearAfterSave(boolean clearAfterSave) {
this.clearAfterSave = clearAfterSave;
}
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 32074703e..5db92e811 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
@@ -24,12 +24,12 @@ import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.utilities.NewPlayerCreator;
import main.java.com.djrapitops.plan.utilities.comparators.HandlingInfoTimeComparator;
import org.bukkit.Bukkit;
-import static org.bukkit.Bukkit.getOfflinePlayer;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
+import static org.bukkit.Bukkit.getOfflinePlayer;
/**
*
@@ -76,7 +76,7 @@ public class DataCacheHandler extends LocationCache {
commandUse = new HashMap<>();
if (!getCommandUseFromDb()) {
- plugin.logError(Phrase.DB_FAILURE_DISABLE + "");
+ Log.error(Phrase.DB_FAILURE_DISABLE + "");
plugin.getServer().getPluginManager().disablePlugin(plugin);
return;
}
@@ -92,7 +92,7 @@ public class DataCacheHandler extends LocationCache {
commandUse = db.getCommandUse();
return true;
} catch (SQLException e) {
- plugin.toLog(this.getClass().getName(), e);
+ Log.toLog(this.getClass().getName(), e);
}
return false;
}
@@ -151,14 +151,14 @@ public class DataCacheHandler extends LocationCache {
* of DataCacheHandler
*/
public void getUserDataForProcessing(DBCallableProcessor processor, UUID uuid, boolean cache) {
+ Log.debug(uuid+": HANDLER getForProcess,"+" Cache:"+cache);
UserData uData = dataCache.get(uuid);
if (uData == null) {
if (cache) {
DBCallableProcessor cacher = new DBCallableProcessor() {
@Override
public void process(UserData data) {
- dataCache.put(uuid, data);
- Log.info(Phrase.CACHE_ADD.parse(uuid.toString()));
+ cache(data);
}
};
getTask.scheduleForGet(uuid, cacher, processor);
@@ -170,6 +170,11 @@ public class DataCacheHandler extends LocationCache {
}
}
+ public void cache(UserData data) {
+ dataCache.put(data.getUuid(), data);
+ Log.info(Phrase.CACHE_ADD.parse(data.getUuid().toString()));
+ }
+
/**
** Uses Database to retrieve the UserData of a matching player Caches the
* data to the HashMap
@@ -192,7 +197,7 @@ public class DataCacheHandler extends LocationCache {
try {
db.saveMultipleUserData(data);
} catch (SQLException ex) {
- plugin.toLog(this.getClass().getName(), ex);
+ Log.toLog(this.getClass().getName(), ex);
}
}
@@ -201,7 +206,7 @@ public class DataCacheHandler extends LocationCache {
* @param i
*/
public void addToPool(HandlingInfo i) {
- Log.debug("Adding to pool, type:" + i.getType().name() + " " + i.getUuid());
+ Log.debug(i.getUuid()+ ": Adding to pool, type:" + i.getType().name());
processTask.addToPool(i);
}
@@ -244,7 +249,7 @@ public class DataCacheHandler extends LocationCache {
db.saveCommandUse(commandUse);
db.close();
} catch (SQLException e) {
- plugin.toLog(this.getClass().getName(), e);
+ Log.toLog(this.getClass().getName(), e);
}
Log.debug("SaveCacheOnDisable_END");
}
@@ -273,7 +278,7 @@ public class DataCacheHandler extends LocationCache {
* @param uuid Player's UUID
*/
public void saveCachedData(UUID uuid) {
- Log.debug("SaveCachedData: " + uuid);
+ Log.debug(uuid+": SaveCachedData");
DBCallableProcessor saveProcessor = new DBCallableProcessor() {
@Override
public void process(UserData data) {
@@ -298,7 +303,7 @@ public class DataCacheHandler extends LocationCache {
try {
db.saveCommandUse(commandUse);
} catch (SQLException | NullPointerException e) {
- plugin.toLog(this.getClass().getName(), e);
+ Log.toLog(this.getClass().getName(), e);
}
}
@@ -330,9 +335,9 @@ public class DataCacheHandler extends LocationCache {
* @param uuid Player's UUID
*/
public void clearFromCache(UUID uuid) {
- Log.debug("Clear: " + uuid);
+ Log.debug(uuid+": Clear");
if (getOfflinePlayer(uuid).isOnline()) {
- Log.debug("Online, did not clear: " + uuid);
+ Log.debug(uuid+": Online, did not clear");
UserData data = dataCache.get(uuid);
if (data != null) {
data.setClearAfterSave(false);
@@ -392,6 +397,7 @@ public class DataCacheHandler extends LocationCache {
*/
public void newPlayer(UserData data) {
saveTask.scheduleNewPlayer(data);
+ cache(data);
}
/**
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java
index e824443f5..d16dd4575 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java
@@ -28,7 +28,7 @@ public class SessionCache {
*/
public void startSession(UUID uuid) {
long now = new Date().getTime();
- Log.debug("Starting a session: "+uuid+" "+now);
+ Log.debug(uuid+": Starting a session: "+now);
SessionData session = new SessionData(now);
activeSessions.put(uuid, session);
}
@@ -41,7 +41,7 @@ public class SessionCache {
SessionData currentSession = activeSessions.get(uuid);
if (currentSession != null) {
long now = new Date().getTime();
- Log.debug("Ending a session: "+uuid+" "+now);
+ Log.debug(uuid+": Ending a session: "+now);
currentSession.endSession(now);
}
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java
index 1f18125ef..bcfe7e28c 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java
@@ -9,8 +9,6 @@ import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
-import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
-import static org.bukkit.Bukkit.getOfflinePlayer;
/**
*
@@ -37,7 +35,7 @@ public class DataCacheClearQueue {
* @param uuid
*/
public void scheduleForClear(UUID uuid) {
- Log.debug("Scheduling for clear: " + uuid);
+ Log.debug(uuid+": Scheduling for clear");
q.add(uuid);
}
@@ -53,7 +51,7 @@ public class DataCacheClearQueue {
try {
q.addAll(uuids);
} catch (IllegalStateException e) {
- getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Clear Queue", Settings.PROCESS_CLEAR_LIMIT.getNumber() + ""));
+ Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Clear Queue", Settings.PROCESS_CLEAR_LIMIT.getNumber() + ""));
}
}
@@ -61,14 +59,18 @@ public class DataCacheClearQueue {
*
*/
public void stop() {
- s.stop();
+ if (s != null) {
+ s.stop();
+ }
+ s = null;
+ q.clear();
}
}
class ClearConsumer implements Runnable {
private final BlockingQueue queue;
- private final DataCacheHandler handler;
+ private DataCacheHandler handler;
private boolean run;
ClearConsumer(BlockingQueue q, DataCacheHandler handler) {
@@ -88,6 +90,9 @@ class ClearConsumer implements Runnable {
}
void consume(UUID uuid) {
+ if (handler == null) {
+ return;
+ }
try {
if (handler.isDataAccessed(uuid)) {
queue.add(uuid);
@@ -96,12 +101,15 @@ class ClearConsumer implements Runnable {
}
// if online remove from clear list
} catch (Exception ex) {
- getPlugin(Plan.class).toLog(this.getClass().getName(), ex);
+ Log.toLog(this.getClass().getName(), ex);
}
}
void stop() {
run = false;
+ if (handler != null) {
+ handler = null;
+ }
}
}
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 8c5af7ab0..c27d4bc04 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
@@ -14,7 +14,6 @@ import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor;
import main.java.com.djrapitops.plan.database.Database;
-import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
/**
*
@@ -41,7 +40,7 @@ public class DataCacheGetQueue {
* @param processors
*/
public void scheduleForGet(UUID uuid, DBCallableProcessor... processors) {
- Log.debug("Scheduling for get: "+uuid);
+ Log.debug(uuid + ": Scheduling for get");
try {
HashMap> map = new HashMap<>();
if (map.get(uuid) == null) {
@@ -50,7 +49,7 @@ public class DataCacheGetQueue {
map.get(uuid).addAll(Arrays.asList(processors));
q.add(map);
} catch (IllegalStateException e) {
- getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Get Queue", Settings.PROCESS_GET_LIMIT.getNumber()+""));
+ Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Get Queue", Settings.PROCESS_GET_LIMIT.getNumber() + ""));
}
}
@@ -58,14 +57,18 @@ public class DataCacheGetQueue {
*
*/
public void stop() {
- s.stop();
+ if (s != null) {
+ s.stop();
+ }
+ s = null;
+ q.clear();
}
}
class GetConsumer implements Runnable {
private final BlockingQueue>> queue;
- private final Database db;
+ private Database db;
private boolean run;
GetConsumer(BlockingQueue q, Database db) {
@@ -85,6 +88,9 @@ class GetConsumer implements Runnable {
}
void consume(HashMap> processors) {
+ if (db == null) {
+ return;
+ }
try {
for (UUID uuid : processors.keySet()) {
if (uuid == null) {
@@ -92,7 +98,7 @@ class GetConsumer implements Runnable {
}
List processorsList = processors.get(uuid);
if (processorsList != null) {
- Log.debug("Get: "+uuid+" For:"+ processorsList.size());
+ Log.debug(uuid+ ": Get, For:" + processorsList.size());
try {
db.giveUserDataToProcessors(uuid, processorsList);
} catch (SQLException e) {
@@ -107,6 +113,9 @@ class GetConsumer implements Runnable {
void stop() {
run = false;
+ if (db != null) {
+ db = null;
+ }
}
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueue.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueue.java
index f4cb2bb79..eb571d83e 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueue.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheProcessQueue.java
@@ -19,19 +19,17 @@ import main.java.com.djrapitops.plan.data.handling.info.HandlingInfo;
*/
public class DataCacheProcessQueue {
- private BlockingQueue q;
- private DataCacheHandler h;
- private ProcessSetup s;
+ private BlockingQueue queue;
+ private ProcessSetup setup;
/**
*
* @param handler
*/
public DataCacheProcessQueue(DataCacheHandler handler) {
- h = handler;
- q = new ArrayBlockingQueue(20000);
- s = new ProcessSetup();
- s.go(q, h);
+ queue = new ArrayBlockingQueue(20000);
+ setup = new ProcessSetup();
+ setup.go(queue, handler);
}
/**
@@ -40,7 +38,7 @@ public class DataCacheProcessQueue {
*/
public void addToPool(HandlingInfo info) {
try {
- q.add(info);
+ queue.add(info);
} catch (IllegalStateException e) {
// getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
}
@@ -52,7 +50,7 @@ public class DataCacheProcessQueue {
*/
public void addToPool(Collection info) {
try {
- q.addAll(info);
+ queue.addAll(info);
} catch (IllegalStateException e) {
// getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
}
@@ -64,7 +62,7 @@ public class DataCacheProcessQueue {
* @return
*/
public boolean containsUUID(UUID uuid) {
- return new ArrayList<>(q).stream().map(d -> d.getUuid()).collect(Collectors.toList()).contains(uuid);
+ return new ArrayList<>(queue).stream().map(d -> d.getUuid()).collect(Collectors.toList()).contains(uuid);
}
/**
@@ -72,14 +70,23 @@ public class DataCacheProcessQueue {
* @return
*/
public List stop() {
- return s.stop();
+ try {
+ if (setup != null) {
+ setup.stop();
+ return new ArrayList<>(queue);
+ }
+ return new ArrayList<>();
+ } finally {
+ setup = null;
+ queue.clear();
+ }
}
}
class ProcessConsumer implements Runnable {
private final BlockingQueue queue;
- private final DataCacheHandler handler;
+ private DataCacheHandler handler;
private boolean run;
ProcessConsumer(BlockingQueue q, DataCacheHandler h) {
@@ -99,21 +106,26 @@ class ProcessConsumer implements Runnable {
}
void consume(HandlingInfo info) {
- Log.debug("Processing type: " + info.getType().name() + " " + info.getUuid());
+ if (handler == null) {
+ return;
+ }
+ Log.debug(info.getUuid()+": Processing type: " + info.getType().name());
DBCallableProcessor p = new DBCallableProcessor() {
@Override
public void process(UserData data) {
if (!info.process(data)) {
- System.out.println("Attempted to process data for wrong uuid: W:" + data.getUuid() + " | R:" + info.getUuid() + " Type:" + info.getType().name());
+ Log.error("Attempted to process data for wrong uuid: W:" + data.getUuid() + " | R:" + info.getUuid() + " Type:" + info.getType().name());
}
}
};
handler.getUserDataForProcessing(p, info.getUuid());
}
- Collection stop() {
+ void stop() {
run = false;
- return queue;
+ if (handler != null) {
+ handler = null;
+ }
}
}
@@ -129,9 +141,8 @@ class ProcessSetup {
new Thread(two).start();
}
- List stop() {
- List i = new ArrayList<>(one.stop());
- i.addAll(two.stop());
- return i;
+ void stop() {
+ one.stop();
+ two.stop();
}
}
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 ceda1959c..bc503cccb 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
@@ -13,7 +13,6 @@ import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.database.Database;
-import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
/**
*
@@ -27,6 +26,7 @@ public class DataCacheSaveQueue {
/**
*
* @param plugin
+ * @param clear
*/
public DataCacheSaveQueue(Plan plugin, DataCacheClearQueue clear) {
q = new ArrayBlockingQueue(Settings.PROCESS_SAVE_LIMIT.getNumber());
@@ -39,11 +39,11 @@ public class DataCacheSaveQueue {
* @param data
*/
public void scheduleForSave(UserData data) {
- Log.debug("Scheduling for save: "+data.getUuid());
+ Log.debug(data.getUuid()+": Scheduling for save");
try {
q.add(data);
} catch (IllegalStateException e) {
- getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
+ Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
}
}
@@ -56,7 +56,7 @@ public class DataCacheSaveQueue {
try {
q.addAll(data);
} catch (IllegalStateException e) {
- getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
+ Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
}
}
@@ -65,11 +65,11 @@ public class DataCacheSaveQueue {
* @param data
*/
public void scheduleNewPlayer(UserData data) {
- Log.debug("Scheduling new Player: "+data.getUuid());
+ Log.debug(data.getUuid()+": Scheduling new Player");
try {
q.add(data);
} catch (IllegalStateException e) {
- getPlugin(Plan.class).logError(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
+ Log.error(Phrase.ERROR_TOO_SMALL_QUEUE.parse("Save Queue", Settings.PROCESS_SAVE_LIMIT.getNumber() + ""));
}
}
@@ -86,15 +86,19 @@ public class DataCacheSaveQueue {
*
*/
public void stop() {
- s.stop();
+ if (s != null) {
+ s.stop();
+ }
+ s = null;
+ q.clear();
}
}
class SaveConsumer implements Runnable {
private final BlockingQueue queue;
- private final Database db;
- private final DataCacheClearQueue clear;
+ private Database db;
+ private DataCacheClearQueue clear;
private boolean run;
SaveConsumer(BlockingQueue q, DataCacheClearQueue clear, Database db) {
@@ -115,14 +119,19 @@ class SaveConsumer implements Runnable {
}
void consume(UserData data) {
+ if (db == null) {
+ return;
+ }
UUID uuid = data.getUuid();
- Log.debug("Saving: "+uuid);
+ Log.debug(uuid+": Saving: "+uuid);
try {
db.saveUserData(uuid, data);
data.stopAccessing();
- Log.debug("Saved! "+uuid);
+ Log.debug(uuid+": Saved!");
if (data.shouldClearAfterSave()) {
- clear.scheduleForClear(uuid);
+ if (clear != null) {
+ clear.scheduleForClear(uuid);
+ }
}
} catch (SQLException ex) {
// queue.add(data);
@@ -132,6 +141,12 @@ class SaveConsumer implements Runnable {
void stop() {
run = false;
+ if (db != null) {
+ db = null;
+ }
+ if (clear != null) {
+ clear = null;
+ }
}
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/GamemodeHandling.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/GamemodeHandling.java
index 6e57670e5..95216a825 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/handling/GamemodeHandling.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/GamemodeHandling.java
@@ -5,7 +5,7 @@
*/
package main.java.com.djrapitops.plan.data.handling;
-import java.util.HashMap;
+import java.util.Map;
import main.java.com.djrapitops.plan.data.UserData;
import org.bukkit.GameMode;
@@ -31,7 +31,7 @@ public class GamemodeHandling {
data.setLastGamemode(newGM);
}
lastGamemode = data.getLastGamemode();
- HashMap times = data.getGmTimes();
+ Map times = data.getGmTimes();
Long currentGMTime = times.get(lastGamemode);
if (currentGMTime == null) {
currentGMTime = 0L;
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/LoginHandling.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/LoginHandling.java
index 1f4cd11c9..bf5bb51ec 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/handling/LoginHandling.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/LoginHandling.java
@@ -1,8 +1,3 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
package main.java.com.djrapitops.plan.data.handling;
import java.io.BufferedReader;
diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java
index 5c9fb0eb1..58f0a01ab 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java
@@ -55,7 +55,7 @@ public class PlanPlayerListener implements Listener {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
handler.startSession(uuid);
- Log.debug("PlayerJoinEvent: "+uuid);
+ Log.debug(uuid+": PlayerJoinEvent");
BukkitTask asyncNewPlayerCheckTask = (new BukkitRunnable() {
@Override
public void run() {
@@ -68,11 +68,11 @@ public class PlanPlayerListener implements Listener {
} else {
handler.addToPool(loginInfo);
}
- Log.debug("PlayerJoinEvent_AsyncTask_END: "+uuid+" New:"+isNewPlayer);
+ Log.debug(uuid+": PlayerJoinEvent_AsyncTask_END, New:"+isNewPlayer);
this.cancel();
}
}).runTaskAsynchronously(plugin);
- Log.debug("PlayerJoinEvent_END: "+uuid);
+ Log.debug(uuid+": PlayerJoinEvent_END");
}
/**
@@ -88,10 +88,10 @@ public class PlanPlayerListener implements Listener {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
handler.endSession(uuid);
- Log.debug("PlayerQuitEvent: "+uuid);
+ Log.debug(uuid+": PlayerQuitEvent");
handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid)));
handler.saveCachedData(uuid);
- Log.debug("PlayerQuitEvent_END: "+uuid);
+ Log.debug(uuid+": PlayerQuitEvent_END");
}
/**
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 4381aa27e..9dce9ca17 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
@@ -7,6 +7,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
import main.java.com.djrapitops.plan.Log;
@@ -21,7 +22,6 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.scheduler.BukkitRunnable;
import static org.bukkit.Bukkit.getOfflinePlayer;
-import static org.bukkit.Bukkit.getOfflinePlayer;
/**
*
@@ -395,7 +395,7 @@ public abstract class SQLDB extends Database {
}
}
if (!exceptions.isEmpty()) {
- Log.errorMsg("SEVERE: MULTIPLE ERRORS OCCURRED: " + exceptions.size());
+ Log.error("SEVERE: MULTIPLE ERRORS OCCURRED: " + exceptions.size());
Log.toLog(this.getClass().getName(), exceptions);
}
}
@@ -444,7 +444,7 @@ public abstract class SQLDB extends Database {
* @throws SQLException
*/
@Deprecated
- public void saveNickList(int userId, HashSet names, String lastNick) throws SQLException {
+ public void saveNickList(int userId, Set names, String lastNick) throws SQLException {
nicknamesTable.saveNickList(userId, names, lastNick);
}
@@ -478,7 +478,7 @@ public abstract class SQLDB extends Database {
* @throws SQLException
*/
@Deprecated
- public void saveIPList(int userId, HashSet ips) throws SQLException {
+ public void saveIPList(int userId, Set ips) throws SQLException {
ipsTable.saveIPList(userId, ips);
}
@@ -489,7 +489,7 @@ public abstract class SQLDB extends Database {
* @throws SQLException
*/
@Deprecated
- public void saveGMTimes(int userId, HashMap gamemodeTimes) throws SQLException {
+ public void saveGMTimes(int userId, Map gamemodeTimes) throws SQLException {
gmTimesTable.saveGMTimes(userId, gamemodeTimes);
}
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 61bac9bd5..70b73218e 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
@@ -4,8 +4,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import java.util.Map;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.database.databases.SQLDB;
import org.bukkit.GameMode;
@@ -90,7 +89,7 @@ public class GMTimesTable extends Table {
}
}
- public void saveGMTimes(int userId, HashMap gamemodeTimes) throws SQLException {
+ public void saveGMTimes(int userId, Map gamemodeTimes) throws SQLException {
if (gamemodeTimes == null || gamemodeTimes.isEmpty()) {
return;
}
@@ -127,7 +126,7 @@ public class GMTimesTable extends Table {
}
}
- private void addNewGMTimesRow(int userId, HashMap gamemodeTimes) throws SQLException {
+ private void addNewGMTimesRow(int userId, Map gamemodeTimes) throws SQLException {
PreparedStatement statement = null;
GameMode[] gms = new GameMode[]{GameMode.SURVIVAL, GameMode.CREATIVE, GameMode.ADVENTURE, GameMode.SPECTATOR};
try {
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 7dde1f2c8..4565a1f7d 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
@@ -6,8 +6,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.database.databases.SQLDB;
@@ -79,7 +79,7 @@ public class IPsTable extends Table {
}
}
- public void saveIPList(int userId, HashSet ips) throws SQLException {
+ public void saveIPList(int userId, Set ips) throws SQLException {
if (ips == null) {
return;
}
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 92ba1e176..9a6f43d22 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
@@ -4,8 +4,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.database.databases.SQLDB;
@@ -106,7 +106,7 @@ public class NicknamesTable extends Table {
}
}
- public void saveNickList(int userId, HashSet names, String lastNick) throws SQLException {
+ public void saveNickList(int userId, Set names, String lastNick) throws SQLException {
if (names == null || names.isEmpty()) {
return;
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/Html.java b/Plan/src/main/java/com/djrapitops/plan/ui/Html.java
index 8e2f666fa..6f152ccec 100644
--- a/Plan/src/main/java/com/djrapitops/plan/ui/Html.java
+++ b/Plan/src/main/java/com/djrapitops/plan/ui/Html.java
@@ -14,379 +14,80 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
*/
public enum Html {
- /**
- *
- */
REPLACE0("REPLACE0"),
-
- /**
- *
- */
REPLACE1("REPLACE1"),
-
- /**
- *
- */
WARN_INACCURATE("Data might be inaccurate, player has just registered.
"),
-
- /**
- *
- */
COLOR_0(""),
-
- /**
- *
- */
COLOR_1(""),
-
- /**
- *
- */
COLOR_2(""),
-
- /**
- *
- */
COLOR_3(""),
-
- /**
- *
- */
COLOR_4(""),
-
- /**
- *
- */
COLOR_5(""),
-
- /**
- *
- */
COLOR_6(""),
-
- /**
- *
- */
COLOR_7(""),
-
- /**
- *
- */
COLOR_8(""),
-
- /**
- *
- */
COLOR_9(""),
-
- /**
- *
- */
COLOR_a(""),
-
- /**
- *
- */
COLOR_b(""),
-
- /**
- *
- */
COLOR_c(""),
-
- /**
- *
- */
COLOR_d(""),
-
- /**
- *
- */
COLOR_e(""),
-
- /**
- *
- */
COLOR_f(""),
-
- /**
- *
- */
SPAN("" + REPLACE0 + ""),
-
- /**
- *
- */
BUTTON("" + REPLACE1 + ""),
-
- /**
- *
- */
BUTTON_CLASS("class=\"button\""),
-
- /**
- *
- */
LINK("" + REPLACE1 + ""),
-
- /**
- *
- */
LINK_CLASS("class=\"link\""),
-
- /**
- *
- */
IMG(""),
-
- /**
- *
- */
TOP_TOWNS("Top 20 Towns
"),
-
- /**
- *
- */
TOP_FACTIONS("Top 20 Factions
"),
-
- /**
- *
- */
TOTAL_BALANCE("Server Total Balance: " + REPLACE0 + "
"),
-
- /**
- *
- */
TOTAL_VOTES("Players have voted total of " + REPLACE0 + " times.
"),
-
- /**
- *
- */
PLOT_OPTIONS("Plot options: " + REPLACE0 + "
"),
-
- /**
- *
- */
FRIENDS("Friends with " + REPLACE0 + "
"),
-
- /**
- *
- */
BALANCE("Balance: " + REPLACE0 + "
"),
-
- /**
- *
- */
BANNED("| " + SPAN.parse(COLOR_4.parse() + "Banned")),
-
- /**
- *
- */
OPERATOR(", Operator (Op)"),
-
- /**
- *
- */
ONLINE("| " + SPAN.parse(COLOR_2.parse() + "Online")),
-
- /**
- *
- */
OFFLINE("| " + SPAN.parse(COLOR_4.parse() + "Offline")),
-
- /**
- *
- */
ACTIVE("Player is Active"),
-
- /**
- *
- */
INACTIVE("Player is inactive"),
-
- /**
- *
- */
ERROR_LIST("Error Creating List
"),
-
- /**
- *
- */
HIDDEN("Hidden (config)"),
-
- /**
- *
- */
ERROR_NOT_SET("Error: Replace rule was not set"),
-
- /**
- *
- */
FACTION_NOT_FOUND("Faction not found"),
-
- /**
- *
- */
FACTION_NO_LEADER("No leader"),
-
- /**
- *
- */
FACTION_NO_FACTIONS("No Factions"),
-
- /**
- *
- */
WARPS("
Warps: " + REPLACE0),
-
- /**
- *
- */
ACHIEVEMENTS("
Achievements: " + REPLACE0 + "/" + REPLACE1),
-
- /**
- *
- */
JAILED("| Jailed"),
-
- /**
- *
- */
MUTED("| Muted"),
-
- /**
- *
- */
VOTES("
Has voted " + REPLACE0 + "times"),
-
- /**
- *
- */
FACTION("
Faction: " + REPLACE0 + " | Power: " + REPLACE1 + "/REPLACE2"),
-
- /**
- *
- */
TOWN("
Town: " + REPLACE0),
-
- /**
- *
- */
TOWN_NO_TOWNS("No Towns"),
-
- /**
- *
- */
GRAPH_BANNED("Banned"),
-
- /**
- *
- */
GRAPH_UNKNOWN("Unknown"),
-
- /**
- *
- */
GRAPH_INACTIVE("Inactive"),
-
- /**
- *
- */
GRAPH_ACTIVE("Active"),
-
- /**
- *
- */
GRAPH_ONLINE("Players Online"),
-
- /**
- *
- */
GRAPH_PLAYERS("Players"),
-
- /**
- *
- */
GRAPH_DATE("Date"),
-
- /**
- *
- */
TABLE_START_3("REPLACE0 | REPLACE1 | REPLACE2 |
"),
-
- /**
- *
- */
TABLE_START_4("REPLACE0 | REPLACE1 | REPLACE2 | REPLACE3 |
"),
-
- /**
- *
- */
TABLE_SESSIONS_START(TABLE_START_3.parse("Session Started", "Session Ended", "Session Length")),
-
- /**
- *
- */
TABLE_KILLS_START(TABLE_START_3.parse("Date", "Killed", "With")),
-
- /**
- *
- */
TABLE_FACTIONS_START(TABLE_START_4.parse("Faction", "Power", "Land", "Leader")),
-
- /**
- *
- */
TABLE_TOWNS_START(TABLE_START_4.parse("Town", "Residents", "Land", "Mayor")),
-
- /**
- *
- */
TABLELINE_2("" + REPLACE0 + " | " + REPLACE1 + " |
"),
-
- /**
- *
- */
TABLELINE_3("" + REPLACE0 + " | " + REPLACE1 + " | REPLACE2 |
"),
-
- /**
- *
- */
TABLELINE_4("" + REPLACE0 + " | " + REPLACE1 + " | REPLACE2 | REPLACE3 |
"),
-
- /**
- *
- */
TABLELINE_PLAYERS("REPLACE0 | REPLACE1 | REPLACE3 | REPLACE4 | REPLACE6 | " + "REPLACE8 | REPLACE9 |
"),
-
- /**
- *
- */
TABLELINE_3_CUSTOMKEY("REPLACE1 | REPLACE3 | REPLACE5 |
"),
-
- /**
- *
- */
TABLELINE_3_CUSTOMKEY_1("REPLACE1 | REPLACE2 | REPLACE3 |
"),
-
- /**
- *
- */
ERROR_TABLE_2(TABLELINE_2.parse("No data", "No data")),
-
- /**
- *
- */
TABLE_END("
"),
-
- /**
- *
- */
SESSIONDATA_NONE("No Session Data available"),
-
- /**
- *
- */
KILLDATA_NONE("No Kills"),;
private String html;
diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java b/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java
index 4134b0e92..95342bd58 100644
--- a/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java
+++ b/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java
@@ -153,7 +153,7 @@ public class Analysis {
// Fill Dataset with userdata.
rawData.stream().forEach((uData) -> {
// try {
- HashMap gmTimes = uData.getGmTimes();
+ Map gmTimes = uData.getGmTimes();
if (gmTimes != null) {
Long survival = gmTimes.get(GameMode.SURVIVAL);
if (survival != null) {
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 b1c1d4b38..7d21ff725 100644
--- a/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java
+++ b/Plan/src/main/java/com/djrapitops/plan/utilities/NewPlayerCreator.java
@@ -52,7 +52,7 @@ public class NewPlayerCreator {
data.setLastGmSwapTime(zero);
data.setDeaths(0);
data.setMobKills(0);
- Log.debug("Created a new UserData object for "+player.getUniqueId());
+ Log.debug(player.getUniqueId()+": Created a new UserData object.");
return data;
}
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 e018f5669..d898e4995 100644
--- a/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java
+++ b/Plan/src/main/java/com/djrapitops/plan/utilities/PlaceholderUtils.java
@@ -4,6 +4,7 @@ import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
@@ -51,7 +52,7 @@ public class PlaceholderUtils {
replaceMap.put("%ops%", "" + data.getOps());
replaceMap.put("%refresh%", FormatUtils.formatTimeAmountSinceString("" + data.getRefreshDate(), new Date()));
replaceMap.put("%totallogins%", "" + data.getTotalLoginTimes());
- replaceMap.put("%top20mostactive%", data.getTop20ActivePlayers());
+ replaceMap.put("%top20mostactive%", Html.ERROR_NOT_SET.parse());
replaceMap.put("%recentlogins%", data.getRecentPlayers());
replaceMap.put("%deaths%", data.getTotalDeaths() + "");
replaceMap.put("%playerkills%", data.getTotalPlayerKills() + "");
@@ -133,7 +134,7 @@ public class PlaceholderUtils {
int age = data.getDemData().getAge();
replaceMap.put("%age%", (age != -1) ? "" + age : Phrase.DEM_UNKNOWN + "");
replaceMap.put("%gender%", "" + data.getDemData().getGender().name().toLowerCase());
- HashMap gmTimes = data.getGmTimes();
+ Map gmTimes = data.getGmTimes();
long gmThree;
try {
Long gm3 = gmTimes.get(GameMode.SPECTATOR);
diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java
index 225f2d6d3..7744b08e1 100644
--- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java
+++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java
@@ -11,6 +11,7 @@ import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.DemographicsData;
@@ -169,9 +170,9 @@ public class UserDataTest {
test.addNickname(null);
assertTrue("Didn't add 1", test.getNicknames().contains(one));
assertTrue("Didn't add 2", test.getNicknames().contains(two));
- assertTrue("1 is new", n);
- assertTrue("2 is new", n1);
- assertTrue("2 is not new", !n2);
+ assertTrue("1 is supposed to be new", n);
+ assertTrue("2 is supposed to be new", n1);
+ assertTrue("2 is not supposed to be new", !n2);
assertTrue("Added null", !test.getNicknames().contains(null));
assertTrue("Added multiples", test.getNicknames().size() == 2);
assertTrue("Last nickname was not one", test.getLastNick().equals(one));
@@ -243,7 +244,7 @@ public class UserDataTest {
gmTimes.put(null, 0L);
test.setGmTimes(gmTimes);
test.setAllGMTimes(1L, 2L, 3L, 4L);
- HashMap times = test.getGmTimes();
+ Map times = test.getGmTimes();
assertTrue("Cleared gmTimes", !times.containsKey(null));
assertTrue("Not equal 0", times.get(GameMode.SURVIVAL) == 1L);
assertTrue("Not equal 1", times.get(GameMode.CREATIVE) == 2L);
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 7f34406f8..ab332c210 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
@@ -152,7 +152,7 @@ public class DataCacheProcessQueueTest {
*
* @throws InterruptedException
*/
- @Ignore @Test
+ @Test
public void testContainsUUID() throws InterruptedException {
DataCacheProcessQueue q = new DataCacheProcessQueue(handler);
UUID uuid = MockUtils.getPlayerUUID();
@@ -164,7 +164,6 @@ public class DataCacheProcessQueueTest {
}
};
q.stop();
- Thread.sleep(2000);
q.addToPool(h);
assertTrue(q.containsUUID(uuid));
}
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 4f79e45f0..0328efa7d 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
@@ -58,15 +58,6 @@ public class DataCacheSaveQueueTest {
TestInit t = new TestInit();
assertTrue("Not set up", t.setUp());
plan = t.getPlanMock();
- PowerMock.mockStatic(JavaPlugin.class);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
- PowerMock.replay(JavaPlugin.class);
calledSaveUserData = false;
calledSaveUserData2 = false;
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
diff --git a/docs/Plan-javadoc.jar b/docs/Plan-javadoc.jar
deleted file mode 100644
index 0c64983e6..000000000
Binary files a/docs/Plan-javadoc.jar and /dev/null differ