mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-11-01 00:10:12 +01:00
[2.8.0-SNAPSHOT] Further improvements to Html
Fixes for #38 #37 #36 Inspect page html improved - Removed piechart Added Session average to inspect & analysis pages Empty javadoc parts generated
This commit is contained in:
parent
09a3de2535
commit
1abdc26a11
@ -72,9 +72,9 @@ public class Plan extends JavaPlugin {
|
||||
* OnEnable method.
|
||||
*
|
||||
* Creates the config file. Checks for new version. Initializes Database.
|
||||
* Hooks PlanLite. Initializes DataCaches. Registers Listeners. Registers
|
||||
* Command /plan and initializes API. Enables Webserver & analysis tasks if
|
||||
* enabled in config. Warns about possible mistakes made in config.
|
||||
* Hooks to Supported plugins. Initializes DataCaches. Registers Listeners.
|
||||
* Registers Command /plan and initializes API. Enables Webserver & analysis
|
||||
* tasks if enabled in config. Warns about possible mistakes made in config.
|
||||
*/
|
||||
@Override
|
||||
public void onEnable() {
|
||||
@ -176,7 +176,13 @@ public class Plan extends JavaPlugin {
|
||||
getLogger().severe(message);
|
||||
}
|
||||
|
||||
public void toLog(String source, Exception e) {
|
||||
/**
|
||||
* Logs trace of caught Exception to Errors.txt & notifies on console.
|
||||
*
|
||||
* @param source Class name the exception was caught in.
|
||||
* @param e Throwable, eg NullPointerException
|
||||
*/
|
||||
public void toLog(String source, Throwable e) {
|
||||
logError(Phrase.ERROR_LOGGED.parse(e.toString()));
|
||||
toLog(source + " Caught " + e);
|
||||
for (StackTraceElement x : e.getStackTrace()) {
|
||||
@ -185,12 +191,23 @@ public class Plan extends JavaPlugin {
|
||||
toLog("");
|
||||
}
|
||||
|
||||
public void toLog(String source, Collection<Exception> e) {
|
||||
for (Exception ex : e) {
|
||||
/**
|
||||
* Logs multiple caught Errors to Errors.txt.
|
||||
*
|
||||
* @param source Class name the exception was caught in.
|
||||
* @param e Collection of Throwables, eg NullPointerException
|
||||
*/
|
||||
public void toLog(String source, Collection<Throwable> e) {
|
||||
for (Throwable ex : e) {
|
||||
toLog(source, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message to the Errors.txt with a timestamp.
|
||||
*
|
||||
* @param message Message to log to Errors.txt
|
||||
*/
|
||||
public void toLog(String message) {
|
||||
File folder = getDataFolder();
|
||||
if (!folder.exists()) {
|
||||
@ -296,21 +313,21 @@ public class Plan extends JavaPlugin {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Currnet instance of the InspectCacheHandler
|
||||
* @return Current instance of the InspectCacheHandler
|
||||
*/
|
||||
public InspectCacheHandler getInspectCache() {
|
||||
return inspectCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Currnet instance of the DataCacheHandler
|
||||
* @return Current instance of the DataCacheHandler
|
||||
*/
|
||||
public DataCacheHandler getHandler() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the Database
|
||||
* @return the Current Database
|
||||
*/
|
||||
public Database getDB() {
|
||||
return db;
|
||||
@ -323,19 +340,22 @@ public class Plan extends JavaPlugin {
|
||||
return uiServer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HookHandler that manages Hooks to other plugins.
|
||||
*/
|
||||
public HookHandler getHookHandler() {
|
||||
return hookHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Set containing SqLite & MySQL classes.
|
||||
* @return Set containing the SqLite & MySQL classes.
|
||||
*/
|
||||
public HashSet<Database> getDatabases() {
|
||||
return databases;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
* @return ID of the bootAnalysisTask
|
||||
*/
|
||||
public int getBootAnalysisTaskID() {
|
||||
return bootAnalysisTaskID;
|
||||
@ -343,7 +363,8 @@ public class Plan extends JavaPlugin {
|
||||
|
||||
private void initLocale() {
|
||||
String locale = Settings.LOCALE.toString().toUpperCase();
|
||||
/*File genLocale = new File(getDataFolder(), "locale_EN.txt");
|
||||
/*// Used to write a new Locale file
|
||||
File genLocale = new File(getDataFolder(), "locale_EN.txt");
|
||||
try {
|
||||
genLocale.createNewFile();
|
||||
FileWriter fw = new FileWriter(genLocale, true);
|
||||
|
@ -22,6 +22,9 @@ public enum Settings {
|
||||
CLEAR_CACHE_X_SAVES("Settings.Cache.DataCache.ClearCacheEveryXSaves"),
|
||||
WEBSERVER_PORT("Settings.WebServer.Port"),
|
||||
ANALYSIS_AUTO_REFRESH("Settings.Cache.AnalysisCache.RefreshEveryXMinutes"),
|
||||
PROCESS_GET_LIMIT("Settings.Cache.Processing.GetLimit"),
|
||||
PROCESS_SAVE_LIMIT("Settings.Cache.Processing.SaveLimit"),
|
||||
PROCESS_CLEAR_LIMIT("Settings.Cache.Processing.ClearLimit"),
|
||||
// String
|
||||
ALTERNATIVE_IP("Settings.WebServer.AlternativeIP"),
|
||||
DB_TYPE("database.type"),
|
||||
@ -68,6 +71,9 @@ public enum Settings {
|
||||
return getPlugin(Plan.class).getConfig().getInt(configPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Path of the config setting.
|
||||
*/
|
||||
public String getPath() {
|
||||
return configPath;
|
||||
}
|
||||
|
@ -42,6 +42,8 @@ public class AnalysisData {
|
||||
private long totalkills;
|
||||
private long totalmobkills;
|
||||
private long totaldeaths;
|
||||
|
||||
private long sessionAverage;
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
@ -57,10 +59,19 @@ public class AnalysisData {
|
||||
}
|
||||
|
||||
// Getters and setters v---------------------------------v
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getSortablePlayersTable() {
|
||||
return sortablePlayersTable;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sortablePlayersTable
|
||||
*/
|
||||
public void setSortablePlayersTable(String sortablePlayersTable) {
|
||||
this.sortablePlayersTable = sortablePlayersTable;
|
||||
}
|
||||
@ -82,7 +93,7 @@ public class AnalysisData {
|
||||
/**
|
||||
* @return HTML String of the Top50CommandsList
|
||||
*/
|
||||
public String getTop50CommandsListHtml() {
|
||||
public String getCommandUseListHtml() {
|
||||
return commandUseTableHtml;
|
||||
}
|
||||
|
||||
@ -311,83 +322,179 @@ public class AnalysisData {
|
||||
this.ops = ops;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getTop20ActivePlayers() {
|
||||
return top20ActivePlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param top20ActivePlayers
|
||||
*/
|
||||
public void setTop20ActivePlayers(String top20ActivePlayers) {
|
||||
this.top20ActivePlayers = top20ActivePlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getRecentPlayers() {
|
||||
return recentPlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param recentPlayers
|
||||
*/
|
||||
public void setRecentPlayers(String recentPlayers) {
|
||||
this.recentPlayers = recentPlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getNewPlayersMonth() {
|
||||
return newPlayersMonth;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param newPlayersMonth
|
||||
*/
|
||||
public void setNewPlayersMonth(int newPlayersMonth) {
|
||||
this.newPlayersMonth = newPlayersMonth;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getNewPlayersWeek() {
|
||||
return newPlayersWeek;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param newPlayersWeek
|
||||
*/
|
||||
public void setNewPlayersWeek(int newPlayersWeek) {
|
||||
this.newPlayersWeek = newPlayersWeek;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getNewPlayersDay() {
|
||||
return newPlayersDay;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param newPlayersDay
|
||||
*/
|
||||
public void setNewPlayersDay(int newPlayersDay) {
|
||||
this.newPlayersDay = newPlayersDay;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalkills() {
|
||||
return totalkills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalmobkills() {
|
||||
return totalmobkills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotaldeaths() {
|
||||
return totaldeaths;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalkills
|
||||
*/
|
||||
public void setTotalkills(long totalkills) {
|
||||
this.totalkills = totalkills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalmobkills
|
||||
*/
|
||||
public void setTotalmobkills(long totalmobkills) {
|
||||
this.totalmobkills = totalmobkills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totaldeaths
|
||||
*/
|
||||
public void setTotaldeaths(long totaldeaths) {
|
||||
this.totaldeaths = totaldeaths;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String[] getPlayersDataArray() {
|
||||
return playersDataArray;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param playersDataArray
|
||||
*/
|
||||
public void setPlayersDataArray(String[] playersDataArray) {
|
||||
this.playersDataArray = playersDataArray;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalCommands
|
||||
*/
|
||||
public void setTotalCommands(long totalCommands) {
|
||||
this.totalCommands = totalCommands;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalCommands() {
|
||||
return totalCommands;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getSessionAverage() {
|
||||
return sessionAverage;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sessionAverage
|
||||
*/
|
||||
public void setSessionAverage(long sessionAverage) {
|
||||
this.sessionAverage = sessionAverage;
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,13 @@ public class KillData {
|
||||
private long date;
|
||||
private String weapon;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param victim
|
||||
* @param victimID
|
||||
* @param weapon
|
||||
* @param date
|
||||
*/
|
||||
public KillData(UUID victim, int victimID, String weapon, long date) {
|
||||
this.victim = victim;
|
||||
this.weapon = weapon;
|
||||
@ -20,18 +27,34 @@ public class KillData {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public UUID getVictim() {
|
||||
return victim;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getWeapon() {
|
||||
return weapon;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getVictimUserID() {
|
||||
return victimUserID;
|
||||
}
|
||||
|
@ -31,6 +31,9 @@ public class RawAnalysisData {
|
||||
private HashMap<String, Integer> commandUse;
|
||||
private List<Long> registered;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public RawAnalysisData() {
|
||||
gmZero = 0;
|
||||
gmOne = 0;
|
||||
@ -53,142 +56,282 @@ public class RawAnalysisData {
|
||||
registered = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param gmZero
|
||||
*/
|
||||
public void addToGmZero(long gmZero) {
|
||||
this.gmZero += gmZero;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param gmOne
|
||||
*/
|
||||
public void addToGmOne(long gmOne) {
|
||||
this.gmOne += gmOne;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param gmTwo
|
||||
*/
|
||||
public void addToGmTwo(long gmTwo) {
|
||||
this.gmTwo += gmTwo;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param gmThree
|
||||
*/
|
||||
public void addGmThree(long gmThree) {
|
||||
this.gmThree += gmThree;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalLoginTimes
|
||||
*/
|
||||
public void addTotalLoginTimes(long totalLoginTimes) {
|
||||
this.totalLoginTimes += totalLoginTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalPlaytime
|
||||
*/
|
||||
public void addTotalPlaytime(long totalPlaytime) {
|
||||
this.totalPlaytime += totalPlaytime;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalBanned
|
||||
*/
|
||||
public void addTotalBanned(int totalBanned) {
|
||||
this.totalBanned += totalBanned;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param active
|
||||
*/
|
||||
public void addActive(int active) {
|
||||
this.active += active;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param joinleaver
|
||||
*/
|
||||
public void addJoinleaver(int joinleaver) {
|
||||
this.joinleaver += joinleaver;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param inactive
|
||||
*/
|
||||
public void addInactive(int inactive) {
|
||||
this.inactive += inactive;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalKills
|
||||
*/
|
||||
public void addTotalKills(long totalKills) {
|
||||
this.totalKills += totalKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalMobKills
|
||||
*/
|
||||
public void addTotalMobKills(long totalMobKills) {
|
||||
this.totalMobKills += totalMobKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param totalDeaths
|
||||
*/
|
||||
public void addTotalDeaths(long totalDeaths) {
|
||||
this.totalDeaths += totalDeaths;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ops
|
||||
*/
|
||||
public void addOps(int ops) {
|
||||
this.ops += ops;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getGmZero() {
|
||||
return gmZero;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getGmOne() {
|
||||
return gmOne;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getGmTwo() {
|
||||
return gmTwo;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getGmThree() {
|
||||
return gmThree;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalLoginTimes() {
|
||||
return totalLoginTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalPlaytime() {
|
||||
return totalPlaytime;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getTotalBanned() {
|
||||
return totalBanned;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getActive() {
|
||||
return active;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getJoinleaver() {
|
||||
return joinleaver;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getInactive() {
|
||||
return inactive;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalKills() {
|
||||
return totalKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalMobKills() {
|
||||
return totalMobKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getTotalDeaths() {
|
||||
return totalDeaths;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getOps() {
|
||||
return ops;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<Integer> getAges() {
|
||||
return ages;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashMap<String, Long> getLatestLogins() {
|
||||
return latestLogins;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashMap<String, Long> getPlaytimes() {
|
||||
return playtimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<SessionData> getSessiondata() {
|
||||
return sessiondata;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param commandUse
|
||||
*/
|
||||
public void setCommandUse(HashMap<String, Integer> commandUse) {
|
||||
this.commandUse = commandUse;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashMap<String, Integer> getCommandUse() {
|
||||
return commandUse;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<Long> getRegistered() {
|
||||
return registered;
|
||||
}
|
||||
|
@ -9,24 +9,45 @@ public class SessionData {
|
||||
private long sessionStart;
|
||||
private long sessionEnd;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sessionStart
|
||||
*/
|
||||
public SessionData(long sessionStart) {
|
||||
this.sessionStart = sessionStart;
|
||||
this.sessionEnd = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sessionStart
|
||||
* @param sessionEnd
|
||||
*/
|
||||
public SessionData(long sessionStart, long sessionEnd) {
|
||||
this.sessionStart = sessionStart;
|
||||
this.sessionEnd = sessionEnd;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param endOfSession
|
||||
*/
|
||||
public void endSession(long endOfSession) {
|
||||
sessionEnd = endOfSession;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getSessionStart() {
|
||||
return sessionStart;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getSessionEnd() {
|
||||
return sessionEnd;
|
||||
}
|
||||
|
@ -15,6 +15,10 @@ import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class UserData {
|
||||
|
||||
private int accessing;
|
||||
@ -47,6 +51,11 @@ public class UserData {
|
||||
private SessionData currentSession;
|
||||
private List<SessionData> sessions;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player
|
||||
* @param demData
|
||||
*/
|
||||
public UserData(Player player, DemographicsData demData) {
|
||||
accessing = 0;
|
||||
uuid = player.getUniqueId();
|
||||
@ -81,6 +90,11 @@ public class UserData {
|
||||
playerKills = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player
|
||||
* @param demData
|
||||
*/
|
||||
public UserData(OfflinePlayer player, DemographicsData demData) {
|
||||
accessing = 0;
|
||||
uuid = player.getUniqueId();
|
||||
@ -113,22 +127,37 @@ public class UserData {
|
||||
playerKills = new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ip
|
||||
*/
|
||||
public void addIpAddress(InetAddress ip) {
|
||||
if (!ips.contains(ip)) {
|
||||
ips.add(ip);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param addIps
|
||||
*/
|
||||
public void addIpAddresses(Collection<InetAddress> addIps) {
|
||||
ips.addAll(addIps);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param loc
|
||||
*/
|
||||
public void addLocation(Location loc) {
|
||||
locations.add(loc);
|
||||
location = loc;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param addLocs
|
||||
*/
|
||||
public void addLocations(Collection<Location> addLocs) {
|
||||
locations.addAll(addLocs);
|
||||
if (!locations.isEmpty()) {
|
||||
@ -136,6 +165,11 @@ public class UserData {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param nick
|
||||
* @return
|
||||
*/
|
||||
public boolean addNickname(String nick) {
|
||||
if (!nicknames.contains(nick)) {
|
||||
if (!nick.isEmpty()) {
|
||||
@ -146,14 +180,30 @@ public class UserData {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param addNicks
|
||||
*/
|
||||
public void addNicknames(Collection<String> addNicks) {
|
||||
nicknames.addAll(addNicks);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param gm
|
||||
* @param time
|
||||
*/
|
||||
public void setGMTime(GameMode gm, long time) {
|
||||
gmTimes.put(gm, time);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param survivalTime
|
||||
* @param creativeTime
|
||||
* @param adventureTime
|
||||
* @param spectatorTime
|
||||
*/
|
||||
public void setAllGMTimes(long survivalTime, long creativeTime, long adventureTime, long spectatorTime) {
|
||||
gmTimes.clear();
|
||||
gmTimes.put(GameMode.SURVIVAL, survivalTime);
|
||||
@ -165,12 +215,20 @@ public class UserData {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param session
|
||||
*/
|
||||
public void addSession(SessionData session) {
|
||||
if (session != null) {
|
||||
sessions.add(session);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sessions
|
||||
*/
|
||||
public void addSessions(Collection<SessionData> sessions) {
|
||||
Collection<SessionData> filteredSessions = sessions.parallelStream()
|
||||
.filter(session -> session != null)
|
||||
@ -178,201 +236,397 @@ public class UserData {
|
||||
this.sessions.addAll(filteredSessions);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param session
|
||||
*/
|
||||
public void setCurrentSession(SessionData session) {
|
||||
currentSession = session;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param isBanned
|
||||
*/
|
||||
public void updateBanned(boolean isBanned) {
|
||||
this.isBanned = isBanned;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isAccessed() {
|
||||
return accessing > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void access() {
|
||||
accessing++;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void stopAccessing() {
|
||||
accessing--;
|
||||
}
|
||||
|
||||
// Getters -------------------------------------------------------------
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
|
||||
public UUID getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<Location> getLocations() {
|
||||
return locations;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashSet<InetAddress> getIps() {
|
||||
return ips;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashSet<String> getNicknames() {
|
||||
return nicknames;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getRegistered() {
|
||||
return registered;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getLastPlayed() {
|
||||
return lastPlayed;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getPlayTime() {
|
||||
return playTime;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getLoginTimes() {
|
||||
return loginTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getTimesKicked() {
|
||||
return timesKicked;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashMap<GameMode, Long> getGmTimes() {
|
||||
return gmTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getLastGmSwapTime() {
|
||||
return lastGmSwapTime;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public GameMode getLastGamemode() {
|
||||
return lastGamemode;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isOp() {
|
||||
return isOp;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isBanned() {
|
||||
return isBanned;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public DemographicsData getDemData() {
|
||||
return demData;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
// Setters -------------------------------------------------------------
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
*/
|
||||
public void setUuid(UUID uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param location
|
||||
*/
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param locations
|
||||
*/
|
||||
public void setLocations(List<Location> locations) {
|
||||
this.locations = locations;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ips
|
||||
*/
|
||||
public void setIps(HashSet<InetAddress> ips) {
|
||||
this.ips = ips;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param nicknames
|
||||
*/
|
||||
public void setNicknames(HashSet<String> nicknames) {
|
||||
this.nicknames = nicknames;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param registered
|
||||
*/
|
||||
public void setRegistered(long registered) {
|
||||
this.registered = registered;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param lastPlayed
|
||||
*/
|
||||
public void setLastPlayed(long lastPlayed) {
|
||||
this.lastPlayed = lastPlayed;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param playTime
|
||||
*/
|
||||
public void setPlayTime(long playTime) {
|
||||
this.playTime = playTime;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param loginTimes
|
||||
*/
|
||||
public void setLoginTimes(int loginTimes) {
|
||||
this.loginTimes = loginTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param timesKicked
|
||||
*/
|
||||
public void setTimesKicked(int timesKicked) {
|
||||
this.timesKicked = timesKicked;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param gmTimes
|
||||
*/
|
||||
public void setGmTimes(HashMap<GameMode, Long> gmTimes) {
|
||||
this.gmTimes = gmTimes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param lastGmSwapTime
|
||||
*/
|
||||
public void setLastGmSwapTime(long lastGmSwapTime) {
|
||||
this.lastGmSwapTime = lastGmSwapTime;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param lastGamemode
|
||||
*/
|
||||
public void setLastGamemode(GameMode lastGamemode) {
|
||||
this.lastGamemode = lastGamemode;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param isOp
|
||||
*/
|
||||
public void setIsOp(boolean isOp) {
|
||||
this.isOp = isOp;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param demData
|
||||
*/
|
||||
public void setDemData(DemographicsData demData) {
|
||||
this.demData = demData;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isOnline() {
|
||||
return isOnline;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getMobKills() {
|
||||
return mobKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param mobKills
|
||||
*/
|
||||
public void setMobKills(int mobKills) {
|
||||
this.mobKills = mobKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<KillData> getPlayerKills() {
|
||||
return playerKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param playerKills
|
||||
*/
|
||||
public void setPlayerKills(List<KillData> playerKills) {
|
||||
this.playerKills = playerKills;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param kill
|
||||
*/
|
||||
public void addPlayerKill(KillData kill) {
|
||||
playerKills.add(kill);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getDeaths() {
|
||||
return deaths;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param deaths
|
||||
*/
|
||||
public void setDeaths(int deaths) {
|
||||
this.deaths = deaths;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<SessionData> getSessions() {
|
||||
return sessions;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getLastNick() {
|
||||
return lastNick;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param lastNick
|
||||
*/
|
||||
public void setLastNick(String lastNick) {
|
||||
this.lastNick = lastNick;
|
||||
}
|
||||
|
@ -33,6 +33,9 @@ public class AdvancedAchievementsHook extends Hook {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public AdvancedAchievementsHook() {
|
||||
super();
|
||||
plugin = null;
|
||||
|
@ -33,6 +33,9 @@ public class EssentialsHook extends Hook {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public EssentialsHook() {
|
||||
super();
|
||||
plugin = null;
|
||||
|
@ -34,6 +34,9 @@ public class FactionsHook extends Hook {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public FactionsHook() {
|
||||
super();
|
||||
plugin = null;
|
||||
|
@ -25,6 +25,9 @@ public abstract class Hook {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Hook() {
|
||||
enabled = false;
|
||||
}
|
||||
@ -36,6 +39,10 @@ public abstract class Hook {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param enabled
|
||||
*/
|
||||
public void setEnabled(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
@ -23,11 +23,18 @@ public class HookHandler {
|
||||
private OnTimeHook onTimeHook;
|
||||
private TownyHook townyHook;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plan
|
||||
*/
|
||||
public HookHandler(Plan plan) {
|
||||
this.plan = plan;
|
||||
hook();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void reloadHooks() {
|
||||
hook();
|
||||
}
|
||||
@ -65,30 +72,58 @@ public class HookHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public AdvancedAchievementsHook getAdvancedAchievementsHook() {
|
||||
return advancedAchievementsHook;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public EssentialsHook getEssentialsHook() {
|
||||
return essentialsHook;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public SuperbVoteHook getSuperbVoteHook() {
|
||||
return superbVoteHook;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public FactionsHook getFactionsHook() {
|
||||
return factionsHook;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TownyHook getTownyHook() {
|
||||
return townyHook;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public OnTimeHook getOnTimeHook() {
|
||||
return onTimeHook;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Map<String, String> getAdditionalAnalysisReplaceRules() {
|
||||
Map<String, String> addReplace = new HashMap<>();
|
||||
AdvancedAchievementsHook aH = advancedAchievementsHook;
|
||||
@ -102,6 +137,11 @@ public class HookHandler {
|
||||
return addReplace;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
*/
|
||||
public Map<String, String> getAdditionalInspectReplaceRules(UUID uuid) {
|
||||
Map<String, String> addReplace = new HashMap<>();
|
||||
AdvancedAchievementsHook aH = advancedAchievementsHook;
|
||||
|
@ -25,6 +25,9 @@ public class OnTimeHook extends Hook {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public OnTimeHook() {
|
||||
super();
|
||||
plugin = null;
|
||||
|
@ -23,6 +23,9 @@ public class SuperbVoteHook extends Hook {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public SuperbVoteHook() {
|
||||
super();
|
||||
plugin = null;
|
||||
|
@ -36,6 +36,9 @@ public class TownyHook extends Hook {
|
||||
this.towny = getPlugin(Towny.class);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public TownyHook() {
|
||||
super();
|
||||
plugin = null;
|
||||
|
@ -8,5 +8,10 @@ import main.java.com.djrapitops.plan.data.UserData;
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public abstract class DBCallableProcessor {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public abstract void process(UserData data);
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.UUID;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||
|
||||
@ -17,20 +18,36 @@ public class DataCacheClearQueue {
|
||||
private BlockingQueue<UUID> q;
|
||||
private ClearSetup s;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
* @param handler
|
||||
*/
|
||||
public DataCacheClearQueue(Plan plugin, DataCacheHandler handler) {
|
||||
q = new ArrayBlockingQueue(1000);
|
||||
q = new ArrayBlockingQueue(Settings.PROCESS_CLEAR_LIMIT.getNumber());
|
||||
s = new ClearSetup();
|
||||
s.go(q, handler);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
*/
|
||||
public void scheduleForClear(UUID uuid) {
|
||||
q.add(uuid);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuids
|
||||
*/
|
||||
public void scheduleForClear(Collection<UUID> uuids) {
|
||||
q.addAll(uuids);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void stop() {
|
||||
s.stop();
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import java.util.UUID;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||
|
||||
@ -21,12 +22,21 @@ public class DataCacheGetQueue {
|
||||
private BlockingQueue<HashMap<UUID, List<DBCallableProcessor>>> q;
|
||||
private GetSetup s;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public DataCacheGetQueue(Plan plugin) {
|
||||
q = new ArrayBlockingQueue(1000);
|
||||
q = new ArrayBlockingQueue(Settings.PROCESS_GET_LIMIT.getNumber());
|
||||
s = new GetSetup();
|
||||
s.go(q, plugin.getDB());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param processors
|
||||
*/
|
||||
public void scheduleForGet(UUID uuid, DBCallableProcessor... processors) {
|
||||
HashMap<UUID, List<DBCallableProcessor>> map = new HashMap<>();
|
||||
if (map.get(uuid) == null) {
|
||||
@ -36,6 +46,9 @@ public class DataCacheGetQueue {
|
||||
q.add(map);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void stop() {
|
||||
s.stop();
|
||||
}
|
||||
|
@ -220,6 +220,10 @@ public class DataCacheHandler {
|
||||
}
|
||||
|
||||
// Should only be called from Async thread
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void saveHandlerDataToCache() {
|
||||
Bukkit.getServer().getOnlinePlayers().parallelStream().forEach((p) -> {
|
||||
saveHandlerDataToCache(p);
|
||||
@ -255,10 +259,19 @@ public class DataCacheHandler {
|
||||
plugin.log(Phrase.CACHE_REMOVE.parse(uuid.toString()));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
*/
|
||||
public void scheludeForClear(UUID uuid) {
|
||||
clearTask.scheduleForClear(uuid);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
*/
|
||||
public boolean isDataAccessed(UUID uuid) {
|
||||
UserData userData = dataCache.get(uuid);
|
||||
if (userData != null) {
|
||||
@ -276,6 +289,10 @@ public class DataCacheHandler {
|
||||
saveTask.scheduleNewPlayer(NewPlayerCreator.createNewPlayer(player));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player
|
||||
*/
|
||||
public void newPlayer(OfflinePlayer player) {
|
||||
saveTask.scheduleNewPlayer(NewPlayerCreator.createNewPlayer(player));
|
||||
}
|
||||
@ -329,6 +346,10 @@ public class DataCacheHandler {
|
||||
return gamemodeTimesHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public KillHandler getKillHandler() {
|
||||
return killHandler;
|
||||
}
|
||||
@ -342,6 +363,10 @@ public class DataCacheHandler {
|
||||
return db;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public HashMap<String, Integer> getCommandUse() {
|
||||
return commandUse;
|
||||
}
|
||||
@ -353,6 +378,10 @@ public class DataCacheHandler {
|
||||
return commandUseHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public SessionHandler getSessionHandler() {
|
||||
return sessionHandler;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.Collection;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
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;
|
||||
@ -18,24 +19,43 @@ public class DataCacheSaveQueue {
|
||||
private BlockingQueue<UserData> q;
|
||||
private SaveSetup s;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public DataCacheSaveQueue(Plan plugin) {
|
||||
q = new ArrayBlockingQueue(1000);
|
||||
q = new ArrayBlockingQueue(Settings.PROCESS_SAVE_LIMIT.getNumber());
|
||||
s = new SaveSetup();
|
||||
s.go(q, plugin.getDB());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void scheduleForSave(UserData data) {
|
||||
q.add(data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void scheduleForSave(Collection<UserData> data) {
|
||||
q.addAll(data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void scheduleNewPlayer(UserData data) {
|
||||
q.add(data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void stop() {
|
||||
s.stop();
|
||||
}
|
||||
|
@ -46,6 +46,11 @@ public class InspectCacheHandler {
|
||||
cache(uuid, minutes);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param minutes
|
||||
*/
|
||||
public void cache(UUID uuid, int minutes) {
|
||||
DBCallableProcessor cacher = new DBCallableProcessor() {
|
||||
@Override
|
||||
|
@ -47,6 +47,11 @@ public class BasicInfoHandler {
|
||||
data.addIpAddress(ip);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param nickname
|
||||
* @param data
|
||||
*/
|
||||
public void addNickname(String nickname, UserData data) {
|
||||
if (!nickname.isEmpty()) {
|
||||
if (data.addNickname(nickname)) {
|
||||
|
@ -14,10 +14,20 @@ import main.java.com.djrapitops.plan.data.UserData;
|
||||
public class KillHandler {
|
||||
private Plan plugin;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public KillHandler(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param killerData
|
||||
* @param victimUUID
|
||||
* @param weapon
|
||||
*/
|
||||
public void handlePlayerKill(UserData killerData, UUID victimUUID, String weapon) {
|
||||
long now = new Date().toInstant().getEpochSecond()*(long)1000;
|
||||
int victimID;
|
||||
@ -30,10 +40,18 @@ public class KillHandler {
|
||||
killerData.addPlayerKill(new KillData(victimUUID, victimID, weapon, now));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void handlePlayerDeath(UserData data) {
|
||||
data.setDeaths(data.getDeaths()+1);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void handleMobKill(UserData data) {
|
||||
data.setMobKills(data.getMobKills()+1);
|
||||
}
|
||||
|
@ -53,6 +53,11 @@ public class LocationHandler {
|
||||
locations.get(uuid).addAll(locs);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
*/
|
||||
public List<Location> getLocationsForSaving(UUID uuid) {
|
||||
if (!locations.containsKey(uuid)) {
|
||||
return new ArrayList<>();
|
||||
@ -60,6 +65,10 @@ public class LocationHandler {
|
||||
return locations.get(uuid);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
*/
|
||||
public void clearLocations(UUID uuid) {
|
||||
locations.remove(uuid);
|
||||
}
|
||||
|
@ -18,12 +18,20 @@ public class SessionHandler {
|
||||
private final DataCacheHandler handler;
|
||||
private final Plan plugin;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public SessionHandler(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
this.handler = plugin.getHandler();
|
||||
this.activeSessions = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void startSession(UserData data) {
|
||||
long now = new Date().toInstant().getEpochSecond() * (long) 1000;
|
||||
SessionData session = new SessionData(now);
|
||||
@ -31,6 +39,10 @@ public class SessionHandler {
|
||||
data.setCurrentSession(session);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void endSession (UserData data) {
|
||||
UUID uuid = data.getUuid();
|
||||
SessionData currentSession = activeSessions.get(uuid);
|
||||
|
@ -10,6 +10,17 @@ import java.util.UUID;
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public interface Importer {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuids
|
||||
* @return
|
||||
*/
|
||||
public HashMap<UUID, Long> grabNumericData(Set<UUID> uuids);
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isEnabled();
|
||||
}
|
||||
|
@ -17,11 +17,20 @@ public class OnTimeImporter implements Importer {
|
||||
private final Plan plugin;
|
||||
private boolean enabled;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public OnTimeImporter(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
this.enabled = Bukkit.getPluginManager().isPluginEnabled("OnTime");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuids
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public HashMap<UUID, Long> grabNumericData(Set<UUID> uuids) {
|
||||
HashMap<UUID, Long> onTimeData = new HashMap<>();
|
||||
@ -35,6 +44,10 @@ public class OnTimeImporter implements Importer {
|
||||
return onTimeData;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
|
@ -22,6 +22,10 @@ public class PlanDeathEventListener implements Listener {
|
||||
private final DataCacheHandler handler;
|
||||
private final KillHandler kH;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public PlanDeathEventListener(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
this.handler = plugin.getHandler();
|
||||
@ -51,6 +55,13 @@ public class PlanDeathEventListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param dead
|
||||
* @param killerIsPlayer
|
||||
* @param killer
|
||||
* @param killersData
|
||||
*/
|
||||
public void continueProcessing(LivingEntity dead, boolean killerIsPlayer, Player killer, UserData killersData) {
|
||||
if (dead instanceof Player) {
|
||||
Player killed = (Player) dead;
|
||||
|
@ -15,36 +15,153 @@ public abstract class Database {
|
||||
|
||||
private final Plan plugin;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
*/
|
||||
public Database(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean init(){
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param processors
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void giveUserDataToProcessors(UUID uuid, DBCallableProcessor... processors) throws SQLException {
|
||||
List<DBCallableProcessor> coll = new ArrayList<>();
|
||||
coll.addAll(Arrays.asList(processors));
|
||||
giveUserDataToProcessors(uuid, coll);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param processors
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract void giveUserDataToProcessors(UUID uuid, Collection<DBCallableProcessor> processors) throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param data
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract void saveUserData(UUID uuid, UserData data) throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract void saveMultipleUserData(List<UserData> data) throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
*/
|
||||
public abstract boolean wasSeenBefore(UUID uuid);
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public abstract void clean();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public abstract String getName();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getConfigName() {
|
||||
return getName().toLowerCase().replace(" ", "");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public ConfigurationSection getConfigSection() {
|
||||
return plugin.getConfig().getConfigurationSection(getConfigName());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract int getVersion() throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param version
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract void setVersion(int version) throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract void close() throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract boolean removeAccount(String uuid) throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract boolean removeAllData() throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @throws SQLException
|
||||
* @throws NullPointerException
|
||||
*/
|
||||
public abstract void saveCommandUse(HashMap<String, Integer> data) throws SQLException, NullPointerException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract Set<UUID> getSavedUUIDs() throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract HashMap<String, Integer> getCommandUse() throws SQLException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public abstract int getUserId(String uuid) throws SQLException;
|
||||
}
|
||||
|
@ -45,6 +45,10 @@ public class MySQLDB extends SQLDB {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "MySQL";
|
||||
|
@ -24,6 +24,10 @@ import org.bukkit.World;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public abstract class SQLDB extends Database {
|
||||
|
||||
final Plan plugin;
|
||||
@ -88,6 +92,11 @@ public abstract class SQLDB extends Database {
|
||||
|
||||
private String versionName;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
* @param supportsModification
|
||||
*/
|
||||
public SQLDB(Plan plugin, boolean supportsModification) {
|
||||
super(plugin);
|
||||
this.plugin = plugin;
|
||||
@ -166,6 +175,10 @@ public abstract class SQLDB extends Database {
|
||||
}).runTaskTimerAsynchronously(plugin, 60 * 20, 60 * 20);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean init() {
|
||||
super.init();
|
||||
@ -177,6 +190,11 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public boolean checkConnection() throws SQLException {
|
||||
if (connection == null || connection.isClosed()) {
|
||||
connection = getNewConnection();
|
||||
@ -304,13 +322,27 @@ public abstract class SQLDB extends Database {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected abstract Connection getNewConnection();
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sql
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public boolean query(String sql) throws SQLException {
|
||||
boolean success = connection.createStatement().execute(sql);
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public void close() throws SQLException {
|
||||
if (connection != null) {
|
||||
@ -318,6 +350,11 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public int getVersion() throws SQLException {
|
||||
int version = 0;
|
||||
@ -332,6 +369,11 @@ public abstract class SQLDB extends Database {
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param version
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public void setVersion(int version) throws SQLException {
|
||||
connection.prepareStatement("DELETE FROM " + versionName).executeUpdate();
|
||||
@ -339,6 +381,11 @@ public abstract class SQLDB extends Database {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean wasSeenBefore(UUID uuid) {
|
||||
try {
|
||||
@ -349,6 +396,12 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public int getUserId(String uuid) throws SQLException {
|
||||
int userId = -1;
|
||||
@ -384,6 +437,11 @@ public abstract class SQLDB extends Database {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public Set<UUID> getSavedUUIDs() throws SQLException {
|
||||
Set<UUID> uuids = new HashSet<>();
|
||||
@ -400,6 +458,12 @@ public abstract class SQLDB extends Database {
|
||||
return uuids;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @throws SQLException
|
||||
* @throws NullPointerException
|
||||
*/
|
||||
@Override
|
||||
public void saveCommandUse(HashMap<String, Integer> data) throws SQLException, NullPointerException {
|
||||
if (data.isEmpty()) {
|
||||
@ -434,6 +498,11 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public HashMap<String, Integer> getCommandUse() throws SQLException {
|
||||
HashMap<String, Integer> commandUse = new HashMap<>();
|
||||
@ -450,6 +519,12 @@ public abstract class SQLDB extends Database {
|
||||
return commandUse;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public boolean removeAccount(String uuid) throws SQLException {
|
||||
try {
|
||||
@ -497,6 +572,12 @@ public abstract class SQLDB extends Database {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param processors
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public void giveUserDataToProcessors(UUID uuid, Collection<DBCallableProcessor> processors) throws SQLException {
|
||||
try {
|
||||
@ -665,13 +746,18 @@ public abstract class SQLDB extends Database {
|
||||
return killData;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public void saveMultipleUserData(List<UserData> data) throws SQLException {
|
||||
checkConnection();
|
||||
if (data.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Set<Exception> exceptions = new HashSet<>();
|
||||
Set<Throwable> exceptions = new HashSet<>();
|
||||
List<UserData> saveLast = new ArrayList<>();
|
||||
String uSQL = "UPDATE " + userName + " SET "
|
||||
+ userColumnDemAge + "=?, "
|
||||
@ -778,6 +864,12 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param uuid
|
||||
* @param data
|
||||
* @throws SQLException
|
||||
*/
|
||||
@Override
|
||||
public void saveUserData(UUID uuid, UserData data) throws SQLException {
|
||||
if (uuid == null) {
|
||||
@ -866,6 +958,12 @@ public abstract class SQLDB extends Database {
|
||||
data.stopAccessing();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
* @param locations
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void saveAdditionalLocationsList(int userId, List<Location> locations) throws SQLException {
|
||||
List<Location> newLocations = new ArrayList<>();
|
||||
newLocations.addAll(locations);
|
||||
@ -900,6 +998,13 @@ public abstract class SQLDB extends Database {
|
||||
saveStatement.close();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
* @param names
|
||||
* @param lastNick
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void saveNickList(int userId, HashSet<String> names, String lastNick) throws SQLException {
|
||||
if (names.isEmpty()) {
|
||||
return;
|
||||
@ -929,6 +1034,12 @@ public abstract class SQLDB extends Database {
|
||||
statement.close();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
* @param sessions
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void saveSessionList(int userId, List<SessionData> sessions) throws SQLException {
|
||||
if (sessions.isEmpty()) {
|
||||
return;
|
||||
@ -958,6 +1069,12 @@ public abstract class SQLDB extends Database {
|
||||
statement.close();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
* @param kills
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void savePlayerKills(int userId, List<KillData> kills) throws SQLException {
|
||||
if (kills.isEmpty()) {
|
||||
return;
|
||||
@ -989,6 +1106,12 @@ public abstract class SQLDB extends Database {
|
||||
statement.close();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
* @param ips
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void saveIPList(int userId, HashSet<InetAddress> ips) throws SQLException {
|
||||
if (ips.isEmpty()) {
|
||||
return;
|
||||
@ -1017,6 +1140,12 @@ public abstract class SQLDB extends Database {
|
||||
statement.close();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
* @param gamemodeTimes
|
||||
* @throws SQLException
|
||||
*/
|
||||
public void saveGMTimes(int userId, HashMap<GameMode, Long> gamemodeTimes) throws SQLException {
|
||||
if (gamemodeTimes.isEmpty()) {
|
||||
return;
|
||||
@ -1054,6 +1183,9 @@ public abstract class SQLDB extends Database {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void clean() {
|
||||
try {
|
||||
@ -1064,6 +1196,10 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean removeAllData() {
|
||||
try {
|
||||
@ -1093,10 +1229,18 @@ public abstract class SQLDB extends Database {
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean supportsModification() {
|
||||
return supportsModification;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Connection getConnection() {
|
||||
return connection;
|
||||
}
|
||||
|
@ -24,6 +24,11 @@ public class SQLiteDB extends SQLDB {
|
||||
this(plugin, "database");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plugin
|
||||
* @param dbName
|
||||
*/
|
||||
public SQLiteDB(Plan plugin, String dbName) {
|
||||
super(plugin, false);
|
||||
|
||||
@ -41,6 +46,11 @@ public class SQLiteDB extends SQLDB {
|
||||
return getNewConnection(dbName);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param dbName
|
||||
* @return
|
||||
*/
|
||||
public Connection getNewConnection(String dbName) {
|
||||
try {
|
||||
Class.forName("org.sqlite.JDBC");
|
||||
@ -52,6 +62,10 @@ public class SQLiteDB extends SQLDB {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "SQLite";
|
||||
|
@ -49,8 +49,8 @@ public enum Html {
|
||||
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"),
|
||||
ACTIVE("Player is Active"),
|
||||
INACTIVE("Player is inactive"),
|
||||
ERROR_LIST("Error Creating List</p>"),
|
||||
HIDDEN("Hidden (config)"),
|
||||
ERROR_NOT_SET("Error: Replace rule was not set"),
|
||||
|
@ -15,6 +15,12 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||
*/
|
||||
public class PlayerActivityGraphCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sessionData
|
||||
* @param scale
|
||||
* @return
|
||||
*/
|
||||
public static String[] generateDataArray(List<SessionData> sessionData, long scale) {
|
||||
Plan plugin = getPlugin(Plan.class);
|
||||
int maxPlayers = plugin.getHandler().getMaxPlayers();
|
||||
|
@ -14,6 +14,11 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||
*/
|
||||
public class SortableCommandUseTableCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param commandUse
|
||||
* @return
|
||||
*/
|
||||
public static String createSortedCommandUseTable(HashMap<String, Integer> commandUse) {
|
||||
List<String[]> sorted = MapComparator.sortByValue(commandUse);
|
||||
String html = "";
|
||||
|
@ -13,6 +13,12 @@ import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
*/
|
||||
public class SortableFactionsTableCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param factionList
|
||||
* @param fHook
|
||||
* @return
|
||||
*/
|
||||
public static String createSortableFactionsTable(Collection<String> factionList, FactionsHook fHook) {
|
||||
String html = Html.TABLE_FACTIONS_START.parse();
|
||||
if (factionList.isEmpty()) {
|
||||
|
@ -14,6 +14,11 @@ import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
*/
|
||||
public class SortableKillsTableCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param killData
|
||||
* @return
|
||||
*/
|
||||
public static String createSortedSessionDataTable10(List<KillData> killData) {
|
||||
String html = Html.TABLE_KILLS_START.parse();
|
||||
if (killData.isEmpty()) {
|
||||
|
@ -13,6 +13,11 @@ import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
*/
|
||||
public class SortablePlayersTableCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public static String createSortablePlayersTable(Collection<UserData> data) {
|
||||
String html = "";
|
||||
for (UserData uData : data) {
|
||||
|
@ -13,6 +13,11 @@ import main.java.com.djrapitops.plan.utilities.comparators.SessionDataComparator
|
||||
*/
|
||||
public class SortableSessionTableCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sessionData
|
||||
* @return
|
||||
*/
|
||||
public static String createSortedSessionDataTable10(List<SessionData> sessionData) {
|
||||
String html = Html.TABLE_SESSIONS_START.parse();
|
||||
if (sessionData.isEmpty()) {
|
||||
|
@ -13,6 +13,12 @@ import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
*/
|
||||
public class SortableTownTableCreator {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param townNames
|
||||
* @param tHook
|
||||
* @return
|
||||
*/
|
||||
public static String createSortableTownsTable(Collection<String> townNames, TownyHook tHook) {
|
||||
String html = Html.TABLE_TOWNS_START.parse();
|
||||
if (townNames.isEmpty()) {
|
||||
|
@ -21,9 +21,6 @@ import org.bukkit.GameMode;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -152,6 +149,7 @@ public class Analysis {
|
||||
long totalPlaytime = sorted.getTotalPlaytime();
|
||||
analysisData.setTotalPlayTime(totalPlaytime);
|
||||
analysisData.setAveragePlayTime(totalPlaytime / rawData.size());
|
||||
analysisData.setSessionAverage(AnalysisUtils.average(AnalysisUtils.transformSessionDataToLengths(sorted.getSessiondata())));
|
||||
analysisData.setTotalLoginTimes(sorted.getTotalLoginTimes());
|
||||
|
||||
createActivityVisalization(sorted.getTotalBanned(), sorted.getActive(), sorted.getInactive(), sorted.getJoinleaver(), analysisData);
|
||||
|
@ -1,11 +1,13 @@
|
||||
package main.java.com.djrapitops.plan.utilities;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.data.SessionData;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.ui.Html;
|
||||
import main.java.com.djrapitops.plan.ui.tables.SortableCommandUseTableCreator;
|
||||
@ -18,6 +20,13 @@ import main.java.com.djrapitops.plan.utilities.comparators.MapComparator;
|
||||
*/
|
||||
public class AnalysisUtils {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param lastPlayed
|
||||
* @param playTime
|
||||
* @param loginTimes
|
||||
* @return
|
||||
*/
|
||||
public static boolean isActive(long lastPlayed, long playTime, int loginTimes) {
|
||||
int timeToActive = Settings.ANALYSIS_MINUTES_FOR_ACTIVE.getNumber();
|
||||
if (timeToActive < 0) {
|
||||
@ -73,4 +82,23 @@ public class AnalysisUtils {
|
||||
|
||||
return newPlayers;
|
||||
}
|
||||
|
||||
static List<Long> transformSessionDataToLengths(Collection<SessionData> data) {
|
||||
List<Long> list = new ArrayList<>();
|
||||
data.stream().forEach((sData) -> {
|
||||
list.add(sData.getSessionEnd()-sData.getSessionStart());
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
static long average(Collection<Long> list) {
|
||||
if (list.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
long total = 0;
|
||||
for (Long long1 : list) {
|
||||
total += long1;
|
||||
}
|
||||
return total / list.size();
|
||||
}
|
||||
}
|
||||
|
@ -168,6 +168,11 @@ public class FormatUtils {
|
||||
return string.replaceAll("§r", "");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param d
|
||||
* @return
|
||||
*/
|
||||
public static String cutDecimals(double d) {
|
||||
DecimalFormat df = new DecimalFormat("#.##");
|
||||
df.setRoundingMode(RoundingMode.CEILING);
|
||||
|
@ -2,7 +2,6 @@ package main.java.com.djrapitops.plan.utilities;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.HashMap;
|
||||
import java.util.Scanner;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
@ -15,6 +14,12 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||
*/
|
||||
public class HtmlUtils {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param fileName
|
||||
* @return
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
public static String getHtmlStringFromResource(String fileName) throws FileNotFoundException {
|
||||
Plan plugin = getPlugin(Plan.class);
|
||||
File localFile = new File(plugin.getDataFolder(), fileName);
|
||||
@ -30,6 +35,12 @@ public class HtmlUtils {
|
||||
return html;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param html
|
||||
* @param replaceMap
|
||||
* @return
|
||||
*/
|
||||
public static String replacePlaceholders(String html, HashMap<String, String> replaceMap) {
|
||||
for (String key : replaceMap.keySet()) {
|
||||
html = html.replaceAll(key, replaceMap.get(key));
|
||||
@ -37,6 +48,10 @@ public class HtmlUtils {
|
||||
return html;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String getServerAnalysisUrl() {
|
||||
int port = Settings.WEBSERVER_PORT.getNumber();
|
||||
String ip = getPlugin(Plan.class).getServer().getIp() + ":" + port;
|
||||
@ -49,6 +64,11 @@ public class HtmlUtils {
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param playerName
|
||||
* @return
|
||||
*/
|
||||
public static String getInspectUrl(String playerName) {
|
||||
int port = Settings.WEBSERVER_PORT.getNumber();
|
||||
String ip = getPlugin(Plan.class).getServer().getIp() + ":" + port;
|
||||
@ -60,4 +80,11 @@ public class HtmlUtils {
|
||||
String url = "http://" + ip + "/" + securityCode + "/player/" + playerName;
|
||||
return url;
|
||||
}
|
||||
|
||||
static String removeXSS(String string) {
|
||||
return string.replaceAll("<!--", "")
|
||||
.replaceAll("-->", "")
|
||||
.replaceAll("<script>", "")
|
||||
.replaceAll("</script>", "");
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public class PlaceholderUtils {
|
||||
replaceMap.put("%npday%", data.getNewPlayersDay() + "");
|
||||
replaceMap.put("%npweek%", data.getNewPlayersWeek() + "");
|
||||
replaceMap.put("%npmonth%", data.getNewPlayersMonth() + "");
|
||||
replaceMap.put("%commanduse%", data.getTop50CommandsListHtml());
|
||||
replaceMap.put("%commanduse%", HtmlUtils.removeXSS(data.getCommandUseListHtml()));
|
||||
replaceMap.put("%totalcommands%", data.getTotalCommands()+"");
|
||||
replaceMap.put("%avgage%", (data.getAverageAge() != -1) ? "" + data.getAverageAge() : Phrase.DEM_UNKNOWN + "");
|
||||
replaceMap.put("%avgplaytime%", FormatUtils.formatTimeAmount("" + data.getAveragePlayTime()));
|
||||
@ -98,6 +98,7 @@ public class PlaceholderUtils {
|
||||
replaceMap.put("%gmcolors%", "\"#" + Settings.HCOLOR_GMP_0 + "\",\"#" + Settings.HCOLOR_GMP_1
|
||||
+ "\",\"#" + Settings.HCOLOR_GMP_2 + "\",\"#" + Settings.HCOLOR_GMP_3 + "\"");
|
||||
replaceMap.putAll(plugin.getHookHandler().getAdditionalAnalysisReplaceRules());
|
||||
replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(data.getSessionAverage()+""));
|
||||
return replaceMap;
|
||||
}
|
||||
|
||||
@ -143,13 +144,9 @@ public class PlaceholderUtils {
|
||||
replaceMap.put("%gm1%", FormatUtils.formatTimeAmount("" + gmData[1]));
|
||||
replaceMap.put("%gm2%", FormatUtils.formatTimeAmount("" + gmData[2]));
|
||||
replaceMap.put("%gm3%", FormatUtils.formatTimeAmount("" + gmData[3]));
|
||||
replaceMap.put("%gmdata%", Arrays.toString(gmData));
|
||||
replaceMap.put("%gmlabels%", "[\"Survival\", \"Creative\", \"Adventure\", \"Spectator\"]");
|
||||
replaceMap.put("%gmcolors%", "\"#" + Settings.HCOLOR_GMP_0 + "\",\"#" + Settings.HCOLOR_GMP_1
|
||||
+ "\",\"#" + Settings.HCOLOR_GMP_2 + "\",\"#" + Settings.HCOLOR_GMP_3 + "\"");
|
||||
replaceMap.put("%gmtotal%", FormatUtils.formatTimeAmount("" + total));
|
||||
replaceMap.put("%ips%", (showIPandUUID ? data.getIps().toString() : Html.HIDDEN.parse()));
|
||||
replaceMap.put("%nicknames%", FormatUtils.swapColorsToSpan(data.getNicknames().toString()));
|
||||
replaceMap.put("%nicknames%", HtmlUtils.removeXSS(FormatUtils.swapColorsToSpan(data.getNicknames().toString())));
|
||||
replaceMap.put("%name%", data.getName());
|
||||
replaceMap.put("%registered%", FormatUtils.formatTimeStamp("" + data.getRegistered()));
|
||||
replaceMap.put("%timeskicked%", "" + data.getTimesKicked());
|
||||
@ -162,6 +159,7 @@ public class PlaceholderUtils {
|
||||
replaceMap.put("%playerkills%", data.getPlayerKills().size() + "");
|
||||
replaceMap.put("%mobkills%", data.getMobKills() + "");
|
||||
replaceMap.put("%sessionstable%", SortableSessionTableCreator.createSortedSessionDataTable10(data.getSessions()));
|
||||
replaceMap.put("%sessionaverage%", FormatUtils.formatTimeAmount(AnalysisUtils.average(AnalysisUtils.transformSessionDataToLengths(data.getSessions()))+""));
|
||||
replaceMap.put("%killstable%", SortableKillsTableCreator.createSortedSessionDataTable10(data.getPlayerKills()));
|
||||
Plan plugin = getPlugin(Plan.class);
|
||||
replaceMap.put("%version%", plugin.getDescription().getVersion());
|
||||
@ -171,6 +169,10 @@ public class PlaceholderUtils {
|
||||
replaceMap.put("%labelsweek%", playersDataArray[1]);
|
||||
replaceMap.put("%playersgraphcolor%", Settings.HCOLOR_ACT_ONL + "");
|
||||
replaceMap.put("%playersgraphfill%", Settings.HCOLOR_ACT_ONL_FILL + "");
|
||||
replaceMap.put("%gm0col%", Settings.HCOLOR_GMP_0+"");
|
||||
replaceMap.put("%gm1col%", Settings.HCOLOR_GMP_1+"");
|
||||
replaceMap.put("%gm2col%", Settings.HCOLOR_GMP_2+"");
|
||||
replaceMap.put("%gm3col%", Settings.HCOLOR_GMP_3+"");
|
||||
replaceMap.put("%inaccuratedatawarning%", (new Date().getTime() - data.getRegistered() < 180000) ? Html.WARN_INACCURATE.parse() : "");
|
||||
replaceMap.putAll(plugin.getHookHandler().getAdditionalInspectReplaceRules(uuid));
|
||||
return replaceMap;
|
||||
|
@ -27,6 +27,11 @@ public class MapComparator {
|
||||
return sortedList;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param hashMap
|
||||
* @return
|
||||
*/
|
||||
public static List<String[]> sortByValueLong(HashMap<String, Long> hashMap) {
|
||||
List<String[]> sortedList = new ArrayList<>();
|
||||
hashMap.keySet().stream().forEach((key) -> {
|
||||
|
@ -200,7 +200,7 @@
|
||||
<div class="clearfix">
|
||||
<div id="navLinks">
|
||||
<ul>
|
||||
<li class="itemLinks" data-pos="0px"><i class="fa fa-info" aria-hidden="true"></i> Information</li>
|
||||
<li class="itemLinks" data-pos="0px"><i class="fa fa-info-circle" aria-hidden="true"></i> Information</li>
|
||||
<li class="itemLinks" data-pos="-25%"><i class="fa fa-bar-chart" aria-hidden="true"></i> Online Activity</li>
|
||||
<li class="itemLinks" data-pos="-50%"><i class="fa fa-list-alt" aria-hidden="true"></i> Playerlist</li>
|
||||
<li class="itemLinks" data-pos="-75%"><i class="fa fa-terminal" aria-hidden="true"></i> Command usage</li>
|
||||
@ -228,9 +228,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<canvas id="playerChartDay" width="1000" height="350" style="width: 95%;"></canvas>
|
||||
<div class="buttons">
|
||||
<p><b>Most recent logins</b>: %recentlogins%</p>
|
||||
<canvas id="playerChartDay" width="1000" height="350" style="width: 95%;"></canvas><br/>
|
||||
<p class="header-label" style="color: #267F00; "><i class="fa fa-calendar-check-o" aria-hidden="true"></i><span class="header-text"> Recent Logins</span></p>
|
||||
<div class="buttons">
|
||||
%recentlogins%
|
||||
</div>
|
||||
%towntable%<br/>
|
||||
%factionstable%
|
||||
@ -238,7 +239,7 @@
|
||||
<div class="column" style="width: 40%;">
|
||||
<div class="headerbox">
|
||||
<div class="header-icon">
|
||||
<div class="header-label"><i class="fa fa-info" aria-hidden="true"></i><span class="header-text"> Information</span></div>
|
||||
<div class="header-label"><i class="fa fa-info-circle" aria-hidden="true"></i><span class="header-text"> Information</span></div>
|
||||
</div>
|
||||
<div class="infobox" style="float: right;">
|
||||
<div class="info-icon">
|
||||
@ -254,11 +255,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>A Total of %totalplaytime% has been played with the average of %avgplaytime%<br/>
|
||||
Players have joined %totallogins% times.<br/>
|
||||
Players have died %deaths% times, of which %playerkills% were caused by another Player.<br/>
|
||||
A Total of %mobkills% mobs have been slain.<br/>
|
||||
The average of known player ages is %avgage%.
|
||||
<p><i class="fa fa-clock-o" aria-hidden="true"></i> Total Playtime: %totalplaytime% | <i class="fa fa-clock-o" aria-hidden="true"></i> Player Average: %avgplaytime%<br/>
|
||||
<i class="fa fa-clock-o" aria-hidden="true"></i> Average Session Length: %sessionaverage%<br/>
|
||||
<i class="fa fa-calendar-plus-o" aria-hidden="true"></i> Total Login times: %totallogins%<br/>
|
||||
<b><i class="fa fa-crosshairs" aria-hidden="true"></i></b> Player kills: %playerkills% | <i class="fa fa-crosshairs" aria-hidden="true"></i> Mob kills: %mobkills% | <i class="fa fa-meh-o" aria-hidden="true"></i> Deaths: %deaths%<br/>
|
||||
|
||||
%essentialswarps%</p>
|
||||
<p class="header-label" style="color: #267F00; "><i class="fa fa-pie-chart" aria-hidden="true"></i><span class="header-text"> Gamemode Usage</span></p><br/>
|
||||
<div class="box-area">
|
||||
@ -451,9 +452,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div><br/>
|
||||
<canvas id="activityPie" width="1000" height="600" style="width: 95%;"></canvas>
|
||||
<canvas id="activityPie" width="1000" height="600" style="width: 95%;"></canvas><br/>
|
||||
<p class="header-label" style="color: #267F00; "><i class="fa fa-calendar-check-o" aria-hidden="true"></i><span class="header-text"> Recent Logins</span></p>
|
||||
<div class="buttons">
|
||||
<p><b>Most recent logins</b>: %recentlogins%</p>
|
||||
%recentlogins%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -507,7 +509,7 @@
|
||||
%totalcommands%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Commands
|
||||
Unique
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -7,6 +7,10 @@ Settings:
|
||||
LogProgressOnConsole: false
|
||||
MinutesPlayedUntilConsidiredActive: 10
|
||||
Cache:
|
||||
Processing:
|
||||
GetLimit: 2000
|
||||
SaveLimit: 1000
|
||||
ClearLimit: 1000
|
||||
AnalysisCache:
|
||||
RefreshAnalysisCacheOnEnable: true
|
||||
RefreshEveryXMinutes: -1
|
||||
|
@ -6,6 +6,7 @@
|
||||
<meta name="description" content="Player inspect window">
|
||||
<meta name="author" content="Rsl1122">
|
||||
<link rel="icon" href="https://puu.sh/tK0KL/6aa2ba141b.ico" type="image/x-icon" />
|
||||
<script src="https://use.fontawesome.com/df48eb908b.js"></script>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
@ -65,6 +66,59 @@
|
||||
table.sortable th:not(.sorttable_sorted):not(.sorttable_sorted_reverse):not(.sorttable_nosort):after {
|
||||
content: " \25B4\25BE"
|
||||
}
|
||||
.box-area {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
.infobox {
|
||||
color: white;
|
||||
display: inline-block;
|
||||
background-color: #267F00;
|
||||
padding: 8px 14px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.info-text {
|
||||
float: right;
|
||||
width: 80%;
|
||||
text-align: right;
|
||||
}
|
||||
.info-number {
|
||||
font-size: x-large;
|
||||
float: right;
|
||||
}
|
||||
.info-label {
|
||||
float: right;
|
||||
font-size: medium;
|
||||
}
|
||||
.info-icon {
|
||||
font-size: xx-large;
|
||||
float: left;
|
||||
width: 10%;
|
||||
}
|
||||
.headerbox {
|
||||
color: #267F00;
|
||||
display: inline-block;
|
||||
border-style: solid;
|
||||
border-color: #267F00;
|
||||
padding: 8px 14px;
|
||||
border-radius: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
.header-icon {
|
||||
font-size: xx-large;
|
||||
float: left;
|
||||
width: 40%;
|
||||
}
|
||||
.header-text {
|
||||
font-size: x-large;
|
||||
}
|
||||
.header-label {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
.black {
|
||||
color: #000000;
|
||||
}
|
||||
@ -121,33 +175,179 @@
|
||||
<img style="float: right; padding: 5px" src="http://puu.sh/tJZUb/c2e0ab220f.png" alt="Player Analytics | Inspect %name%">
|
||||
<p style="float: right; text-align: right;">Player Analytics v.%version%</p>
|
||||
<h1>Plan | Inspect Player %name%</h1>
|
||||
<h4>Registered: %registered% %banned%%op%</h4>
|
||||
<h4>Has Connected from ips: %ips%</h4>
|
||||
</header>
|
||||
<div class="clearfix">
|
||||
%inaccuratedatawarning%
|
||||
%inaccuratedatawarning%
|
||||
<div style="opacity: 0;">
|
||||
<ul>
|
||||
<li></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
<div class="column info">
|
||||
<h4>Information</h4> <img style="float: right; padding: 5px" alt="%name%" src="http://cravatar.eu/head/%name%/128.png">
|
||||
<p>Last seen: %lastseen% %active% %isonline% %essentials%<br/>
|
||||
Nicknames: %nicknames% | Has connected from ips: %ips%<br/>
|
||||
Geolocation: %geoloc%<br/>
|
||||
Playtime: %playtime%<br/>
|
||||
Has logged in %logintimes% times. | Has been kicked %timeskicked% times.<br/>
|
||||
Age: %age% | Gender: %gender%<br/>
|
||||
Player kills: %playerkills% | Mob kills: %mobkills% | Deaths: %deaths%<br/>
|
||||
UUID: %uuid%
|
||||
%achievements%%votes%%faction%%town%</p>
|
||||
<h4>Last 10 Play Sessions</h4>
|
||||
%sessionstable%
|
||||
<h4>Last 10 Player Kills</h4>
|
||||
%killstable%
|
||||
<div class="headerbox">
|
||||
<div class="header-icon">
|
||||
<div class="header-label"><i class="fa fa-info-circle" aria-hidden="true"></i><span class="header-text"> Information</span></div>
|
||||
</div>
|
||||
<div class="infobox" style="float: right;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-user-plus" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%registered%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Registered
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<img style="float: right; padding: 5px" alt="%name%" src="http://cravatar.eu/head/%name%/128.png">
|
||||
<p><i class="fa fa-user" aria-hidden="true"></i> %active% %isonline% %essentials% %banned%%op%<br/>
|
||||
<i class="fa fa-address-card-o" aria-hidden="true"></i> Nicknames: %nicknames%<br/>
|
||||
<i class="fa fa-clock-o" aria-hidden="true"></i> Playtime: %playtime%<br/>
|
||||
<i class="fa fa-calendar-plus-o" aria-hidden="true"></i> Login times %logintimes%<br/>
|
||||
<i class="fa fa-gavel" aria-hidden="true"></i> Times kicked %timeskicked%<br/>
|
||||
<i class="fa fa-crosshairs" aria-hidden="true"></i> Player kills: %playerkills% | <i class="fa fa-crosshairs" aria-hidden="true"></i> Mob kills: %mobkills% | <i class="fa fa-meh-o" aria-hidden="true"></i> Deaths: %deaths%<br/>
|
||||
<br/>
|
||||
<i class="fa fa-globe" aria-hidden="true"></i> Geolocation: %geoloc%<br/>
|
||||
<i class="fa fa-play" aria-hidden="true"></i> Age: %age% | <i class="fa fa-male" aria-hidden="true"></i><i class="fa fa-female" aria-hidden="true"></i> Gender: %gender%<br/>
|
||||
<i class="fa fa-tag" aria-hidden="true"></i> UUID: %uuid%<br/>
|
||||
%achievements%%votes%%faction%%town%</p>
|
||||
<div class="headerbox">
|
||||
<div class="header-icon" style="width: 50%">
|
||||
<div class="header-label"><i class="fa fa-pie-chart" aria-hidden="true"></i><span class="header-text"> Gamemode Usage</span></div>
|
||||
</div>
|
||||
<div class="infobox" style="float: right;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-clock-o" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%gmtotal%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Total
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-area">
|
||||
<div class="infobox" style="background-color: #%gm0col%; width: 23%;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-fire" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%gm0%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Survival
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="infobox" style="background-color: #%gm1col%; width: 23%;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-cube" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%gm1%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Creative
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="infobox" style="background-color: #%gm2col%; width: 23%;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-chevron-right" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%gm2%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Adventure
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="infobox" style="background-color: #%gm3col%; width: 23%;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-binoculars" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%gm3%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Spectator
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column graphs">
|
||||
<h4>Player Activity | Last 7 days</h4>
|
||||
<div class="headerbox">
|
||||
<div class="header-icon">
|
||||
<div class="header-label"><i class="fa fa-bar-chart" aria-hidden="true"></i><span class="header-text"> Player Activity<br/>Last 7d</span></div>
|
||||
</div>
|
||||
<div class="infobox" style="float: right;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-calendar-check-o" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%lastseen%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Last seen
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<canvas id="playerChartWeek" width="1000" height="350" style="width: 95%;"></canvas>
|
||||
<h4>Gamemode Usage - Total: %gmtotal%</h4>
|
||||
<p>Survival: %gm0% | Creative: %gm1% | Adventure: %gm2% | Spectator: %gm3%</p>
|
||||
<canvas id="gmPie" width="1000" height="600" style="width: 95%;"></canvas>
|
||||
<br/>
|
||||
<div class="headerbox">
|
||||
<div class="header-icon">
|
||||
<div class="header-label"><i class="fa fa-list" aria-hidden="true"></i><span class="header-text"> Last 10 Sessions</span></div>
|
||||
</div>
|
||||
<div class="infobox" style="float: right;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-clock-o" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%sessionaverage%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Average Length
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><br/>
|
||||
%sessionstable%
|
||||
<br/>
|
||||
<div class="headerbox">
|
||||
<div class="header-icon">
|
||||
<div class="header-label"><i class="fa fa-crosshairs" aria-hidden="true"></i><span class="header-text"> Last 10 Kills</span></div>
|
||||
</div>
|
||||
<div class="infobox" style="float: right;">
|
||||
<div class="info-icon">
|
||||
<i class="fa fa-crosshairs" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="info-text">
|
||||
<div class="info-number">
|
||||
%playerkills%
|
||||
</div>
|
||||
<div class="info-label">
|
||||
Player Kills
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><br/>
|
||||
%killstable%
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -156,30 +356,7 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.js"></script>
|
||||
<script>
|
||||
// Script for All charts using Chart.js
|
||||
var ctxgmpie = document.getElementById("gmPie");
|
||||
var ctxweek = document.getElementById("playerChartWeek");
|
||||
var dataGmPie = {
|
||||
labels: %gmlabels% ,
|
||||
datasets: [
|
||||
{
|
||||
data: %gmdata% ,
|
||||
backgroundColor: [ %gmcolors% ],
|
||||
hoverBackgroundColor: [ %gmcolors% ]
|
||||
}
|
||||
]
|
||||
}
|
||||
var GMPie = new Chart(ctxgmpie, {
|
||||
type: 'doughnut',
|
||||
data: dataGmPie,
|
||||
options: {
|
||||
legend: {
|
||||
position: 'right',
|
||||
labels: {
|
||||
padding: 7
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var ctxweek = document.getElementById("playerChartWeek");
|
||||
var dataweek = {
|
||||
labels: %labelsweek% ,
|
||||
datasets: [
|
||||
|
Loading…
Reference in New Issue
Block a user