diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index 800132876..6807a2ba1 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -2,21 +2,6 @@
-
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/Plan.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/plugin.yml
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/hooks/Hook.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/hooks/VaultHook.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/utils/DataFormatUtils.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/hooks/FactionsHook.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/commands/InspectCommand.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/config.yml
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/API.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/PlanCommand.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/hooks/PlaceholderAPIHook.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/utils/DataUtils.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/commands/AnalyzeCommand.java
- file:/C:/Users/Risto/Documents/NetBeansProjects/PlayerAnalyticsPlugin-0.0.1/src/com/djrapitops/plan/command/hooks/AdvancedAchievementsHook.java
-
+
diff --git a/src/com/djrapitops/plan/API.java b/src/com/djrapitops/plan/API.java
index c296c67af..6fae7a801 100644
--- a/src/com/djrapitops/plan/API.java
+++ b/src/com/djrapitops/plan/API.java
@@ -3,6 +3,7 @@ package com.djrapitops.plan;
import com.djrapitops.plan.command.hooks.Hook;
import com.djrapitops.plan.command.utils.DataFormatUtils;
import com.djrapitops.plan.command.utils.DataUtils;
+import java.util.Date;
import java.util.HashMap;
public class API {
@@ -57,6 +58,24 @@ public class API {
return DataFormatUtils.removeExtraDataPoints(DataUtils.getData(true, playerName));
}
+ // use (new Date) on after parameter for time since moment to now
+ public static String formatTimeSinceDate(Date before, Date after) {
+ return DataFormatUtils.formatTimeAmountSinceDate(before, after);
+ }
+
+ // use (new Date) on after parameter for time since moment to now
+ public static String formatTimeSinceString(String before, Date after) {
+ return DataFormatUtils.formatTimeAmountSinceString(before, after);
+ }
+
+ public static String formatTimeAmount(String timeInMs) {
+ return DataFormatUtils.formatTimeAmount(timeInMs);
+ }
+
+ public static String formatTimeStamp(String timeInMs) {
+ return DataFormatUtils.formatTimeStamp(timeInMs);
+ }
+
public void addExtraHook(String name, Hook hook) {
plugin.addExtraHook(name, hook);
}
diff --git a/src/com/djrapitops/plan/Plan.java b/src/com/djrapitops/plan/Plan.java
index a74d1194e..a9ff9f695 100644
--- a/src/com/djrapitops/plan/Plan.java
+++ b/src/com/djrapitops/plan/Plan.java
@@ -179,5 +179,6 @@ public class Plan extends JavaPlugin {
public void addExtraHook(String name, Hook hook) {
this.extraHooks.put(name, hook);
+ this.hooks.put(name, hook);
}
}
diff --git a/src/com/djrapitops/plan/PlanCommand.java b/src/com/djrapitops/plan/PlanCommand.java
index cd5342425..21b5222f9 100644
--- a/src/com/djrapitops/plan/PlanCommand.java
+++ b/src/com/djrapitops/plan/PlanCommand.java
@@ -26,9 +26,7 @@ public class PlanCommand implements CommandExecutor {
commands.add(new HelpCommand(plugin, this));
commands.add(new InspectCommand(plugin));
- if (plugin.getConfig().getBoolean("analysis")) {
- commands.add(new AnalyzeCommand(plugin));
- }
+ commands.add(new AnalyzeCommand(plugin));
commands.add(new ReloadCommand(plugin));
}
diff --git a/src/com/djrapitops/plan/command/commands/AnalyzeCommand.java b/src/com/djrapitops/plan/command/commands/AnalyzeCommand.java
index ae52a7659..4e0a3fb2a 100644
--- a/src/com/djrapitops/plan/command/commands/AnalyzeCommand.java
+++ b/src/com/djrapitops/plan/command/commands/AnalyzeCommand.java
@@ -5,13 +5,8 @@ import com.djrapitops.plan.command.CommandType;
import com.djrapitops.plan.command.SubCommand;
import com.djrapitops.plan.command.utils.DataFormatUtils;
import com.djrapitops.plan.command.utils.DataUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import org.bukkit.ChatColor;
@@ -28,11 +23,6 @@ public class AnalyzeCommand extends SubCommand {
public AnalyzeCommand(Plan plugin) {
super("analyze", "plan.analyze", "Analyze data of all players /plan analyze [-refresh]", CommandType.CONSOLE);
this.plugin = plugin;
-// this.plugin.log("Refreshing playerDataMap, this might take a while..");
-// this.playerData = DataUtils.getTotalData();
-// this.analyzedPlayerdata = analyze(this.playerData);
-// this.refreshDate = new Date();
-// this.plugin.log("PlayerDataMap refresh complete.");
}
@Override
@@ -42,33 +32,20 @@ public class AnalyzeCommand extends SubCommand {
for (String arg : args) {
if (arg.toLowerCase().equals("-refresh")) {
if (sender.hasPermission("plan.analyze.refresh")) {
- sender.sendMessage(textColor + "[" + operatorColor + "Plan" + textColor + "] "
- + "Refreshing playerData, this might take a while..");
- this.playerData = DataUtils.getTotalData();
- this.refreshDate = new Date();
- this.analyzedPlayerdata = analyze(this.playerData);
-
+ refreshAnalysisData(sender);
}
}
}
if (this.playerData == null || this.refreshDate == null || this.analyzedPlayerdata == null) {
- sender.sendMessage(textColor + "[" + operatorColor + "Plan" + textColor + "] "
- + "Refreshing playerData, this might take a while..");
- this.playerData = DataUtils.getTotalData();
- this.refreshDate = new Date();
- this.analyzedPlayerdata = analyze(this.playerData);
+ refreshAnalysisData(sender);
}
- List dataList = new ArrayList<>();
- sender.sendMessage(textColor + "-- [" + operatorColor + "PLAN - Analysis results, refreshed " + DataFormatUtils.formatTimeAmount(refreshDate, new Date()) + " ago:" + textColor + "] --");
- for (String key : this.analyzedPlayerdata.keySet()) {
- dataList.add(new String[]{key, this.analyzedPlayerdata.get(key)});
- }
- Collections.sort(dataList, new Comparator() {
- public int compare(String[] strings, String[] otherStrings) {
- return strings[0].compareTo(otherStrings[0]);
- }
- });
- sender.sendMessage("" + textColor + "Averages for "+this.playerData.size()+" player(s)");
+
+ //header
+ sender.sendMessage(textColor + "-- [" + operatorColor + "PLAN - Analysis results, refreshed " + DataFormatUtils.formatTimeAmountSinceDate(refreshDate, new Date()) + " ago:" + textColor + "] --");
+
+ List dataList = DataFormatUtils.turnDataHashMapToSortedListOfArrays(analyzedPlayerdata);
+
+ sender.sendMessage("" + textColor + "Averages for " + this.playerData.size() + " player(s)");
for (String[] dataString : dataList) {
sender.sendMessage("" + operatorColor + dataString[0].charAt(4) + dataString[0].toLowerCase().substring(5) + ": " + textColor + dataString[1]);
}
@@ -76,94 +53,18 @@ public class AnalyzeCommand extends SubCommand {
return true;
}
- private HashMap analyze(HashMap> playerData) {
- HashMap> playerDataLists = new HashMap<>();
- String[] ignore = {"ESS-BAN REASON", "ESS-OPPED", "ESS-MUTE TIME", "ESS-LOCATION", "ESS-HUNGER", "ESS-LOCATION WORLD",
- "ESS-NICKNAME", "ESS-UUID", "FAC-FACTION", "ONT-LAST LOGIN", "TOW-TOWN", "TOW-REGISTERED",
- "TOW-LAST LOGIN", "TOW-OWNER OF", "TOW-PLOT PERMS", "TOW-PLOT OPTIONS", "TOW-FRIENDS", "ESS-ONLINE SINCE",
- "ESS-OFFLINE SINCE"};
- List ignoreKeys = new ArrayList<>();
- ignoreKeys.addAll(Arrays.asList(ignore));
- for (UUID key : playerData.keySet()) {
- for (String dataKey : playerData.get(key).keySet()) {
- if (!ignoreKeys.contains(dataKey)) {
- if (playerDataLists.get(dataKey) == null) {
- playerDataLists.put(dataKey, new ArrayList<>());
- }
- playerDataLists.get(dataKey).add(playerData.get(key).get(dataKey));
- }
- }
- }
-
- String[] numbers = {"ESS-HEALTH", "ESS-XP LEVEL", "FAC-POWER", "FAC-POWER PER HOUR",
- "FAC-POWER PER DEATH", "SVO-VOTES", "ONT-TOTAL VOTES", "ONT-TOTAL REFERRED", "ECO-BALANCE"};
- List numberKeys = new ArrayList<>();
- numberKeys.addAll(Arrays.asList(numbers));
- String[] booleanValues = {"ESS-BANNED", "ESS-JAILED", "ESS-MUTED", "ESS-FLYING", "TOW-ONLINE"};
- List boolKeys = new ArrayList<>();
- boolKeys.addAll(Arrays.asList(booleanValues));
- String[] timeValues = {"ONT-TOTAL PLAY"};
- List timeKeys = new ArrayList<>();
- timeKeys.addAll(Arrays.asList(timeValues));
-
- HashMap analyzedData = new HashMap<>();
- int errors = 0;
- HashSet errorTypes = new HashSet<>();
-
- for (String dataKey : playerDataLists.keySet()) {
- if (numberKeys.contains(dataKey)) {
- double sum = 0;
-
- for (String dataPoint : playerDataLists.get(dataKey)) {
- try {
- if (dataKey.equals("FAC-POWER")) {
- sum += Double.parseDouble(dataPoint.split(" ")[0]);
- } else if (dataKey.equals("ECO-BALANCE")) {
- sum += Double.parseDouble(DataFormatUtils.removeLetters(dataPoint));
- } else {
- sum += Double.parseDouble(dataPoint);
- }
- } catch (Exception e) {
- errors++;
- errorTypes.add("" + e);
- }
- }
- analyzedData.put(dataKey, "" + (sum / this.playerData.size()));
-
- } else if (boolKeys.contains(dataKey)) {
- int amount = 0;
- for (String dataPoint : playerDataLists.get(dataKey)) {
- try {
- if (Boolean.parseBoolean(dataPoint)) {
- amount++;
- }
- } catch (Exception e) {
- errors++;
- errorTypes.add("" + e);
- }
- }
- analyzedData.put(dataKey, "" + ((amount / this.playerData.size())*100) + "%");
- } else if (timeKeys.contains(dataKey)) {
- Long time = Long.parseLong("0");
- for (String dataPoint : playerDataLists.get(dataKey)) {
- try {
- time += Long.parseLong(dataPoint);
- } catch (Exception e) {
- errors++;
- errorTypes.add("" + e);
- }
- }
- analyzedData.put(dataKey, "" + (time / this.playerData.size()));
- }
- }
- if (errors > 0) {
- String log = "ANALYZE\n" + errors + " error(s) occurred while analyzing total data.\nFollowing types:";
- for (String errorType : errorTypes) {
- log += "\n " + errorType;
- }
- plugin.logToFile(log);
- }
- return DataFormatUtils.formatAnalyzed(analyzedData);
+ private void refreshAnalysisData(CommandSender sender) {
+ ChatColor operatorColor = ChatColor.DARK_GREEN;
+ ChatColor textColor = ChatColor.GRAY;
+ sender.sendMessage(textColor + "[" + operatorColor + "Plan" + textColor + "] "
+ + "Refreshing playerData, this might take a while..");
+ this.playerData = DataUtils.getTotalData();
+ this.refreshDate = new Date();
+ this.analyzedPlayerdata = DataUtils.analyze(this.playerData);
}
+ @Deprecated
+ private HashMap analyze(HashMap> playerData) {
+ return DataUtils.analyze(playerData);
+ }
}
diff --git a/src/com/djrapitops/plan/command/commands/InspectCommand.java b/src/com/djrapitops/plan/command/commands/InspectCommand.java
index 69f59ba2a..d848ac1cf 100644
--- a/src/com/djrapitops/plan/command/commands/InspectCommand.java
+++ b/src/com/djrapitops/plan/command/commands/InspectCommand.java
@@ -32,10 +32,6 @@ public class InspectCommand extends SubCommand {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
String playerName = getPlayerDisplayname(args, sender);
-// if (args.length < 1 && !(sender instanceof Player)) {
-// sender.sendMessage(ChatColor.RED+"Console use of inspect requires arguments.");
-// return false;
-// }
if (this.plugin.getHooks().isEmpty()) {
this.plugin.logError("noHookedPluginsError on InspectCommand");
@@ -55,9 +51,9 @@ public class InspectCommand extends SubCommand {
}
}
- HashMap data = getData(allData, playerName);
+ HashMap data = DataUtils.getData(allData, playerName);
if (format && !data.isEmpty()) {
- data = format(data);
+ data = DataFormatUtils.removeExtraDataPoints(data);
}
if (data.isEmpty()) {
data.put("ERR-NO RESULTS", "No results were found.");
@@ -66,19 +62,12 @@ public class InspectCommand extends SubCommand {
}
- List dataList = new ArrayList<>();
- for (String key : data.keySet()) {
- dataList.add(new String[]{key, data.get(key)});
- }
- Collections.sort(dataList, new Comparator() {
- public int compare(String[] strings, String[] otherStrings) {
- return strings[0].compareTo(otherStrings[0]);
- }
- });
+ List dataList = DataFormatUtils.turnDataHashMapToSortedListOfArrays(data);
ChatColor operatorColor = ChatColor.DARK_GREEN;
ChatColor textColor = ChatColor.GRAY;
+ //header
sender.sendMessage(textColor + "-- [" + operatorColor + "PLAN - Inspect results: " + playerName + textColor + "] --");
for (String[] dataString : dataList) {
@@ -88,10 +77,12 @@ public class InspectCommand extends SubCommand {
return true;
}
+ @Deprecated
public HashMap getData(boolean allData, String playerName) {
return DataUtils.getData(allData, playerName);
}
+ @Deprecated
public HashMap format(HashMap data) throws NumberFormatException {
return DataFormatUtils.removeExtraDataPoints(data);
}
diff --git a/src/com/djrapitops/plan/command/utils/DataFormatUtils.java b/src/com/djrapitops/plan/command/utils/DataFormatUtils.java
index 37ab24e1e..a241fa74c 100644
--- a/src/com/djrapitops/plan/command/utils/DataFormatUtils.java
+++ b/src/com/djrapitops/plan/command/utils/DataFormatUtils.java
@@ -4,6 +4,8 @@ package com.djrapitops.plan.command.utils;
import com.djrapitops.plan.Plan;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -85,7 +87,7 @@ public class DataFormatUtils {
if (key.equals("ONT-TOTAL PLAY")) {
formatted = formatTimeAmount(data.get(key));
} else {
- formatted = formatTimeAmount(data.get(key), new Date());
+ formatted = formatTimeAmountSinceString(data.get(key), new Date());
}
if (formatted != null) {
data.replace(key, formatted);
@@ -138,7 +140,7 @@ public class DataFormatUtils {
return returnValue;
}
- public static String formatTimeAmount(String string, Date date) throws NumberFormatException {
+ public static String formatTimeAmountSinceString(String string, Date date) throws NumberFormatException {
String returnValue = "";
long ms = (date.toInstant().getEpochSecond() * 1000) - Long.parseLong(string);
long x = ms / 1000;
@@ -163,7 +165,7 @@ public class DataFormatUtils {
}
return returnValue;
}
- public static String formatTimeAmount(Date before, Date now) throws NumberFormatException {
+ public static String formatTimeAmountSinceDate(Date before, Date now) throws NumberFormatException {
String returnValue = "";
long ms = (now.toInstant().getEpochSecond() * 1000) - (before.toInstant().getEpochSecond() * 1000);
long x = ms / 1000;
@@ -208,4 +210,17 @@ public class DataFormatUtils {
}
return returnString;
}
+
+ public static List turnDataHashMapToSortedListOfArrays(HashMap data) {
+ List dataList = new ArrayList<>();
+ for (String key : data.keySet()) {
+ dataList.add(new String[]{key, data.get(key)});
+ }
+ Collections.sort(dataList, new Comparator() {
+ public int compare(String[] strings, String[] otherStrings) {
+ return strings[0].compareTo(otherStrings[0]);
+ }
+ });
+ return dataList;
+ }
}
diff --git a/src/com/djrapitops/plan/command/utils/DataUtils.java b/src/com/djrapitops/plan/command/utils/DataUtils.java
index 5bd1d3cf5..4056993fa 100644
--- a/src/com/djrapitops/plan/command/utils/DataUtils.java
+++ b/src/com/djrapitops/plan/command/utils/DataUtils.java
@@ -2,7 +2,11 @@ package com.djrapitops.plan.command.utils;
import com.djrapitops.plan.Plan;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
import java.util.Scanner;
import java.util.UUID;
import org.bukkit.Bukkit;
@@ -66,4 +70,96 @@ public class DataUtils {
}
return null;
}
+
+ public static HashMap analyze(HashMap> playerData) {
+ Plan plugin = getPlugin(Plan.class);
+ HashMap> playerDataLists = new HashMap<>();
+ String[] ignore = {"ESS-BAN REASON", "ESS-OPPED", "ESS-MUTE TIME", "ESS-LOCATION", "ESS-HUNGER", "ESS-LOCATION WORLD",
+ "ESS-NICKNAME", "ESS-UUID", "FAC-FACTION", "ONT-LAST LOGIN", "TOW-TOWN", "TOW-REGISTERED",
+ "TOW-LAST LOGIN", "TOW-OWNER OF", "TOW-PLOT PERMS", "TOW-PLOT OPTIONS", "TOW-FRIENDS", "ESS-ONLINE SINCE",
+ "ESS-OFFLINE SINCE"};
+ List ignoreKeys = new ArrayList<>();
+ ignoreKeys.addAll(Arrays.asList(ignore));
+ for (UUID key : playerData.keySet()) {
+ for (String dataKey : playerData.get(key).keySet()) {
+ if (ignoreKeys.contains(dataKey)) {
+ continue;
+ }
+ if (playerDataLists.get(dataKey) == null) {
+ playerDataLists.put(dataKey, new ArrayList<>());
+ }
+ playerDataLists.get(dataKey).add(playerData.get(key).get(dataKey));
+ }
+ }
+
+ String[] numbers = {"ESS-HEALTH", "ESS-XP LEVEL", "FAC-POWER", "FAC-POWER PER HOUR",
+ "FAC-POWER PER DEATH", "SVO-VOTES", "ONT-TOTAL VOTES", "ONT-TOTAL REFERRED", "ECO-BALANCE"};
+ List numberKeys = new ArrayList<>();
+ numberKeys.addAll(Arrays.asList(numbers));
+ String[] booleanValues = {"ESS-BANNED", "ESS-JAILED", "ESS-MUTED", "ESS-FLYING", "TOW-ONLINE"};
+ List boolKeys = new ArrayList<>();
+ boolKeys.addAll(Arrays.asList(booleanValues));
+ String[] timeValues = {"ONT-TOTAL PLAY"};
+ List timeKeys = new ArrayList<>();
+ timeKeys.addAll(Arrays.asList(timeValues));
+
+ HashMap analyzedData = new HashMap<>();
+ int errors = 0;
+ HashSet errorTypes = new HashSet<>();
+
+ for (String dataKey : playerDataLists.keySet()) {
+ if (numberKeys.contains(dataKey)) {
+ double sum = 0;
+
+ for (String dataPoint : playerDataLists.get(dataKey)) {
+ try {
+ if (dataKey.equals("FAC-POWER") || dataKey.equals("AAC-ACHIEVEMENTS")) {
+ sum += Double.parseDouble(dataPoint.split(" ")[0]);
+ } else if (dataKey.equals("ECO-BALANCE")) {
+ sum += Double.parseDouble(DataFormatUtils.removeLetters(dataPoint));
+ } else {
+ sum += Double.parseDouble(dataPoint);
+ }
+ } catch (Exception e) {
+ errors++;
+ errorTypes.add("" + e);
+ }
+ }
+ analyzedData.put(dataKey, "" + (sum / playerData.size()));
+
+ } else if (boolKeys.contains(dataKey)) {
+ int amount = 0;
+ for (String dataPoint : playerDataLists.get(dataKey)) {
+ try {
+ if (Boolean.parseBoolean(dataPoint)) {
+ amount++;
+ }
+ } catch (Exception e) {
+ errors++;
+ errorTypes.add("" + e);
+ }
+ }
+ analyzedData.put(dataKey, "" + ((amount / playerData.size()) * 100) + "%");
+ } else if (timeKeys.contains(dataKey)) {
+ Long time = Long.parseLong("0");
+ for (String dataPoint : playerDataLists.get(dataKey)) {
+ try {
+ time += Long.parseLong(dataPoint);
+ } catch (Exception e) {
+ errors++;
+ errorTypes.add("" + e);
+ }
+ }
+ analyzedData.put(dataKey, "" + (time / playerData.size()));
+ }
+ }
+ if (errors > 0) {
+ String log = "ANALYZE\n" + errors + " error(s) occurred while analyzing total data.\nFollowing types:";
+ for (String errorType : errorTypes) {
+ log += "\n " + errorType;
+ }
+ plugin.logToFile(log);
+ }
+ return DataFormatUtils.formatAnalyzed(analyzedData);
+ }
}
diff --git a/src/config.yml b/src/config.yml
index 6c09d1022..aed3e27d6 100644
--- a/src/config.yml
+++ b/src/config.yml
@@ -1,5 +1,4 @@
debug: true
-analysis: true
visible:
ontime: true
diff --git a/src/plugin.yml b/src/plugin.yml
index 88ebaa148..32e0941c7 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -1,6 +1,6 @@
name: Plan
main: com.djrapitops.plan.Plan
-version: 1.4.0
+version: 1.4.2
commands:
plan: