mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-03 05:51:28 +01:00
commit
2b6b27b1e3
@ -172,7 +172,7 @@ public class Plan extends BukkitPlugin<Plan> implements IPlan {
|
||||
|
||||
webServer.initServer();
|
||||
if (!webServer.isEnabled()) {
|
||||
Log.error("WebServer was not successfully initialized.");
|
||||
Log.error("WebServer was not successfully initialized. Is the port (" + Settings.WEBSERVER_PORT.getNumber() + ") in use?");
|
||||
}
|
||||
|
||||
Benchmark.stop("Enable", "WebServer Initialization");
|
||||
@ -189,8 +189,7 @@ public class Plan extends BukkitPlugin<Plan> implements IPlan {
|
||||
Log.infoColor(Locale.get(Msg.ENABLE_NOTIFY_EMPTY_IP).toString());
|
||||
}
|
||||
if (usingBungeeWebServer && usingAlternativeIP) {
|
||||
// TODO Move to Locale
|
||||
Log.info("Make sure that the alternative IP points to Bungee Server: " + Settings.ALTERNATIVE_IP.toString());
|
||||
Log.info("Make sure that the alternative IP points to the Bukkit Server: " + Settings.ALTERNATIVE_IP.toString());
|
||||
}
|
||||
|
||||
registerCommand(new PlanCommand(this));
|
||||
|
@ -24,6 +24,7 @@ public enum Settings {
|
||||
COMBINE_COMMAND_ALIASES("Data.Commands.CombineCommandAliases"),
|
||||
WRITE_NEW_LOCALE("Plugin.WriteNewLocaleFileOnStart"),
|
||||
DEV_MODE("Plugin.Dev"),
|
||||
USE_SERVER_TIME("Customization.UseServerTime"),
|
||||
|
||||
// Integer
|
||||
WEBSERVER_PORT("WebServer.Port"),
|
||||
|
@ -81,7 +81,8 @@ public class API {
|
||||
* @return ./player/PlayerName
|
||||
*/
|
||||
public String getPlayerInspectPageLink(String name) {
|
||||
return "../player/" + name;
|
||||
String link = "../player/" + name;
|
||||
return link.replace(" ", "%20").replace(".", "%2E");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -154,6 +155,7 @@ public class API {
|
||||
* Check if the data is cached to AnalysisCache before calling this.
|
||||
*
|
||||
* @return server.html with all placeholders replaced.
|
||||
* @throws NullPointerException if AnalysisData has not been cached.
|
||||
*/
|
||||
public String getAnalysisHtmlAsString() {
|
||||
return plugin.getInfoManager().getAnalysisHtml();
|
||||
|
@ -50,11 +50,18 @@ public class ManageSetupCommand extends SubCommand {
|
||||
if (!Check.isTrue(args.length >= 1, Locale.get(Msg.CMD_FAIL_REQ_ONE_ARG).toString(), sender)) {
|
||||
return true;
|
||||
}
|
||||
if (plugin.getWebServer().isEnabled()) {
|
||||
sender.sendMessage("§cWebServer is not enabled on this server! Make sure it enables on boot!");
|
||||
return true;
|
||||
}
|
||||
String address = args[0].toLowerCase();
|
||||
if (address.endsWith("/")) {
|
||||
address = address.substring(0, address.length() - 1);
|
||||
}
|
||||
try {
|
||||
plugin.getWebServer().getWebAPI().getAPI(PingWebAPI.class).sendRequest(address);
|
||||
plugin.getWebServer().getWebAPI().getAPI(RequestSetupWebAPI.class).sendRequest(address);
|
||||
sender.sendMessage("§aConnection successful, Plan may restart in a few seconds.");
|
||||
sender.sendMessage("§eConnection successful, Plan may restart in a few seconds, if it doesn't something has gone wrong.");
|
||||
} catch (WebAPIException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
sender.sendMessage("§cConnection to Bungee WebServer failed: More info on console");
|
||||
|
@ -144,7 +144,7 @@ public class ActivityPart extends RawData {
|
||||
}
|
||||
|
||||
public Map<Long, Integer> getPlayersOnline() {
|
||||
return tpsPart.getTpsData().stream().collect(Collectors.toMap(TPS::getDate, TPS::getPlayers));
|
||||
return tpsPart.getTpsData().stream().distinct().collect(Collectors.toMap(TPS::getDate, TPS::getPlayers));
|
||||
}
|
||||
|
||||
public List<String> getRecentPlayers() {
|
||||
|
@ -84,12 +84,15 @@ public class UserInfoTable extends UserIDTable {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(Select.from(tableName, columnUserID)
|
||||
statement = connection.prepareStatement(Select.from(tableName, "COUNT(" + columnUserID + ") as c")
|
||||
.where(columnUserID + "=" + usersTable.statementSelectID)
|
||||
.toString());
|
||||
statement.setString(1, uuid.toString());
|
||||
set = statement.executeQuery();
|
||||
return set.next();
|
||||
if (set.next()) {
|
||||
return set.getInt("c") >= 1;
|
||||
}
|
||||
return false;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
@ -161,7 +164,7 @@ public class UserInfoTable extends UserIDTable {
|
||||
public List<UserInfo> getServerUserInfo(UUID serverUUID) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()){
|
||||
try (Connection connection = getConnection()) {
|
||||
List<UserInfo> userInfo = new ArrayList<>();
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
@ -199,7 +202,7 @@ public class UserInfoTable extends UserIDTable {
|
||||
public Map<UUID, List<UserInfo>> getAllUserInfo() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()){
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String serverIDColumn = serverTable + "." + serverTable.getColumnID();
|
||||
@ -242,7 +245,7 @@ public class UserInfoTable extends UserIDTable {
|
||||
return;
|
||||
}
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()){
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement("INSERT INTO " + tableName + " (" +
|
||||
columnUserID + ", " +
|
||||
columnRegistered + ", " +
|
||||
@ -278,7 +281,7 @@ public class UserInfoTable extends UserIDTable {
|
||||
public Map<UUID, Set<UUID>> getSavedUUIDs() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()){
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String serverIDColumn = serverTable + "." + serverTable.getColumnID();
|
||||
|
@ -180,12 +180,15 @@ public class UsersTable extends UserIDTable {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(Select.from(tableName, columnID)
|
||||
statement = connection.prepareStatement(Select.from(tableName, "COUNT(" + columnID + ") as c")
|
||||
.where(columnUUID + "=?")
|
||||
.toString());
|
||||
statement.setString(1, uuid.toString());
|
||||
set = statement.executeQuery();
|
||||
return set.next();
|
||||
if (set.next()) {
|
||||
return set.getInt("c") >= 1;
|
||||
}
|
||||
return false;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
@ -423,7 +426,7 @@ public class UsersTable extends UserIDTable {
|
||||
public int getPlayerCount() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()){
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement("SELECT COUNT(*) AS player_count FROM " + tableName);
|
||||
statement.setFetchSize(5000);
|
||||
|
||||
@ -436,4 +439,20 @@ public class UsersTable extends UserIDTable {
|
||||
close(set, statement);
|
||||
}
|
||||
}
|
||||
|
||||
public Optional<Long> getRegisterDate(UUID uuid) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(Select.from(tableName, columnRegistered).where(columnUUID + "=?").toString());
|
||||
statement.setString(1, uuid.toString());
|
||||
set = statement.executeQuery();
|
||||
if (set.next()) {
|
||||
Optional.of(set.getLong(columnRegistered));
|
||||
}
|
||||
return Optional.empty();
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -173,6 +173,9 @@ public class BukkitInformationManager extends InformationManager {
|
||||
|
||||
@Override
|
||||
public boolean isAnalysisCached(UUID serverUUID) {
|
||||
if (Plan.getServerUUID().equals(serverUUID)) {
|
||||
return analysisData != null;
|
||||
}
|
||||
if (usingAnotherWebServer) {
|
||||
try {
|
||||
return getWebAPI().getAPI(IsCachedWebAPI.class).isAnalysisCached(webServerAddress, serverUUID);
|
||||
@ -188,8 +191,17 @@ public class BukkitInformationManager extends InformationManager {
|
||||
return plugin.getWebServer().getWebAPI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML for analysis page of this server.
|
||||
*
|
||||
* @return Html for Analysis page
|
||||
* @throws NullPointerException if AnalysisData has not been cached.
|
||||
*/
|
||||
@Override
|
||||
public String getAnalysisHtml() {
|
||||
if (analysisData == null) {
|
||||
throw new NullPointerException("Analysis Data has not been cached.");
|
||||
}
|
||||
try {
|
||||
return Theme.replaceColors(new AnalysisPageParser(analysisData, plugin).parse());
|
||||
} catch (ParseException e) {
|
||||
@ -229,15 +241,19 @@ public class BukkitInformationManager extends InformationManager {
|
||||
}
|
||||
|
||||
private void cacheAnalysisHtml() {
|
||||
cacheAnalysisHtml(getAnalysisHtml());
|
||||
}
|
||||
|
||||
public void cacheAnalysisHtml(String html) {
|
||||
if (usingAnotherWebServer) {
|
||||
try {
|
||||
getWebAPI().getAPI(PostHtmlWebAPI.class).sendAnalysisHtml(webServerAddress, getAnalysisHtml());
|
||||
getWebAPI().getAPI(PostHtmlWebAPI.class).sendAnalysisHtml(webServerAddress, html);
|
||||
} catch (WebAPIException e) {
|
||||
attemptConnection();
|
||||
cacheAnalysisHtml();
|
||||
}
|
||||
} else {
|
||||
PageCache.cachePage("analysisPage:" + Plan.getServerUUID(), () -> new AnalysisPageResponse(this));
|
||||
PageCache.cachePage("analysisPage:" + Plan.getServerUUID(), () -> new AnalysisPageResponse(html));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@ import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.UserInfo;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.tables.SessionsTable;
|
||||
import main.java.com.djrapitops.plan.database.tables.UsersTable;
|
||||
import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
@ -30,10 +31,7 @@ import main.java.com.djrapitops.plan.utilities.html.graphs.ServerPreferencePieCr
|
||||
import main.java.com.djrapitops.plan.utilities.html.graphs.WorldPieCreator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.tables.ActionsTableCreator;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -60,18 +58,21 @@ public class InspectPageParser extends PageParser {
|
||||
SessionsTable sessionsTable = db.getSessionsTable();
|
||||
|
||||
UserInfo userInfo = db.getUserInfoTable().getUserInfo(uuid);
|
||||
int timesKicked = db.getUsersTable().getTimesKicked(uuid);
|
||||
UsersTable usersTable = db.getUsersTable();
|
||||
String playerName = usersTable.getPlayerName(uuid);
|
||||
Optional<Long> registerDate = usersTable.getRegisterDate(uuid);
|
||||
if (registerDate.isPresent()) {
|
||||
addValue("registered", FormatUtils.formatTimeStampYear(registerDate.get()));
|
||||
} else {
|
||||
addValue("registered", "-");
|
||||
}
|
||||
|
||||
addValue("playerName", playerName);
|
||||
int timesKicked = usersTable.getTimesKicked(uuid);
|
||||
|
||||
addValue("version", MiscUtils.getPlanVersion());
|
||||
addValue("timeZone", MiscUtils.getTimeZoneOffsetHours());
|
||||
|
||||
if (userInfo != null) {
|
||||
addValue("playerName", userInfo.getName());
|
||||
addValue("registered", FormatUtils.formatTimeStampYear(userInfo.getRegistered()));
|
||||
} else {
|
||||
addValue("playerName", "Error occurred.");
|
||||
addValue("registered", "Error occurred.");
|
||||
}
|
||||
long lastSeen = sessionsTable.getLastSeen(uuid);
|
||||
if (lastSeen != 0) {
|
||||
addValue("lastSeen", FormatUtils.formatTimeStampYear(lastSeen));
|
||||
@ -177,7 +178,13 @@ public class InspectPageParser extends PageParser {
|
||||
addValue("mobKillCount", mobKillCount);
|
||||
addValue("deathCount", deathCount);
|
||||
|
||||
playerClassification(userInfo, lastSeen, playTime, sessionCount);
|
||||
boolean isActive = AnalysisUtils.isActive(MiscUtils.getTime(), lastSeen, playTime, sessionCount);
|
||||
String active = isActive ? "Active" : "Inactive";
|
||||
if (userInfo != null) {
|
||||
playerClassification(userInfo, active);
|
||||
} else {
|
||||
addValue("playerClassification", active);
|
||||
}
|
||||
|
||||
return HtmlUtils.replacePlaceholders(FileUtil.getStringFromResource("player.html"), placeHolders);
|
||||
} catch (Exception e) {
|
||||
@ -186,12 +193,10 @@ public class InspectPageParser extends PageParser {
|
||||
}
|
||||
}
|
||||
|
||||
private void playerClassification(UserInfo userInfo, long lastPlayed, long playTime, int loginTimes) {
|
||||
private void playerClassification(UserInfo userInfo, String active) {
|
||||
boolean isBanned = userInfo.isBanned();
|
||||
boolean isOP = userInfo.isOpped();
|
||||
boolean isActive = AnalysisUtils.isActive(MiscUtils.getTime(), lastPlayed, playTime, loginTimes);
|
||||
|
||||
String active = isActive ? "Active" : "Inactive";
|
||||
String banned = isBanned ? "Banned" : "";
|
||||
String op = isOP ? "Operator (OP)" : "";
|
||||
|
||||
|
@ -98,6 +98,7 @@ public class BungeeServerInfoManager {
|
||||
connectedToServer(server);
|
||||
return true;
|
||||
} catch (WebAPIException e) {
|
||||
Log.debug(e.toString());
|
||||
serverHasGoneOffline(server.getUuid());
|
||||
return false;
|
||||
}
|
||||
|
@ -52,7 +52,11 @@ public class PlanCommandPreprocessListener implements Listener {
|
||||
if (!logUnknownCommands || combineCommandAliases) {
|
||||
Command command = plugin.getServer().getPluginCommand(commandName);
|
||||
if (command == null) {
|
||||
command = plugin.getServer().getCommandMap().getCommand(commandName);
|
||||
try {
|
||||
command = plugin.getServer().getCommandMap().getCommand(commandName);
|
||||
} catch (NoSuchMethodError ignored) {
|
||||
/* Ignored, Bukkit 1.8 has no such method */
|
||||
}
|
||||
}
|
||||
if (command == null) {
|
||||
if (!logUnknownCommands) {
|
||||
|
@ -42,7 +42,11 @@ public abstract class Consumer<T> extends AbsRunnable {
|
||||
|
||||
protected void stop() {
|
||||
run = false;
|
||||
super.cancel();
|
||||
try {
|
||||
super.cancel();
|
||||
} catch (NullPointerException ignore) {
|
||||
/*ignored*/
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void clearVariables();
|
||||
|
@ -191,11 +191,6 @@ public class ResponseHandler extends APIResponseHandler {
|
||||
}
|
||||
|
||||
private Response serverResponse(UUID serverUUID) {
|
||||
if (!plugin.getInfoManager().isAnalysisCached(serverUUID)) {
|
||||
String error = "Analysis Data was not cached.<br>Use /plan analyze to cache the Data.";
|
||||
PageCache.loadPage("notFound: " + error, () -> new NotFoundResponse(error));
|
||||
}
|
||||
|
||||
return PageCache.loadPage("analysisPage:" + serverUUID, () -> new AnalysisPageResponse(plugin.getInfoManager()));
|
||||
}
|
||||
|
||||
|
@ -187,6 +187,7 @@ public class WebServer {
|
||||
if (server != null) {
|
||||
server.stop(0);
|
||||
}
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
public String getProtocol() {
|
||||
|
@ -1,7 +1,10 @@
|
||||
package main.java.com.djrapitops.plan.systems.webserver.response;
|
||||
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.AnalysisData;
|
||||
import main.java.com.djrapitops.plan.systems.info.BukkitInformationManager;
|
||||
import main.java.com.djrapitops.plan.systems.info.InformationManager;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.theme.Theme;
|
||||
|
||||
/**
|
||||
* @author Rsl1122
|
||||
@ -9,13 +12,37 @@ import main.java.com.djrapitops.plan.systems.webserver.theme.Theme;
|
||||
*/
|
||||
public class AnalysisPageResponse extends Response {
|
||||
|
||||
/**
|
||||
* @param informationManager
|
||||
* @throws NullPointerException if AnalysisData has not been cached after 1 second.
|
||||
*/
|
||||
public AnalysisPageResponse(InformationManager informationManager) {
|
||||
super.setHeader("HTTP/1.1 200 OK");
|
||||
|
||||
if (informationManager instanceof BukkitInformationManager) {
|
||||
AnalysisData analysisData = ((BukkitInformationManager) informationManager).getAnalysisData();
|
||||
if (analysisData == null) {
|
||||
Plan.getInstance().getRunnableFactory().createNew("OnRequestAnalysisRefreshTask", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
informationManager.refreshAnalysis(Plan.getServerUUID());
|
||||
}
|
||||
}).runTaskAsynchronously();
|
||||
|
||||
ErrorResponse analysisRefreshPage = new ErrorResponse();
|
||||
analysisRefreshPage.setTitle("Analysis is being refreshed..");
|
||||
analysisRefreshPage.setParagraph("<i class=\"fa fa-refresh fa-spin\" aria-hidden=\"true\"></i> Analysis is being run, refresh the page after a few seconds.. (F5)");
|
||||
analysisRefreshPage.replacePlaceholders();
|
||||
super.setContent(analysisRefreshPage.getContent());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
super.setContent(informationManager.getAnalysisHtml());
|
||||
}
|
||||
|
||||
public AnalysisPageResponse(String html) {
|
||||
super.setHeader("HTTP/1.1 200 OK");
|
||||
super.setContent(Theme.replaceColors(html));
|
||||
super.setContent(html);
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ public class ErrorResponse extends Response {
|
||||
}
|
||||
}
|
||||
|
||||
protected void replacePlaceholders() {
|
||||
public void replacePlaceholders() {
|
||||
Map<String, String> placeHolders = new HashMap<>();
|
||||
placeHolders.put("title", title);
|
||||
placeHolders.put("paragraph", paragraph);
|
||||
|
@ -1,12 +1,12 @@
|
||||
package main.java.com.djrapitops.plan.systems.webserver.response;
|
||||
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.theme.Theme;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.file.FileUtil;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
import org.apache.commons.lang3.text.StrSubstitutor;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
@ -43,7 +43,7 @@ public class PlayersPageResponse extends Response {
|
||||
|
||||
int i = 1;
|
||||
for (String name : names) {
|
||||
String link = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name);
|
||||
String link = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(name), name);
|
||||
|
||||
html.append("<td>").append(link).append("</td>");
|
||||
|
||||
|
@ -4,10 +4,7 @@ import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.command.CommandUtils;
|
||||
import com.djrapitops.plugin.command.ISender;
|
||||
import com.djrapitops.plugin.utilities.Compatibility;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.PlanBungee;
|
||||
import main.java.com.djrapitops.plan.*;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.locale.Locale;
|
||||
@ -44,7 +41,10 @@ public class MiscUtils {
|
||||
}
|
||||
|
||||
public static int getTimeZoneOffsetHours() {
|
||||
return TimeZone.getDefault().getOffset(MiscUtils.getTime()) / (int) TimeAmount.HOUR.ms();
|
||||
if (Settings.USE_SERVER_TIME.isTrue()) {
|
||||
return -TimeZone.getDefault().getOffset(MiscUtils.getTime()) / (int) TimeAmount.HOUR.ms();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -17,6 +17,8 @@ import main.java.com.djrapitops.plan.locale.Locale;
|
||||
import main.java.com.djrapitops.plan.locale.Msg;
|
||||
import main.java.com.djrapitops.plan.systems.info.BukkitInformationManager;
|
||||
import main.java.com.djrapitops.plan.systems.info.InformationManager;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.response.ErrorResponse;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.response.InternalErrorResponse;
|
||||
import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.UserInfoLastPlayedComparator;
|
||||
@ -63,6 +65,11 @@ public class Analysis {
|
||||
plugin.getRunnableFactory().createNew(new AbsRunnable("AnalysisTask") {
|
||||
@Override
|
||||
public void run() {
|
||||
ErrorResponse analysisRefreshPage = new ErrorResponse();
|
||||
analysisRefreshPage.setTitle("Analysis is being refreshed..");
|
||||
analysisRefreshPage.setParagraph("<meta http-equiv=\"refresh\" content=\"25\" /><i class=\"fa fa-refresh fa-spin\" aria-hidden=\"true\"></i> Analysis is being run, refresh the page after a few seconds.. (F5)");
|
||||
analysisRefreshPage.replacePlaceholders();
|
||||
((BukkitInformationManager) plugin.getInfoManager()).cacheAnalysisHtml(analysisRefreshPage.getContent());
|
||||
taskId = this.getTaskId();
|
||||
analyze(infoManager, plugin.getDB());
|
||||
taskId = -1;
|
||||
@ -127,6 +134,7 @@ public class Analysis {
|
||||
// ExportUtility.export(analysisData, rawData);
|
||||
} catch (Exception e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
((BukkitInformationManager) plugin.getInfoManager()).cacheAnalysisHtml(new InternalErrorResponse(e, "Analysis").getContent());
|
||||
Log.debug("Analysis", "Error: " + e);
|
||||
Log.logDebug("Analysis");
|
||||
return false;
|
||||
@ -238,7 +246,7 @@ public class Analysis {
|
||||
tpsPart.addTpsData(tpsData);
|
||||
Log.debug("Analysis", "TPS Data Size: " + tpsData.size());
|
||||
|
||||
List<UserInfo> userInfo = db.getUserInfoTable().getServerUserInfo();
|
||||
List<UserInfo> userInfo = db.getUserInfoTable().getServerUserInfo().stream().distinct().collect(Collectors.toList());
|
||||
|
||||
for (UserInfo user : userInfo) {
|
||||
if (user.isBanned()) {
|
||||
|
@ -62,8 +62,8 @@ public class HtmlStructure {
|
||||
public static String createServerOverviewColumn(Map<String, List<Session>> sessions) {
|
||||
StringBuilder builder = new StringBuilder("<div class=\"column\">");
|
||||
if (Verify.isEmpty(sessions)) {
|
||||
return "<div class=\"box-header\"><h2><i class=\"fa fa-server\" aria-hidden=\"true\"></i> No Sessions</h2> </div>" +
|
||||
"<div class=\"box\" style=\"margin-bottom: 5px;\"><p>No sessions to calculate server specific playtime.</p></div>";
|
||||
return "<div class=\"column\"><div class=\"box-header\"><h2><i class=\"fa fa-server\" aria-hidden=\"true\"></i> No Sessions</h2> </div>" +
|
||||
"<div class=\"box\" style=\"margin-bottom: 5px;\"><p>No sessions to calculate server specific playtime.</p></div></div>";
|
||||
}
|
||||
for (Map.Entry<String, List<Session>> entry : sessions.entrySet()) {
|
||||
String serverName = entry.getKey();
|
||||
@ -409,7 +409,6 @@ public class HtmlStructure {
|
||||
int online = plugin.getServer().getOnlinePlayers().size();
|
||||
Optional<Long> analysisRefreshDate = ((BukkitInformationManager) plugin.getInfoManager()).getAnalysisRefreshDate();
|
||||
String refresh = analysisRefreshDate.map(FormatUtils::formatTimeStamp).orElse("-");
|
||||
boolean analysisIsAvailable = analysisRefreshDate.isPresent();
|
||||
|
||||
String serverName = plugin.getServerInfoManager().getServerName();
|
||||
String address = "../server/" + serverName;
|
||||
@ -427,14 +426,9 @@ public class HtmlStructure {
|
||||
|
||||
// Footer
|
||||
b.append("<div class=\"box-footer\"><p>Last Refresh: ").append(refresh).append("</p>");
|
||||
if (analysisIsAvailable) {
|
||||
b.append("<a href=\"").append(address).append("\" class=\"button right\">Analysis</a>");
|
||||
} else {
|
||||
b.append("<a class=\"button disabled right\">Analysis</a>");
|
||||
}
|
||||
b.append("<a href=\"").append(address).append("\" class=\"button right\">Analysis</a>");
|
||||
|
||||
b.append("</div>")
|
||||
.append("</div>");
|
||||
b.append("</div>").append("</div>");
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,6 @@ import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.WebServer;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.text.StrSubstitutor;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -60,7 +59,7 @@ public class HtmlUtils {
|
||||
}
|
||||
|
||||
public static String getRelativeInspectUrl(UUID uuid) {
|
||||
return getRelativeInspectUrl(Plan.getInstance().getDataCache().getName(uuid));
|
||||
return Plan.getPlanAPI().getPlayerInspectPageLink(Plan.getInstance().getDataCache().getName(uuid));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,7 +67,7 @@ public class HtmlUtils {
|
||||
* @return
|
||||
*/
|
||||
public static String removeXSS(String string) {
|
||||
return StringUtils.removeAll(string, "(<!--)|(-->)|(</?script>)");
|
||||
return string.replace("<!--", "").replace("-->", "").replace("</script>", "");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -89,7 +88,7 @@ public class HtmlUtils {
|
||||
string = Html.SPAN.parse(string);
|
||||
}
|
||||
|
||||
return StringUtils.remove(string, "§r");
|
||||
return string.replace("§r", "");
|
||||
}
|
||||
|
||||
public static String separateWithQuotes(String... strings) {
|
||||
|
@ -21,6 +21,7 @@ public class WorldPieCreator {
|
||||
public static String[] createSeriesData(WorldTimes worldTimes) {
|
||||
StringBuilder seriesBuilder = new StringBuilder("[");
|
||||
int i = 0;
|
||||
// WorldTimes Map<String, GMTimes> (GMTimes.getTotal)
|
||||
Map<String, Long> playtimePerWorld = worldTimes.getWorldTimes().entrySet().stream()
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal()));
|
||||
|
||||
|
@ -7,7 +7,6 @@ import main.java.com.djrapitops.plan.locale.Msg;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.KillDataComparator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -48,7 +47,7 @@ public class KillsTableCreator {
|
||||
String name = Plan.getInstance().getDataCache().getName(kill.getVictim());
|
||||
html.append(Html.TABLELINE_3_CUSTOMKEY_1.parse(
|
||||
String.valueOf(date), FormatUtils.formatTimeStamp(date),
|
||||
Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name),
|
||||
Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(name), name),
|
||||
kill.getWeapon()
|
||||
));
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package main.java.com.djrapitops.plan.utilities.html.tables;
|
||||
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.UserInfo;
|
||||
import main.java.com.djrapitops.plan.data.analysis.GeolocationPart;
|
||||
@ -8,7 +9,6 @@ import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -69,7 +69,7 @@ public class PlayersTableCreator {
|
||||
geoLocation = "Not Known";
|
||||
}
|
||||
html.append(Html.TABLELINE_PLAYERS.parse(
|
||||
Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(user.getName()), user.getName()),
|
||||
Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(user.getName()), user.getName()),
|
||||
activityString,
|
||||
String.valueOf(playtime), FormatUtils.formatTimeAmount(playtime),
|
||||
String.valueOf(loginTimes),
|
||||
|
@ -13,7 +13,6 @@ import main.java.com.djrapitops.plan.systems.cache.DataCache;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.SessionStartComparator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -72,7 +71,7 @@ public class SessionsTableCreator {
|
||||
String length = session.getSessionEnd() != -1 ? FormatUtils.formatTimeAmount(session.getLength()) : "Online";
|
||||
String world = getLongestWorldPlayed(session);
|
||||
|
||||
String inspectUrl = HtmlUtils.getRelativeInspectUrl(name);
|
||||
String inspectUrl = Plan.getPlanAPI().getPlayerInspectPageLink(name);
|
||||
sessionTableBuilder.append(Html.TABLELINE_4.parse(
|
||||
Html.LINK.parse(inspectUrl, name),
|
||||
start,
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: Plan
|
||||
author: Rsl1122
|
||||
main: main.java.com.djrapitops.plan.PlanBungee
|
||||
version: 4.0.0
|
||||
version: 4.0.1
|
@ -50,6 +50,7 @@ Data:
|
||||
CombineCommandAliases: true
|
||||
|
||||
Customization:
|
||||
UseServerTime: true
|
||||
Formatting:
|
||||
DecimalPoints: '#.##'
|
||||
TimeAmount:
|
||||
|
@ -1,7 +1,7 @@
|
||||
name: Plan
|
||||
author: Rsl1122
|
||||
main: main.java.com.djrapitops.plan.Plan
|
||||
version: 4.0.0
|
||||
version: 4.0.1
|
||||
softdepend:
|
||||
- OnTime
|
||||
- EssentialsX
|
||||
|
@ -14,7 +14,9 @@ import main.java.com.djrapitops.plan.database.databases.MySQLDB;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLDB;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
|
||||
import main.java.com.djrapitops.plan.database.tables.*;
|
||||
import main.java.com.djrapitops.plan.systems.cache.DataCache;
|
||||
import main.java.com.djrapitops.plan.systems.info.server.ServerInfo;
|
||||
import main.java.com.djrapitops.plan.systems.processing.player.RegisterProcessor;
|
||||
import main.java.com.djrapitops.plan.utilities.ManageUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.MathUtils;
|
||||
@ -38,6 +40,7 @@ import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.powermock.api.mockito.PowerMockito.when;
|
||||
|
||||
/**
|
||||
* @author Rsl1122
|
||||
@ -62,6 +65,14 @@ public class DatabaseTest {
|
||||
db = new SQLiteDB(plan, "debug" + MiscUtils.getTime());
|
||||
db.init();
|
||||
|
||||
when(plan.getDB()).thenReturn(db);
|
||||
DataCache dataCache = new DataCache(plan) {
|
||||
@Override
|
||||
public void markFirstSession(UUID uuid) {
|
||||
}
|
||||
};
|
||||
when(plan.getDataCache()).thenReturn(dataCache);
|
||||
|
||||
db.getServerTable().saveCurrentServerInfo(new ServerInfo(-1, TestInit.getServerUUID(), "ServerName", "", 20));
|
||||
|
||||
File f = new File(plan.getDataFolder(), "Errors.txt");
|
||||
@ -849,4 +860,13 @@ public class DatabaseTest {
|
||||
|
||||
assertEquals(worldTimes, allSessions.get(serverUUID).get(uuid).get(0).getWorldTimes());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterProcessorRegisterException() throws SQLException {
|
||||
for (int i = 0; i < 200; i++) {
|
||||
new RegisterProcessor(uuid, 500L, 1000L, "name", 4).process();
|
||||
}
|
||||
assertTrue(db.getUsersTable().isRegistered(uuid));
|
||||
assertTrue(db.getUserInfoTable().isRegistered(uuid));
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
@ -62,7 +61,7 @@ public class AdvancedAchievementsTable extends PluginData {
|
||||
private void appendTableLinesForLessThanV520(Set<UUID> users, StringBuilder html) {
|
||||
users.forEach(uuid -> {
|
||||
String name = super.getNameOf(uuid);
|
||||
String inspectUrl = HtmlUtils.getRelativeInspectUrl(name);
|
||||
String inspectUrl = Plan.getPlanAPI().getPlayerInspectPageLink(name);
|
||||
int achievements = aaAPI.getPlayerTotalAchievements(uuid);
|
||||
html.append(Html.TABLELINE_2.parse(Html.LINK.parse(inspectUrl, name), achievements));
|
||||
});
|
||||
@ -74,7 +73,7 @@ public class AdvancedAchievementsTable extends PluginData {
|
||||
UUID uuid = entry.getKey();
|
||||
int achievements = entry.getValue();
|
||||
String name = getNameOf(uuid);
|
||||
String inspectUrl = HtmlUtils.getRelativeInspectUrl(name);
|
||||
String inspectUrl = Plan.getPlanAPI().getPlayerInspectPageLink(name);
|
||||
html.append(Html.TABLELINE_2.parse(Html.LINK.parse(inspectUrl, name), achievements));
|
||||
}
|
||||
}
|
||||
|
@ -3,12 +3,12 @@ package com.djrapitops.pluginbridge.plan.factions;
|
||||
import com.massivecraft.factions.entity.Faction;
|
||||
import com.massivecraft.factions.entity.FactionColl;
|
||||
import com.massivecraft.factions.entity.MPlayer;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
@ -73,7 +73,7 @@ public class FactionsTable extends PluginData {
|
||||
if (f != null) {
|
||||
MPlayer fLeader = f.getLeader();
|
||||
String leader = fLeader != null ? fLeader.getNameAndSomething("", "") : "No Leader";
|
||||
String leaderPage = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(leader), leader);
|
||||
String leaderPage = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(leader), leader);
|
||||
html.append(Html.TABLELINE_4.parse(
|
||||
f.getName(),
|
||||
FormatUtils.cutDecimals(f.getPower()),
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.djrapitops.pluginbridge.plan.litebans;
|
||||
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.SQLException;
|
||||
@ -58,8 +58,8 @@ public class LiteBansBansTable extends PluginData {
|
||||
long expiry = ban.getExpiry();
|
||||
String expires = expiry <= 0 ? "Never" : FormatUtils.formatTimeStampSecond(expiry);
|
||||
html.append(tableLine
|
||||
.replace("REPLACE0", Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name))
|
||||
.replace("REPLACE1", Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(ban.getBannedBy()), ban.getBannedBy()))
|
||||
.replace("REPLACE0", Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(name), name))
|
||||
.replace("REPLACE1", Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(ban.getBannedBy()), ban.getBannedBy()))
|
||||
.replace("REPLACE2", ban.getReason())
|
||||
.replace("REPLACE3", expiry <= 0 ? "0" : Long.toString(expiry))
|
||||
.replace("REPLACE4", expires
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.djrapitops.pluginbridge.plan.litebans;
|
||||
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.SQLException;
|
||||
@ -58,7 +58,7 @@ public class LiteBansInspectBansTable extends PluginData {
|
||||
html.append(Html.TABLELINE_3_CUSTOMKEY_1.parse(
|
||||
expiry <= 0 ? "0" : Long.toString(expiry),
|
||||
expires,
|
||||
Html.LINK.parse("." + HtmlUtils.getRelativeInspectUrl(ban.getBannedBy()), ban.getBannedBy()),
|
||||
Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(ban.getBannedBy()), ban.getBannedBy()),
|
||||
ban.getReason())
|
||||
);
|
||||
}
|
||||
|
@ -6,11 +6,11 @@
|
||||
package com.djrapitops.pluginbridge.plan.superbvote;
|
||||
|
||||
import io.minimum.minecraft.superbvote.storage.VoteStorage;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
@ -50,7 +50,7 @@ public class SuperbVoteVotesTable extends PluginData {
|
||||
getUUIDsBeingAnalyzed()
|
||||
.forEach(uuid -> {
|
||||
String name = getNameOf(uuid);
|
||||
String link = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name);
|
||||
String link = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(name), name);
|
||||
String bal = FormatUtils.cutDecimals(store.getVotes(uuid));
|
||||
html.append(Html.TABLELINE_2.parse(link, bal));
|
||||
});
|
||||
|
@ -4,11 +4,11 @@ import com.massivecraft.factions.entity.MPlayer;
|
||||
import com.palmergames.bukkit.towny.object.Resident;
|
||||
import com.palmergames.bukkit.towny.object.Town;
|
||||
import com.palmergames.bukkit.towny.object.TownyUniverse;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
@ -61,7 +61,7 @@ public class TownyTable extends PluginData {
|
||||
}
|
||||
int residents = t.getNumResidents();
|
||||
int land = t.getPurchasedBlocks();
|
||||
String leaderPage = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(mayor), mayor);
|
||||
String leaderPage = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(mayor), mayor);
|
||||
html.append(Html.TABLELINE_4.parse(name, residents, land, leaderPage));
|
||||
}
|
||||
}
|
||||
|
@ -6,11 +6,11 @@
|
||||
package com.djrapitops.pluginbridge.plan.vault;
|
||||
|
||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -50,7 +50,7 @@ public class EconomyBalanceTable extends PluginData {
|
||||
StringBuilder html = new StringBuilder();
|
||||
getUUIDsBeingAnalyzed().forEach(uuid -> {
|
||||
String name = getNameOf(uuid);
|
||||
String link = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name);
|
||||
String link = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(name), name);
|
||||
String bal = FormatUtils.cutDecimals(econ.getBalance(new FakeOfflinePlayer(uuid, name)));
|
||||
html.append(Html.TABLELINE_2.parse(link, bal));
|
||||
});
|
||||
|
@ -6,6 +6,7 @@
|
||||
package com.djrapitops.pluginbridge.plan.vault;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Format;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
@ -56,6 +57,9 @@ public class PermGroupTable extends PluginData {
|
||||
.map(uuid -> new FakeOfflinePlayer(uuid, getNameOf(uuid))).collect(Collectors.toList());
|
||||
for (OfflinePlayer p : userData) {
|
||||
String group = permSys.getPrimaryGroup(null, p);
|
||||
if (Verify.isEmpty(group)) {
|
||||
continue;
|
||||
}
|
||||
if (!groups.containsKey(group)) {
|
||||
groups.put(group, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user