mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-28 22:47:38 +02:00
Release 2.0.0
- Added isOnline to player inspect. - Added plan.ignore.commanduse permission Fixed Bugs: - Activity piechart now displayed correctly - Activity Graph now drawn correctly
This commit is contained in:
parent
e8acdc678a
commit
ec78b6a007
@ -1,11 +1,7 @@
|
|||||||
package com.djrapitops.planlite.command.utils;
|
package com.djrapitops.planlite.command.utils;
|
||||||
|
|
||||||
import com.djrapitops.planlite.PlanLite;
|
import com.djrapitops.planlite.PlanLite;
|
||||||
import java.io.File;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||||
|
|
||||||
@ -18,7 +14,7 @@ public class MiscUtils {
|
|||||||
String[] cVersion;
|
String[] cVersion;
|
||||||
String lineWithVersion;
|
String lineWithVersion;
|
||||||
try {
|
try {
|
||||||
URL githubUrl = new URL("https://raw.githubusercontent.com/Rsl1122/Plan-PlayerAnalytics/master/src/plugin.yml");
|
URL githubUrl = new URL("https://raw.githubusercontent.com/Rsl1122/Plan-PlayerAnalytics/master/Plan%20Lite/src/plugin.yml");
|
||||||
lineWithVersion = "";
|
lineWithVersion = "";
|
||||||
Scanner websiteScanner = new Scanner(githubUrl.openStream());
|
Scanner websiteScanner = new Scanner(githubUrl.openStream());
|
||||||
while (websiteScanner.hasNextLine()) {
|
while (websiteScanner.hasNextLine()) {
|
||||||
|
@ -13,10 +13,6 @@ import com.djrapitops.plan.data.listeners.*;
|
|||||||
import main.java.com.djrapitops.plan.ui.webserver.WebSocketServer;
|
import main.java.com.djrapitops.plan.ui.webserver.WebSocketServer;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
@ -37,8 +33,6 @@ public class Plan extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
logToFile("-- Server Start/Reload --");
|
|
||||||
|
|
||||||
getDataFolder().mkdirs();
|
getDataFolder().mkdirs();
|
||||||
|
|
||||||
databases = new HashSet<>();
|
databases = new HashSet<>();
|
||||||
@ -63,10 +57,7 @@ public class Plan extends JavaPlugin {
|
|||||||
|
|
||||||
getConfig().options().copyDefaults(true);
|
getConfig().options().copyDefaults(true);
|
||||||
|
|
||||||
getConfig().options().header("Plan Config\n"
|
getConfig().options().header("Plan Config | More info at https://www.spigotmc.org/wiki/plan-configuration/");
|
||||||
+ "debug - Errors are saved in errorlog.txt when they occur\n"
|
|
||||||
+ "visible - Plugin's data is accessable with /plan inspect command"
|
|
||||||
);
|
|
||||||
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
|
|
||||||
@ -133,28 +124,6 @@ public class Plan extends JavaPlugin {
|
|||||||
getLogger().severe(message);
|
getLogger().severe(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void logToFile(String message) {
|
|
||||||
if (getConfig().getBoolean("debug")) {
|
|
||||||
File folder = getDataFolder();
|
|
||||||
if (!folder.exists()) {
|
|
||||||
folder.mkdir();
|
|
||||||
}
|
|
||||||
File log = new File(getDataFolder(), "Debug.txt");
|
|
||||||
try {
|
|
||||||
if (!log.exists()) {
|
|
||||||
log.createNewFile();
|
|
||||||
}
|
|
||||||
FileWriter fw = new FileWriter(log, true);
|
|
||||||
try (PrintWriter pw = new PrintWriter(fw)) {
|
|
||||||
pw.println(message + "\n");
|
|
||||||
pw.flush();
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
logError("Failed to create Debug.txt file");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public API getAPI() {
|
public API getAPI() {
|
||||||
return api;
|
return api;
|
||||||
}
|
}
|
||||||
|
@ -48,10 +48,9 @@ public class AnalyzeCommand extends SubCommand {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||||
Date refresh = new Date();
|
|
||||||
if (!analysisCache.isCached()) {
|
if (!analysisCache.isCached()) {
|
||||||
analysisCache.updateCache();
|
analysisCache.updateCache();
|
||||||
} else if (new Date().getTime() - analysisCache.getData().getRefreshDate() > 60) {
|
} else if (new Date().getTime() - analysisCache.getData().getRefreshDate() > 60000) {
|
||||||
analysisCache.updateCache();
|
analysisCache.updateCache();
|
||||||
}
|
}
|
||||||
ChatColor oColor = Phrase.COLOR_MAIN.color();
|
ChatColor oColor = Phrase.COLOR_MAIN.color();
|
||||||
|
@ -101,8 +101,7 @@ public class InspectCommand extends SubCommand {
|
|||||||
if (inspectCache.getCache().containsKey(uuid)) {
|
if (inspectCache.getCache().containsKey(uuid)) {
|
||||||
// Header
|
// Header
|
||||||
sender.sendMessage(hColor + Phrase.ARROWS_RIGHT.toString() + oColor
|
sender.sendMessage(hColor + Phrase.ARROWS_RIGHT.toString() + oColor
|
||||||
+ " Player Analytics - Inspect results: " + oColor + playerName
|
+ " Player Analytics - Inspect results: " + oColor + playerName);
|
||||||
+ tColor + " | took " + oColor + FormatUtils.formatTimeAmountSinceDate(refreshDate, new Date()));
|
|
||||||
// Link
|
// Link
|
||||||
String url = "http://" + (useAlternativeIP ? alternativeIP : plugin.getServer().getIp() + ":" + port)
|
String url = "http://" + (useAlternativeIP ? alternativeIP : plugin.getServer().getIp() + ":" + port)
|
||||||
+ "/player/" + playerName;
|
+ "/player/" + playerName;
|
||||||
|
@ -41,6 +41,7 @@ public class UserData {
|
|||||||
private PlanLitePlayerData planLiteData;
|
private PlanLitePlayerData planLiteData;
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
private boolean isOnline;
|
||||||
|
|
||||||
public UserData(Player player, DemographicsData demData, Database db) {
|
public UserData(Player player, DemographicsData demData, Database db) {
|
||||||
uuid = player.getUniqueId();
|
uuid = player.getUniqueId();
|
||||||
@ -64,6 +65,7 @@ public class UserData {
|
|||||||
this.demData = demData;
|
this.demData = demData;
|
||||||
isBanned = player.isBanned();
|
isBanned = player.isBanned();
|
||||||
name = player.getName();
|
name = player.getName();
|
||||||
|
isOnline = player.isOnline();
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserData(OfflinePlayer player, DemographicsData demData, Database db) {
|
public UserData(OfflinePlayer player, DemographicsData demData, Database db) {
|
||||||
@ -86,6 +88,7 @@ public class UserData {
|
|||||||
this.demData = demData;
|
this.demData = demData;
|
||||||
isBanned = player.isBanned();
|
isBanned = player.isBanned();
|
||||||
name = player.getName();
|
name = player.getName();
|
||||||
|
isOnline = player.isOnline();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addIpAddress(InetAddress ip) {
|
public void addIpAddress(InetAddress ip) {
|
||||||
@ -307,4 +310,10 @@ public class UserData {
|
|||||||
public void setName(String name) {
|
public void setName(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isOnline() {
|
||||||
|
return isOnline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,9 @@ public class PlanCommandPreprocessListener implements Listener {
|
|||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (event.getPlayer().hasPermission("plan.ignore.commanduse")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
serverH.handleCommand(event.getMessage().split(" ")[0]);
|
serverH.handleCommand(event.getMessage().split(" ")[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -423,12 +423,13 @@ public abstract class SQLDB extends Database {
|
|||||||
while (set.next()) {
|
while (set.next()) {
|
||||||
int newPlayers = set.getInt(serverdataColumnNewPlayers);
|
int newPlayers = set.getInt(serverdataColumnNewPlayers);
|
||||||
int playersOnline = set.getInt(serverdataColumnPlayersOnline);
|
int playersOnline = set.getInt(serverdataColumnPlayersOnline);
|
||||||
rawServerData.put(set.getLong(serverdataColumnDate), new ServerData(commandUse, newPlayers, playersOnline));
|
rawServerData.put(new Date(set.getLong(serverdataColumnDate)).toInstant().getEpochSecond() * (long) 1000,
|
||||||
|
new ServerData(commandUse, newPlayers, playersOnline));
|
||||||
}
|
}
|
||||||
set.close();
|
set.close();
|
||||||
statement.close();
|
statement.close();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
plugin.logToFile("DATABASE-SQLDB-GetServerData\n" + e + "\n" + e.getCause());
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return rawServerData;
|
return rawServerData;
|
||||||
}
|
}
|
||||||
@ -454,7 +455,7 @@ public abstract class SQLDB extends Database {
|
|||||||
set.close();
|
set.close();
|
||||||
statement.close();
|
statement.close();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
plugin.logToFile("DATABASE-SQLDB-GetServerData\n" + e + "\n" + e.getCause());
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return new ServerData(commandUse, newPlayers);
|
return new ServerData(commandUse, newPlayers);
|
||||||
}
|
}
|
||||||
@ -463,7 +464,7 @@ public abstract class SQLDB extends Database {
|
|||||||
public void saveServerData(ServerData data) {
|
public void saveServerData(ServerData data) {
|
||||||
try {
|
try {
|
||||||
saveCommandUse(data.getCommandUsage());
|
saveCommandUse(data.getCommandUsage());
|
||||||
long now = new Date().getTime();
|
long now = new Date().toInstant().getEpochSecond() * (long) 1000;
|
||||||
PreparedStatement statement = connection.prepareStatement("INSERT INTO " + serverdataName + " ("
|
PreparedStatement statement = connection.prepareStatement("INSERT INTO " + serverdataName + " ("
|
||||||
+ serverdataColumnDate + ", "
|
+ serverdataColumnDate + ", "
|
||||||
+ serverdataColumnNewPlayers + ", "
|
+ serverdataColumnNewPlayers + ", "
|
||||||
@ -516,7 +517,7 @@ public abstract class SQLDB extends Database {
|
|||||||
set.close();
|
set.close();
|
||||||
statement.close();
|
statement.close();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
plugin.logToFile("DATABASE-SQLDB\n" + e + "\n" + e.getCause());
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return commandUse;
|
return commandUse;
|
||||||
}
|
}
|
||||||
@ -554,7 +555,7 @@ public abstract class SQLDB extends Database {
|
|||||||
statement.execute();
|
statement.execute();
|
||||||
statement.close();
|
statement.close();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
plugin.logToFile("DATABASE_SQLDB\n" + e + "\n" + e.getCause());
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -632,12 +633,7 @@ public abstract class SQLDB extends Database {
|
|||||||
saveGMTimes(userId, data.getGmTimes());
|
saveGMTimes(userId, data.getGmTimes());
|
||||||
|
|
||||||
} catch (SQLException | NullPointerException e) {
|
} catch (SQLException | NullPointerException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
plugin.logToFile("SQLDB-Save\n" + e
|
|
||||||
+ "\n" + data.getLastGamemode()
|
|
||||||
+ "\n" + Bukkit.getDefaultGameMode()
|
|
||||||
+ "\n" + wasSeenBefore(uuid)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
data.setAccessing(false);
|
data.setAccessing(false);
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,9 @@ public class ActivityPieChartCreator {
|
|||||||
|
|
||||||
int total = totalBanned + active + inactive;
|
int total = totalBanned + active + inactive;
|
||||||
|
|
||||||
int banPerc = (int) ((totalBanned / total) * 100);
|
int banPerc = (int) ((totalBanned * 1.0 / total) * 100);
|
||||||
int inacPerc = (int) ((inactive / total) * 100);
|
int inacPerc = (int) ((inactive * 1.0 / total) * 100);
|
||||||
int actPerc = (int) ((active / total) * 100);
|
int actPerc = (int) ((active * 1.0 / total) * 100);
|
||||||
while (banPerc + inacPerc + actPerc < 100) {
|
while (banPerc + inacPerc + actPerc < 100) {
|
||||||
actPerc++;
|
actPerc++;
|
||||||
}
|
}
|
||||||
@ -38,7 +38,7 @@ public class ActivityPieChartCreator {
|
|||||||
Slice s4 = Slice.newSlice((int) (actPerc), Color.newColor("228B22"), "Active", "Active");
|
Slice s4 = Slice.newSlice((int) (actPerc), Color.newColor("228B22"), "Active", "Active");
|
||||||
|
|
||||||
PieChart refChart = GCharts.newPieChart(s4, s3, s1);
|
PieChart refChart = GCharts.newPieChart(s4, s3, s1);
|
||||||
refChart.setSize(500, 150);
|
refChart.setSize(400, 150);
|
||||||
refChart.setThreeD(true);
|
refChart.setThreeD(true);
|
||||||
String refURL = refChart.toURLString();
|
String refURL = refChart.toURLString();
|
||||||
return refURL;
|
return refURL;
|
||||||
|
@ -59,7 +59,7 @@ public class GMTimesPieChartCreator {
|
|||||||
Slice s4 = Slice.newSlice(three, Color.newColor("228B22"), "Spectator", "Spectator");
|
Slice s4 = Slice.newSlice(three, Color.newColor("228B22"), "Spectator", "Spectator");
|
||||||
|
|
||||||
PieChart refChart = GCharts.newPieChart(s1, s2, s3, s4);
|
PieChart refChart = GCharts.newPieChart(s1, s2, s3, s4);
|
||||||
refChart.setSize(500, 150);
|
refChart.setSize(400, 150);
|
||||||
refChart.setThreeD(true);
|
refChart.setThreeD(true);
|
||||||
String refURL = refChart.toURLString();
|
String refURL = refChart.toURLString();
|
||||||
return refURL;
|
return refURL;
|
||||||
|
@ -34,22 +34,37 @@ public class PlayerActivityGraphCreator {
|
|||||||
Plan plugin = getPlugin(Plan.class);
|
Plan plugin = getPlugin(Plan.class);
|
||||||
|
|
||||||
int maxPlayers = plugin.getHandler().getMaxPlayers();
|
int maxPlayers = plugin.getHandler().getMaxPlayers();
|
||||||
long now = new Date().getTime();
|
long now = new Date().toInstant().getEpochSecond() * (long) 1000;
|
||||||
long nowMinusScale = now - scale;
|
long nowMinusScale = now - scale;
|
||||||
int i = 0;
|
|
||||||
for (long keyDate : rawServerData.keySet()) {
|
|
||||||
if (keyDate < nowMinusScale) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Double scaledDateValue = ((keyDate - nowMinusScale) * 1.0 / scale) * 100;
|
|
||||||
ServerData serverData = rawServerData.get(keyDate);
|
|
||||||
Double scaledPlayerValue = (serverData.getPlayersOnline() * 1.0 / maxPlayers) * 100;
|
|
||||||
Double scaledNewPValue = (serverData.getNewPlayers() * 1.0 / maxPlayers) * 100;
|
|
||||||
xListDate.add(scaledDateValue);
|
|
||||||
|
|
||||||
pYList.add(scaledPlayerValue);
|
int lastPValue = 0;
|
||||||
nYList.add(scaledNewPValue);
|
int lastNValue = 0;
|
||||||
|
int lastSavedPValue = -1;
|
||||||
|
int lastSavedNValue = -1;
|
||||||
|
long lastSaveI = 0;
|
||||||
|
for (long i = nowMinusScale; i <= now; i += 1000) {
|
||||||
|
if (rawServerData.containsKey(i)) {
|
||||||
|
ServerData serverData = rawServerData.get(i);
|
||||||
|
lastPValue = serverData.getPlayersOnline();
|
||||||
|
lastNValue = serverData.getNewPlayers();
|
||||||
|
}
|
||||||
|
Double scaledDateValue = ((i - nowMinusScale) * 1.0 / scale) * 100;
|
||||||
|
Double scaledPlayerValue = (lastPValue * 1.0 / maxPlayers) * 100;
|
||||||
|
Double scaledNewPValue = (lastNValue * 1.0 / maxPlayers) * 100;
|
||||||
|
|
||||||
|
if (lastSavedPValue != lastPValue || lastSavedNValue != lastNValue || i-lastSaveI > (scale / (long) 50)) {
|
||||||
|
lastSaveI = i;
|
||||||
|
xListDate.add(scaledDateValue);
|
||||||
|
pYList.add((lastSavedPValue * 1.0 / maxPlayers) * 100);
|
||||||
|
nYList.add((lastSavedNValue * 1.0 / maxPlayers) * 100);
|
||||||
|
lastSavedPValue = lastPValue;
|
||||||
|
lastSavedNValue = lastNValue;
|
||||||
|
xListDate.add(scaledDateValue);
|
||||||
|
pYList.add(scaledPlayerValue);
|
||||||
|
nYList.add(scaledNewPValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Date labels
|
// Date labels
|
||||||
for (long j = 0; j <= 8; j++) {
|
for (long j = 0; j <= 8; j++) {
|
||||||
long scaleAddition = j * (scale / 8);
|
long scaleAddition = j * (scale / 8);
|
||||||
|
@ -75,14 +75,14 @@ public class Analysis {
|
|||||||
rawServerData = plugin.getDB().getServerDataHashMap();
|
rawServerData = plugin.getDB().getServerDataHashMap();
|
||||||
plugin.log("Analysis | Data Fetched, beginning Analysis of data..");
|
plugin.log("Analysis | Data Fetched, beginning Analysis of data..");
|
||||||
AnalysisData data = new AnalysisData();
|
AnalysisData data = new AnalysisData();
|
||||||
long scale = 2592000 * Long.valueOf("1000");
|
long scaleMonth = (long) 2592000 * (long) 1000;
|
||||||
String playerActivityHtmlMonth = AnalysisUtils.createPlayerActivityGraph(rawServerData, scale);
|
String playerActivityHtmlMonth = AnalysisUtils.createPlayerActivityGraph(rawServerData, scaleMonth);
|
||||||
data.setPlayersChartImgHtmlMonth(playerActivityHtmlMonth);
|
data.setPlayersChartImgHtmlMonth(playerActivityHtmlMonth);
|
||||||
scale = 604800 * 1000;
|
long scaleWeek = 604800 * 1000;
|
||||||
String playerActivityHtmlWeek = AnalysisUtils.createPlayerActivityGraph(rawServerData, scale);
|
String playerActivityHtmlWeek = AnalysisUtils.createPlayerActivityGraph(rawServerData, scaleWeek);
|
||||||
data.setPlayersChartImgHtmlWeek(playerActivityHtmlWeek);
|
data.setPlayersChartImgHtmlWeek(playerActivityHtmlWeek);
|
||||||
scale = 86400 * 1000;
|
long scaleDay = 86400 * 1000;
|
||||||
String playerActivityHtmlDay = AnalysisUtils.createPlayerActivityGraph(rawServerData, scale);
|
String playerActivityHtmlDay = AnalysisUtils.createPlayerActivityGraph(rawServerData, scaleDay);
|
||||||
data.setPlayersChartImgHtmlDay(playerActivityHtmlDay);
|
data.setPlayersChartImgHtmlDay(playerActivityHtmlDay);
|
||||||
long gmZero = 0;
|
long gmZero = 0;
|
||||||
long gmOne = 0;
|
long gmOne = 0;
|
||||||
@ -175,7 +175,12 @@ public class Analysis {
|
|||||||
for (int age : ages) {
|
for (int age : ages) {
|
||||||
totalAge += age;
|
totalAge += age;
|
||||||
}
|
}
|
||||||
double averageAge = totalAge * 1.0 / ages.size();
|
double averageAge;
|
||||||
|
if (ages.size() != 0) {
|
||||||
|
averageAge = totalAge * 1.0 / ages.size();
|
||||||
|
} else {
|
||||||
|
averageAge = -1;
|
||||||
|
}
|
||||||
data.setAverageAge(averageAge);
|
data.setAverageAge(averageAge);
|
||||||
long gmTotal = gmZero + gmOne + gmTwo + gmThree;
|
long gmTotal = gmZero + gmOne + gmTwo + gmThree;
|
||||||
HashMap<GameMode, Long> totalGmTimes = new HashMap<>();
|
HashMap<GameMode, Long> totalGmTimes = new HashMap<>();
|
||||||
|
@ -67,8 +67,11 @@ public class AnalysisUtils {
|
|||||||
replaceMap.put("%playtime%", FormatUtils.formatTimeAmount("" + data.getPlayTime()));
|
replaceMap.put("%playtime%", FormatUtils.formatTimeAmount("" + data.getPlayTime()));
|
||||||
replaceMap.put("%banned%", data.isBanned() ? "Banned" : "Not Banned");
|
replaceMap.put("%banned%", data.isBanned() ? "Banned" : "Not Banned");
|
||||||
replaceMap.put("%op%", data.isOp() ? ", Operator (Op)" : "");
|
replaceMap.put("%op%", data.isOp() ? ", Operator (Op)" : "");
|
||||||
|
replaceMap.put("%isonline%", (data.isOnline()) ? "| Online":"| Offline");
|
||||||
PlanLiteHook hook = getPlugin(Plan.class).getPlanLiteHook();
|
PlanLiteHook hook = getPlugin(Plan.class).getPlanLiteHook();
|
||||||
replaceMap.put("%planlite%", hook.isEnabled() ? getPlanLitePlayerHtml(data.getPlanLiteData()) : "");
|
replaceMap.put("%planlite%", hook.isEnabled() ? getPlanLitePlayerHtml(data.getPlanLiteData()) : "");
|
||||||
|
replaceMap.put("%inaccuratedatawarning%", (new Date().getTime()-data.getRegistered() < 180000)
|
||||||
|
? "<h3>Data might be inaccurate, player has just registered.</h3>" : "");
|
||||||
return replaceMap;
|
return replaceMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,12 +96,12 @@ public class AnalysisUtils {
|
|||||||
replaceMap.put("%playerchartweek%", data.getPlayersChartImgHtmlWeek());
|
replaceMap.put("%playerchartweek%", data.getPlayersChartImgHtmlWeek());
|
||||||
replaceMap.put("%playerchartday%", data.getPlayersChartImgHtmlDay());
|
replaceMap.put("%playerchartday%", data.getPlayersChartImgHtmlDay());
|
||||||
replaceMap.put("%top50commands%", data.getTop50CommandsListHtml());
|
replaceMap.put("%top50commands%", data.getTop50CommandsListHtml());
|
||||||
replaceMap.put("%avgage%", "" + data.getAverageAge());
|
replaceMap.put("%avgage%", (data.getAverageAge() != -1) ? "" + data.getAverageAge() : "Not Known");
|
||||||
replaceMap.put("%avgplaytime%", FormatUtils.formatTimeAmount("" + data.getAveragePlayTime()));
|
replaceMap.put("%avgplaytime%", FormatUtils.formatTimeAmount("" + data.getAveragePlayTime()));
|
||||||
replaceMap.put("%totalplaytime%", FormatUtils.formatTimeAmount("" + data.getTotalPlayTime()));
|
replaceMap.put("%totalplaytime%", FormatUtils.formatTimeAmount("" + data.getTotalPlayTime()));
|
||||||
replaceMap.put("%ops%", "" + data.getOps());
|
replaceMap.put("%ops%", "" + data.getOps());
|
||||||
replaceMap.put("%refresh%", FormatUtils.formatTimeAmountSinceString("" + data.getRefreshDate(), new Date()));
|
replaceMap.put("%refresh%", FormatUtils.formatTimeAmountSinceString("" + data.getRefreshDate(), new Date()));
|
||||||
replaceMap.put("%totallogins%", "" + data.getTotalLoginTimes());
|
replaceMap.put("%totallogins%", "" + data.getTotalLoginTimes());
|
||||||
PlanLiteHook hook = getPlugin(Plan.class).getPlanLiteHook();
|
PlanLiteHook hook = getPlugin(Plan.class).getPlanLiteHook();
|
||||||
replaceMap.put("%planlite%", hook.isEnabled() ? getPlanLiteAnalysisHtml(data.getPlanLiteData()) : "");
|
replaceMap.put("%planlite%", hook.isEnabled() ? getPlanLiteAnalysisHtml(data.getPlanLiteData()) : "");
|
||||||
return replaceMap;
|
return replaceMap;
|
||||||
@ -107,6 +110,9 @@ public class AnalysisUtils {
|
|||||||
static boolean isActive(long lastPlayed, long playTime, int loginTimes) {
|
static boolean isActive(long lastPlayed, long playTime, int loginTimes) {
|
||||||
Plan plugin = getPlugin(Plan.class);
|
Plan plugin = getPlugin(Plan.class);
|
||||||
int timeToActive = plugin.getConfig().getInt("Settings.Analysis.MinutesPlayedUntilConsidiredActive");
|
int timeToActive = plugin.getConfig().getInt("Settings.Analysis.MinutesPlayedUntilConsidiredActive");
|
||||||
|
if (timeToActive < 0) {
|
||||||
|
timeToActive = 0;
|
||||||
|
}
|
||||||
long twoWeeks = 1209600000;
|
long twoWeeks = 1209600000;
|
||||||
if (new Date().getTime() - lastPlayed < twoWeeks) {
|
if (new Date().getTime() - lastPlayed < twoWeeks) {
|
||||||
if (loginTimes > 3) {
|
if (loginTimes > 3) {
|
||||||
|
@ -31,7 +31,7 @@ public class MiscUtils {
|
|||||||
String cVersion;
|
String cVersion;
|
||||||
String lineWithVersion;
|
String lineWithVersion;
|
||||||
try {
|
try {
|
||||||
URL githubUrl = new URL("https://raw.githubusercontent.com/Rsl1122/Plan-PlayerAnalytics/master/src/plugin.yml");
|
URL githubUrl = new URL("https://raw.githubusercontent.com/Rsl1122/Plan-PlayerAnalytics/master/Plan/src/main/resources/plugin.yml");
|
||||||
lineWithVersion = "";
|
lineWithVersion = "";
|
||||||
Scanner websiteScanner = new Scanner(githubUrl.openStream());
|
Scanner websiteScanner = new Scanner(githubUrl.openStream());
|
||||||
while (websiteScanner.hasNextLine()) {
|
while (websiteScanner.hasNextLine()) {
|
||||||
@ -51,7 +51,7 @@ public class MiscUtils {
|
|||||||
return "You're running the latest version";
|
return "You're running the latest version";
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
plugin.logToFile("Failed to compare versions.\n" + e);
|
plugin.logError("Failed to compare versions.");
|
||||||
}
|
}
|
||||||
return "Failed to get newest version number.";
|
return "Failed to get newest version number.";
|
||||||
}
|
}
|
||||||
@ -60,12 +60,12 @@ public class MiscUtils {
|
|||||||
String playerName = "";
|
String playerName = "";
|
||||||
Plan plugin = getPlugin(Plan.class);
|
Plan plugin = getPlugin(Plan.class);
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
if ((args[0].equals("-a")) || (args[0].equals("-r"))) {
|
if (sender.hasPermission("plan.inspect.other")
|
||||||
playerName = "ArgumentGivenError";
|
|| !(sender instanceof Player)
|
||||||
plugin.log("No username given, returned empty username.");
|
|| args[0].toLowerCase().equals(sender.getName().toLowerCase())) {
|
||||||
plugin.logToFile(Phrase.ERROR_NO_USERNAME + args[0]);
|
|
||||||
} else if (sender.hasPermission("plan.inspect.other") || !(sender instanceof Player)) {
|
|
||||||
playerName = args[0];
|
playerName = args[0];
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(Phrase.COMMAND_NO_PERMISSION.toString());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
<p>%activitytotal% players have played on this server.</p>
|
<p>%activitytotal% players have played on this server.</p>
|
||||||
<p>A Total of %totalplaytime% has been played with the average of %avgplaytime%</p>
|
<p>A Total of %totalplaytime% has been played with the average of %avgplaytime%</p>
|
||||||
<p>Players have joined %totallogins% times.</p>
|
<p>Players have joined %totallogins% times.</p>
|
||||||
<p>The average age of known players is %avgage%.</p>
|
<p>The average of known player ages is %avgage%.</p>
|
||||||
<br/><h4>Playerbase composition</h4>
|
<br/><h4>Playerbase composition</h4>
|
||||||
%activitypiechart%
|
%activitypiechart%
|
||||||
<p>Active %active% | Inactive %inactive% | Banned %banned% | Total Players: %activitytotal%</p>
|
<p>Active %active% | Inactive %inactive% | Banned %banned% | Total Players: %activitytotal%</p>
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
debug: true
|
|
||||||
|
|
||||||
Settings:
|
Settings:
|
||||||
Analysis:
|
Analysis:
|
||||||
MinutesPlayedUntilConsidiredActive: 10
|
MinutesPlayedUntilConsidiredActive: 10
|
||||||
@ -16,23 +14,10 @@ Settings:
|
|||||||
ShowAlternativeServerIP: false
|
ShowAlternativeServerIP: false
|
||||||
AlternativeIP: your.ip.here:%port%
|
AlternativeIP: your.ip.here:%port%
|
||||||
PlanLite:
|
PlanLite:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
database:
|
database:
|
||||||
type: sqlite
|
type: sqlite
|
||||||
|
|
||||||
enabledData:
|
|
||||||
planLite:
|
|
||||||
pluginEnabled: true
|
|
||||||
|
|
||||||
towny: true
|
|
||||||
factions: true
|
|
||||||
achievements: true
|
|
||||||
votes: true
|
|
||||||
economy: true
|
|
||||||
essentials:
|
|
||||||
ruleBreaking: true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -18,13 +18,14 @@
|
|||||||
<h1 style="text-decoration: underline;">Plan | Inspect Player %name%</h1>
|
<h1 style="text-decoration: underline;">Plan | Inspect Player %name%</h1>
|
||||||
<h4>UUID: %uuid%</h4>
|
<h4>UUID: %uuid%</h4>
|
||||||
<h4>Registered: %registered% %banned%%op%</h4>
|
<h4>Registered: %registered% %banned%%op%</h4>
|
||||||
|
%inaccuratedatawarning%
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="margin-left: 3px; margin-right: auto;
|
<td style="margin-left: 3px; margin-right: auto;
|
||||||
border-style: groove; border-width: 3px; border-radius: 12px; padding: 2px 4px 2px 3px;
|
border-style: groove; border-width: 3px; border-radius: 12px; padding: 2px 4px 2px 3px;
|
||||||
box-shadow: 5px 5px 4px 0px #888888;">
|
box-shadow: 5px 5px 4px 0px #888888;">
|
||||||
<h4>Information</h4>
|
<h4>Information</h4>
|
||||||
<p>Last seen: %lastseen% %active%</p>
|
<p>Last seen: %lastseen% %active% %isonline%</p>
|
||||||
<p>Nicknames: %nicknames% | Has connected from ips: %ips%</p>
|
<p>Nicknames: %nicknames% | Has connected from ips: %ips%</p>
|
||||||
<p>Geolocation: %geoloc%</p>
|
<p>Geolocation: %geoloc%</p>
|
||||||
<p>Playtime: %playtime%</p>
|
<p>Playtime: %playtime%</p>
|
||||||
|
@ -35,42 +35,37 @@ permissions:
|
|||||||
default: true
|
default: true
|
||||||
plan.inspect.other:
|
plan.inspect.other:
|
||||||
description: Allows you to check other players' player data.
|
description: Allows you to check other players' player data.
|
||||||
default: true
|
default: op
|
||||||
plan.analyze:
|
plan.analyze:
|
||||||
description: Allows you to check analysed data about all players.
|
description: Allows you to check analysed data about all players.
|
||||||
default: true
|
|
||||||
plan.analyze.refresh:
|
|
||||||
description: Allows you to refresh the analyse result with -r argument
|
|
||||||
default: op
|
default: op
|
||||||
plan.reload:
|
plan.reload:
|
||||||
description: Allows to reload plugin config
|
description: Allows to reload plugin config
|
||||||
default: true
|
default: op
|
||||||
plan.search:
|
plan.search:
|
||||||
description: Allows search
|
description: Allows search
|
||||||
default: true
|
default: op
|
||||||
plan.info:
|
plan.info:
|
||||||
description: Allows to view info
|
description: Allows to view info
|
||||||
default: true
|
|
||||||
plan.debug:
|
|
||||||
description: Allows debug command
|
|
||||||
default: op
|
default: op
|
||||||
|
plan.ignore.commanduse:
|
||||||
|
description: Commands used by this player are not saved
|
||||||
|
default: false
|
||||||
|
|
||||||
plan.basic:
|
plan.basic:
|
||||||
children:
|
children:
|
||||||
plan.?: true
|
plan.?: true
|
||||||
plan.inspect: true
|
plan.inspect: true
|
||||||
plan.info: true
|
|
||||||
plan.search: true
|
|
||||||
plan.advanced:
|
plan.advanced:
|
||||||
childer:
|
childer:
|
||||||
plan.basic: true
|
plan.basic: true
|
||||||
|
plan.info: true
|
||||||
plan.analyze: true
|
plan.analyze: true
|
||||||
plan.staff:
|
plan.staff:
|
||||||
children:
|
children:
|
||||||
plan.debug: true
|
plan.search: true
|
||||||
plan.advanced: true
|
plan.advanced: true
|
||||||
plan.inspect.other: true
|
plan.inspect.other: true
|
||||||
plan.analyze.refresh: true
|
|
||||||
plan.reload: true
|
plan.reload: true
|
||||||
plan.*:
|
plan.*:
|
||||||
children:
|
children:
|
||||||
|
Loading…
Reference in New Issue
Block a user