mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-04-09 13:46:58 +02:00
More PluginData, Abstractions, Import Offline players, Optimizations
Permission Group table PluginData objects now use API#getUserDataInspectCache instead of getOfflinePlayer (It was slow) - Using FakeOfflinePlayer when OfflinePlayer is required. Abstracted CommandSender New Player UserData Creation optimized Added Importer for players who haven't joined after Plan was installed. Added Timings to Status command Importing now temporarily disables Analysis BenchmarkUtil now not static Players Table (On analysis page) now limited to last 3000 players due to browser performance hit with higher numbers. GMTimes now saved & Get more efficiently (Batches & Single query)
This commit is contained in:
parent
d03d0836a1
commit
cfe876580f
@ -85,6 +85,7 @@ public enum Phrase {
|
||||
ERROR_LOGGED("Caught " + REPLACE0 + ". It has been logged to the Errors.txt"),
|
||||
ERROR_SESSIONDATA_INITIALIZATION("Player's session was initialized in a wrong way! (" + REPLACE0 + ")"),
|
||||
ERROR_ANALYSIS_FETCH_FAIL("Failed to fetch data for Analysis, Exception occurred."),
|
||||
ERROR_ANALYSIS_DISABLED_TEMPORARILY(ChatColor.YELLOW + "Analysis has been temporarily disabled due to expensive task, use /plan status for info."),
|
||||
//
|
||||
CMD_FOOTER(COLOR_TER.color() + "" + ARROWS_RIGHT),
|
||||
MANAGE_ERROR_INCORRECT_PLUGIN(ChatColor.RED + "" + PREFIX + "Plugin not supported: "),
|
||||
@ -149,7 +150,7 @@ public enum Phrase {
|
||||
ARG_SEARCH("<part of playername>"),
|
||||
ARG_PLAYER("<player>"),
|
||||
ARG_RESTORE("<Filename.db> <dbTo> [-a]"),
|
||||
ARG_IMPORT("<plugin> [-a]"),
|
||||
ARG_IMPORT("<plugin>/list [import args]"),
|
||||
ARG_MOVE("<fromDB> <toDB> [-a]"),
|
||||
//
|
||||
USE_BACKUP("Use /plan manage backup <DB>"),
|
||||
@ -158,7 +159,7 @@ public enum Phrase {
|
||||
USE_PLAN("Use /plan for help"),
|
||||
USE_MOVE("Use /plan manage move <fromDB> <toDB> [-a]"),
|
||||
USE_COMBINE("Use /plan manage combine <fromDB> <toDB> [-a]"),
|
||||
USE_IMPORT("Use /plan manage import <plugin> [-a]"),
|
||||
USE_IMPORT("Use /plan manage import " + ARG_IMPORT),
|
||||
//
|
||||
WARN_REWRITE("Data in REPLACE0-database will be rewritten!"),
|
||||
WARN_OVERWRITE("Data in REPLACE0-database will be overwritten!"),
|
||||
|
@ -116,7 +116,7 @@ public class Plan extends RslPlugin<Plan> {
|
||||
registerListeners();
|
||||
new TPSCountTimer(this).runTaskTimer(1000, 20);
|
||||
|
||||
getCommand("plan").setExecutor(new PlanCommand(this));
|
||||
registerCommand(new PlanCommand(this));
|
||||
|
||||
this.api = new API(this);
|
||||
handler.handleReload();
|
||||
|
@ -4,12 +4,18 @@ import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.StatusCommand;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.TreeCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.command.commands.*;
|
||||
import main.java.com.djrapitops.plan.command.commands.AnalyzeCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.InfoCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.InspectCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.ManageCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.QuickAnalyzeCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.QuickInspectCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.ReloadCommand;
|
||||
import main.java.com.djrapitops.plan.command.commands.SearchCommand;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
/**
|
||||
* CommandExecutor for the /plan command, and all subcommands.
|
||||
@ -17,7 +23,7 @@ import org.bukkit.command.CommandSender;
|
||||
* @author Rsl1122
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public class PlanCommand extends TreeCommand<Plan> implements CommandExecutor {
|
||||
public class PlanCommand extends TreeCommand<Plan> {
|
||||
|
||||
/**
|
||||
* CommandExecutor class Constructor.
|
||||
@ -29,7 +35,7 @@ public class PlanCommand extends TreeCommand<Plan> implements CommandExecutor {
|
||||
public PlanCommand(Plan plugin) {
|
||||
super(plugin, new SubCommand("plan", CommandType.CONSOLE, "") {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
return true;
|
||||
}
|
||||
}, "plan");
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
@ -15,8 +16,6 @@ import main.java.com.djrapitops.plan.ui.TextUI;
|
||||
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
@ -42,12 +41,19 @@ public class AnalyzeCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (!ConditionUtils.pluginHasViewCapability()) {
|
||||
sender.sendMessage(Phrase.ERROR_WEBSERVER_OFF_ANALYSIS + "");
|
||||
return true;
|
||||
}
|
||||
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
|
||||
if (!analysisCache.isAnalysisEnabled()) {
|
||||
sender.sendMessage(Phrase.ERROR_ANALYSIS_DISABLED_TEMPORARILY + "");
|
||||
if (!analysisCache.isCached()) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
|
||||
}
|
||||
if (!analysisCache.isCached() || MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > 60000) {
|
||||
int bootAnID = plugin.getBootAnalysisTaskID();
|
||||
if (bootAnID != -1) {
|
||||
@ -61,7 +67,7 @@ public class AnalyzeCommand extends SubCommand {
|
||||
@Override
|
||||
public void run() {
|
||||
timesrun++;
|
||||
if (analysisCache.isCached() && !analysisCache.isAnalysisBeingRun()) {
|
||||
if (analysisCache.isCached() && (!analysisCache.isAnalysisBeingRun() || !analysisCache.isAnalysisEnabled())) {
|
||||
sendAnalysisMessage(sender);
|
||||
this.cancel();
|
||||
return;
|
||||
@ -83,7 +89,7 @@ public class AnalyzeCommand extends SubCommand {
|
||||
*
|
||||
* @param sender Command sender.
|
||||
*/
|
||||
final public void sendAnalysisMessage(CommandSender sender) {
|
||||
final public void sendAnalysisMessage(ISender sender) {
|
||||
boolean textUI = Settings.USE_ALTERNATIVE_UI.isTrue();
|
||||
sender.sendMessage(Phrase.CMD_ANALYZE_HEADER + "");
|
||||
if (textUI) {
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.utilities.VersionUtils;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
@ -32,7 +33,7 @@ public class InfoCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
ChatColor tColor = Phrase.COLOR_SEC.color();
|
||||
|
||||
String[] messages = {
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import main.java.com.djrapitops.plan.command.ConditionUtils;
|
||||
@ -17,9 +18,6 @@ import main.java.com.djrapitops.plan.ui.TextUI;
|
||||
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandException;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
@ -46,7 +44,7 @@ public class InspectCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (!ConditionUtils.pluginHasViewCapability()) {
|
||||
sender.sendMessage(Phrase.ERROR_WEBSERVER_OFF_INSPECT + "");
|
||||
return true;
|
||||
@ -96,7 +94,7 @@ public class InspectCommand extends SubCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void sendInspectMsg(CommandSender sender, String playerName, UUID uuid) throws CommandException {
|
||||
private void sendInspectMsg(ISender sender, String playerName, UUID uuid) {
|
||||
sender.sendMessage(Phrase.CMD_INSPECT_HEADER + playerName);
|
||||
if (Settings.USE_ALTERNATIVE_UI.isTrue()) {
|
||||
sender.sendMessage(TextUI.getInspectMessages(uuid));
|
||||
|
@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.TreeCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
@ -28,7 +29,7 @@ public class ManageCommand extends TreeCommand<Plan> {
|
||||
public ManageCommand(Plan plugin) {
|
||||
super(plugin, new SubCommand("manage,m", CommandType.CONSOLE, Permissions.MANAGE.getPermission(), Phrase.CMD_USG_MANAGE + "") {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
return true;
|
||||
}
|
||||
}, "plan manage");
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
@ -11,8 +12,6 @@ import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler;
|
||||
import main.java.com.djrapitops.plan.ui.TextUI;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
/**
|
||||
* This subcommand is used to run the analysis and to view some of the data in
|
||||
@ -38,8 +37,15 @@ public class QuickAnalyzeCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (!analysisCache.isAnalysisEnabled()) {
|
||||
sender.sendMessage(Phrase.ERROR_ANALYSIS_DISABLED_TEMPORARILY + "");
|
||||
if (!analysisCache.isCached()) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
|
||||
}
|
||||
if (!analysisCache.isCached()) {
|
||||
int bootAnID = plugin.getBootAnalysisTaskID();
|
||||
if (bootAnID != -1) {
|
||||
@ -56,7 +62,7 @@ public class QuickAnalyzeCommand extends SubCommand {
|
||||
@Override
|
||||
public void run() {
|
||||
timesrun++;
|
||||
if (analysisCache.isCached() && !analysisCache.isAnalysisBeingRun()) {
|
||||
if (analysisCache.isCached() && (!analysisCache.isAnalysisBeingRun() || !analysisCache.isAnalysisEnabled())) {
|
||||
sender.sendMessage(Phrase.CMD_ANALYZE_HEADER + "");
|
||||
sender.sendMessage(TextUI.getAnalysisMessages());
|
||||
sender.sendMessage(Phrase.CMD_FOOTER + "");
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import java.util.UUID;
|
||||
@ -42,7 +43,7 @@ public class QuickInspectCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
String playerName = MiscUtils.getPlayerName(args, sender, Permissions.QUICK_INSPECT_OTHER);
|
||||
final RslTask inspectTask = new RslBukkitRunnable<Plan>("QinspectTask") {
|
||||
@Override
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
@ -30,7 +31,7 @@ public class ReloadCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
plugin.onDisable();
|
||||
plugin.reloadConfig();
|
||||
plugin.onEnable();
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import com.djrapitops.javaplugin.utilities.FormattingUtils;
|
||||
@ -43,7 +44,7 @@ public class SearchCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
Condition c = new Condition(args.length != 1, Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE.toString());
|
||||
if (c.pass()) {
|
||||
sender.sendMessage(c.getFailMsg());
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
@ -34,7 +35,7 @@ public class ManageBackupCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
try {
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS.parse(Phrase.USE_BACKUP + ""));
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
@ -33,7 +34,7 @@ public class ManageCleanCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (args.length == 0) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE + "");
|
||||
return true;
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Arrays;
|
||||
@ -35,7 +36,7 @@ public class ManageClearCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (args.length == 0) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE + "");
|
||||
return true;
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import java.sql.SQLException;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
@ -34,7 +35,7 @@ public class ManageHotswapCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (args.length == 0) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE + "");
|
||||
return true;
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import java.util.Arrays;
|
||||
@ -15,8 +16,6 @@ import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.handling.importing.ImportUtils;
|
||||
import main.java.com.djrapitops.plan.data.handling.importing.Importer;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayers;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
/**
|
||||
* This manage subcommand is used to import data from 3rd party plugins.
|
||||
@ -41,7 +40,7 @@ public class ManageImportCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE.toString() + " " + Phrase.USE_IMPORT);
|
||||
@ -49,6 +48,10 @@ public class ManageImportCommand extends SubCommand {
|
||||
}
|
||||
|
||||
String importFromPlugin = args[0].toLowerCase();
|
||||
if (importFromPlugin.equals("list")) {
|
||||
list(sender);
|
||||
return true;
|
||||
}
|
||||
Map<String, Importer> importPlugins = ImportUtils.getImporters();
|
||||
if (!importPlugins.keySet().contains(importFromPlugin)) {
|
||||
sender.sendMessage(Phrase.MANAGE_ERROR_INCORRECT_PLUGIN + importFromPlugin);
|
||||
@ -60,18 +63,17 @@ public class ManageImportCommand extends SubCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Arrays.asList(args).contains("-a")) {
|
||||
sender.sendMessage(Phrase.COMMAND_ADD_CONFIRMATION_ARGUMENT.parse(Phrase.WARN_OVERWRITE_SOME.parse(plugin.getDB().getConfigName())));
|
||||
return true;
|
||||
String[] arguments = new String[args.length-1];
|
||||
for (int i = 1; i < args.length; i++) {
|
||||
arguments[i-1] = args[i];
|
||||
}
|
||||
|
||||
final Importer importer = importPlugins.get(importFromPlugin);
|
||||
RslTask asyncImportTask = new RslBukkitRunnable<Plan>("ImportTask") {
|
||||
@Override
|
||||
public void run() {
|
||||
sender.sendMessage(Phrase.MANAGE_IMPORTING + "");
|
||||
List<UUID> uuids = Arrays.stream(getOfflinePlayers()).map(p -> p.getUniqueId()).collect(Collectors.toList());
|
||||
if (importer.importData(uuids)) {
|
||||
if (importer.importData(uuids, arguments)) {
|
||||
sender.sendMessage(Phrase.MANAGE_SUCCESS + "");
|
||||
} else {
|
||||
sender.sendMessage(Phrase.MANAGE_PROCESS_FAIL + "");
|
||||
@ -81,4 +83,13 @@ public class ManageImportCommand extends SubCommand {
|
||||
}.runTaskAsynchronously();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void list(ISender sender) {
|
||||
sender.sendMessage(Phrase.CMD_FOOTER.parse());
|
||||
Map<String, Importer> importers = ImportUtils.getImporters();
|
||||
for (String key : importers.keySet()) {
|
||||
sender.sendMessage(Phrase.CMD_BALL+" "+key+": "+importers.get(key).getInfo());
|
||||
}
|
||||
sender.sendMessage(Phrase.CMD_FOOTER.parse());
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@ -39,7 +40,7 @@ public class ManageMoveCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (args.length < 2) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS.parse(Phrase.USE_MOVE + ""));
|
||||
return true;
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Arrays;
|
||||
@ -37,7 +38,7 @@ public class ManageRemoveCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (args.length == 0) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE.toString());
|
||||
return true;
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
|
||||
import com.djrapitops.javaplugin.task.RslTask;
|
||||
import java.io.File;
|
||||
@ -40,7 +41,7 @@ public class ManageRestoreCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
try {
|
||||
if (args.length < 2) {
|
||||
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS.parse(Phrase.USE_RESTORE + ""));
|
||||
|
@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.javaplugin.command.CommandType;
|
||||
import com.djrapitops.javaplugin.command.SubCommand;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
@ -29,7 +30,7 @@ public class ManageStatusCommand extends SubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
String[] messages = new String[]{
|
||||
Phrase.CMD_MANAGE_STATUS_HEADER + "",
|
||||
Phrase.CMD_MANAGE_STATUS_ACTIVE_DB.parse(plugin.getDB().getConfigName()),
|
||||
|
@ -148,7 +148,7 @@ public abstract class PluginData {
|
||||
* @see AnalysisType
|
||||
*/
|
||||
public final String parseContainer(String modifier, String contents) {
|
||||
return "<div class=\"plugin-data\">" + (icon.isEmpty() ? "" : Html.FONT_AWESOME_ICON.parse(icon)) + " " + modifier + prefix + contents + suffix + "</div>";
|
||||
return "<div class=\"plugin-data\">" + (icon.isEmpty() ? "<br>" : Html.FONT_AWESOME_ICON.parse(icon)) + " " + modifier + prefix + contents + suffix + "</div>";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@ public class AnalysisCacheHandler {
|
||||
private final Plan plugin;
|
||||
private AnalysisData cache;
|
||||
private final Analysis analysis;
|
||||
private boolean analysisEnabled;
|
||||
|
||||
/**
|
||||
* Class Constructor.
|
||||
@ -27,6 +28,7 @@ public class AnalysisCacheHandler {
|
||||
public AnalysisCacheHandler(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
analysis = new Analysis(plugin);
|
||||
analysisEnabled = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -70,4 +72,18 @@ public class AnalysisCacheHandler {
|
||||
public boolean isAnalysisBeingRun() {
|
||||
return analysis.isAnalysisBeingRun();
|
||||
}
|
||||
|
||||
public boolean isAnalysisEnabled() {
|
||||
return analysisEnabled;
|
||||
}
|
||||
|
||||
public void disableAnalysisTemporarily() {
|
||||
analysisEnabled = false;
|
||||
analysis.setTaskId(-2);
|
||||
}
|
||||
|
||||
public void enableAnalysis() {
|
||||
analysis.setTaskId(-1);
|
||||
analysisEnabled = true;
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ public class DataCacheHandler extends LocationCache {
|
||||
private DataCacheGetQueue getTask;
|
||||
|
||||
// Variables
|
||||
|
||||
private boolean periodicTaskIsSaving = false;
|
||||
|
||||
/**
|
||||
* Class Constructor.
|
||||
@ -141,10 +141,14 @@ public class DataCacheHandler extends LocationCache {
|
||||
}
|
||||
RslTask asyncPeriodicCacheSaveTask = new RslBukkitRunnable<Plan>("PeriodicCacheSaveTask") {
|
||||
private int timesSaved = 0;
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (periodicTaskIsSaving) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
periodicTaskIsSaving = true;
|
||||
DataCacheHandler handler = Plan.getInstance().getHandler();
|
||||
handler.saveHandlerDataToCache();
|
||||
handler.saveCachedUserData();
|
||||
@ -156,6 +160,8 @@ public class DataCacheHandler extends LocationCache {
|
||||
timesSaved++;
|
||||
} catch (Exception e) {
|
||||
Log.toLog(this.getClass().getName() + "(" + this.getTaskName() + ")", e);
|
||||
} finally {
|
||||
periodicTaskIsSaving = false;
|
||||
}
|
||||
}
|
||||
}.runTaskTimerAsynchronously(60 * 20 * minutes, 60 * 20 * minutes);
|
||||
@ -243,6 +249,9 @@ public class DataCacheHandler extends LocationCache {
|
||||
* @param i Object that extends HandlingInfo.
|
||||
*/
|
||||
public void addToPool(HandlingInfo i) {
|
||||
if (i == null) {
|
||||
return;
|
||||
}
|
||||
Log.debug(i.getUuid() + ": Adding to pool, type:" + i.getType().name());
|
||||
processTask.addToPool(i);
|
||||
}
|
||||
@ -369,7 +378,7 @@ public class DataCacheHandler extends LocationCache {
|
||||
if (unsavedTPSHistory.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<List<TPS>> copy = new ArrayList<>(unsavedTPSHistory);;
|
||||
List<List<TPS>> copy = new ArrayList<>(unsavedTPSHistory);;
|
||||
for (List<TPS> history : copy) {
|
||||
final long lastdate = history.get(history.size() - 1).getDate();
|
||||
final double averageTPS = MathUtils.averageDouble(history.stream().map(t -> t.getTps()));
|
||||
|
@ -1,6 +1,5 @@
|
||||
package main.java.com.djrapitops.plan.data.handling.importing;
|
||||
|
||||
import com.djrapitops.pluginbridge.plan.Bridge;
|
||||
import com.djrapitops.pluginbridge.plan.importing.OnTimeImporter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -22,6 +21,9 @@ public class ImportUtils {
|
||||
* @return true/false
|
||||
*/
|
||||
public static boolean isPluginEnabled(String pluginName) {
|
||||
if ("offline".equals(pluginName)) {
|
||||
return true;
|
||||
}
|
||||
return getPluginManager().isPluginEnabled(pluginName);
|
||||
}
|
||||
|
||||
@ -34,6 +36,7 @@ public class ImportUtils {
|
||||
Map<String, Importer> importers = new HashMap<>();
|
||||
try {
|
||||
importers.put("ontime", new OnTimeImporter());
|
||||
importers.put("offline", new OfflinePlayerImporter());
|
||||
} catch (Throwable e) {
|
||||
Log.toLog("ImportUtils.getImporters", e);
|
||||
Log.error("Plan Plugin Bridge not included in the plugin jar.");
|
||||
|
@ -2,17 +2,25 @@ package main.java.com.djrapitops.plan.data.handling.importing;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
|
||||
import main.java.com.djrapitops.plan.data.handling.info.HandlingInfo;
|
||||
import main.java.com.djrapitops.plan.data.handling.info.InfoType;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
import main.java.com.djrapitops.plan.utilities.NewPlayerCreator;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayers;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
|
||||
/**
|
||||
* Abstract class used for importing data from other plugins.
|
||||
@ -22,11 +30,25 @@ import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
*/
|
||||
public abstract class Importer {
|
||||
|
||||
private String info;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public Importer() {
|
||||
info = "No info specified";
|
||||
}
|
||||
|
||||
/**
|
||||
* Import data from users.
|
||||
*
|
||||
* @param uuids UUIDs of players to import
|
||||
* @return Success of import
|
||||
* @deprecated Use importData(Collection, String...) instead (new system)
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean importData(Collection<UUID> uuids) {
|
||||
return importData(uuids, new String[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -35,37 +57,104 @@ public abstract class Importer {
|
||||
* Creates UserData for players that have not been saved to the database.
|
||||
*
|
||||
* @param uuids UUIDs to be imported
|
||||
* @param args arguments for the import
|
||||
* @return success
|
||||
*/
|
||||
public boolean importData(Collection<UUID> uuids) {
|
||||
public boolean importData(Collection<UUID> uuids, String... args) {
|
||||
Plan plan = Plan.getInstance();
|
||||
DataCacheHandler handler = plan.getHandler();
|
||||
Database db = plan.getDB();
|
||||
Set<UUID> saved;
|
||||
plan.getAnalysisCache().disableAnalysisTemporarily();
|
||||
try {
|
||||
saved = db.getSavedUUIDs();
|
||||
} catch (SQLException ex) {
|
||||
Log.toLog(this.getClass().getName(), ex);
|
||||
return false;
|
||||
}
|
||||
List<UUID> unSaved = new ArrayList<>(uuids);
|
||||
unSaved.removeAll(saved);
|
||||
for (UUID uuid : unSaved) {
|
||||
OfflinePlayer player = getOfflinePlayer(uuid);
|
||||
handler.newPlayer(player);
|
||||
}
|
||||
for (UUID uuid : uuids) {
|
||||
handler.addToPool(importData(uuid));
|
||||
String processName = "Import, " + getClass().getSimpleName();
|
||||
plan.processStatus().startExecution(processName);
|
||||
DataCacheHandler handler = plan.getHandler();
|
||||
Database db = plan.getDB();
|
||||
Set<UUID> saved;
|
||||
try {
|
||||
saved = db.getSavedUUIDs();
|
||||
} catch (SQLException ex) {
|
||||
Log.toLog(this.getClass().getName(), ex);
|
||||
return false;
|
||||
}
|
||||
List<UUID> unSaved = new ArrayList<>(uuids);
|
||||
unSaved.removeAll(saved);
|
||||
String createUserObjects = "Creating new UserData objects for: " + unSaved.size();
|
||||
plan.processStatus().setStatus(processName, createUserObjects);
|
||||
Map<UUID, OfflinePlayer> offlinePlayers = Arrays.stream(getOfflinePlayers()).collect(Collectors.toMap(OfflinePlayer::getUniqueId, Function.identity()));
|
||||
Benchmark.start(createUserObjects);
|
||||
List<OfflinePlayer> offlineP = unSaved.stream().map(uuid
|
||||
-> offlinePlayers.get(uuid)).collect(Collectors.toList());
|
||||
List<UserData> newUsers = new ArrayList<>();
|
||||
for (OfflinePlayer p : offlineP) {
|
||||
UserData newPlayer = NewPlayerCreator.createNewPlayer(p);
|
||||
newPlayer.setLastPlayed(newPlayer.getRegistered());
|
||||
newUsers.add(newPlayer);
|
||||
plan.processStatus().setStatus(processName, "Creating new UserData objects: " + newUsers.size() + "/" + unSaved.size());
|
||||
}
|
||||
Benchmark.stop(createUserObjects);
|
||||
plan.processStatus().setStatus(processName, "Save new UserData objects (" + unSaved.size() + ")");
|
||||
try {
|
||||
plan.getDB().saveMultipleUserData(newUsers);
|
||||
} catch (SQLException ex) {
|
||||
Log.toLog(this.getClass().getName(), ex);
|
||||
}
|
||||
for (UUID uuid : uuids) {
|
||||
handler.addToPool(importData(uuid, args));
|
||||
}
|
||||
plan.processStatus().finishExecution(processName);
|
||||
} finally {
|
||||
plan.getAnalysisCache().enableAnalysis();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the info for import command.
|
||||
*
|
||||
* @return Information about the import options
|
||||
* @since 3.5.0
|
||||
*/
|
||||
public final String getInfo() {
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the info for import command.
|
||||
*
|
||||
* @param info Information about the import options
|
||||
* @since 3.5.0
|
||||
*/
|
||||
public final void setInfo(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Import data of a single player.
|
||||
*
|
||||
* @param uuid UUID of the player
|
||||
* @return HandlingInfo used to modify saved userdata.
|
||||
* @deprecated Deprecated (new system), use importData(UUID, String...)
|
||||
* instead
|
||||
*/
|
||||
@Deprecated
|
||||
public HandlingInfo importData(UUID uuid) {
|
||||
return importData(uuid, new String[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used for getting the HandlingInfo object for the import data.
|
||||
*
|
||||
* @param uuid UUID of the player
|
||||
* @param args Arguments for import
|
||||
* @return HandlingInfo object that modifies the UserData so that the data
|
||||
* is imported.
|
||||
* @since 3.5.0
|
||||
*/
|
||||
public abstract HandlingInfo importData(UUID uuid);
|
||||
public HandlingInfo importData(UUID uuid, String... args) {
|
||||
return new HandlingInfo(uuid, InfoType.OTHER, 0) {
|
||||
@Override
|
||||
public boolean process(UserData uData) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package main.java.com.djrapitops.plan.data.handling.importing;
|
||||
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.data.handling.info.HandlingInfo;
|
||||
|
||||
/**
|
||||
* Imports all players who have not joined since Plan was installed.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 3.5.0
|
||||
*/
|
||||
public class OfflinePlayerImporter extends Importer {
|
||||
|
||||
public OfflinePlayerImporter() {
|
||||
super.setInfo("Import all players who have not joined since Plan was installed.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlingInfo importData(UUID uuid, String... args) {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -325,7 +325,7 @@ public abstract class SQLDB extends Database {
|
||||
List<InetAddress> ips = ipsTable.getIPAddresses(userId);
|
||||
data.addIpAddresses(ips);
|
||||
|
||||
HashMap<GameMode, Long> times = gmTimesTable.getGMTimes(userId);
|
||||
Map<GameMode, Long> times = gmTimesTable.getGMTimes(userId);
|
||||
data.setGmTimes(times);
|
||||
List<SessionData> sessions = sessionsTable.getSessionData(userId);
|
||||
data.addSessions(sessions);
|
||||
@ -370,6 +370,7 @@ public abstract class SQLDB extends Database {
|
||||
Map<Integer, Set<InetAddress>> ipList = ipsTable.getIPList(ids);
|
||||
Map<Integer, List<KillData>> playerKills = killsTable.getPlayerKills(ids, idUuidRel);
|
||||
Map<Integer, List<SessionData>> sessionData = sessionsTable.getSessionData(ids);
|
||||
Map<Integer, Map<GameMode, Long>> gmTimes = gmTimesTable.getGMTimes(ids);
|
||||
Log.debug("Sizes: UUID:" + uuids.size() + " DATA:" + data.size() + " ID:" + userIds.size() + " N:" + nicknames.size() + " I:" + ipList.size() + " K:" + playerKills.size() + " S:" + sessionData.size());
|
||||
for (UserData uData : data) {
|
||||
UUID uuid = uData.getUuid();
|
||||
@ -378,7 +379,7 @@ public abstract class SQLDB extends Database {
|
||||
uData.addNicknames(nicknames.get(id));
|
||||
uData.addSessions(sessionData.get(id));
|
||||
uData.setPlayerKills(playerKills.get(id));
|
||||
uData.setGmTimes(gmTimesTable.getGMTimes(id));
|
||||
uData.setGmTimes(gmTimes.get(id));
|
||||
}
|
||||
Benchmark.stop("DB get UserData for " + uuidsCol.size());
|
||||
setAvailable();
|
||||
@ -435,11 +436,7 @@ public abstract class SQLDB extends Database {
|
||||
ipsTable.saveIPList(ips);
|
||||
killsTable.savePlayerKills(kills, uuids);
|
||||
sessionsTable.saveSessionData(sessions);
|
||||
Benchmark.start("Save GMTimes");
|
||||
for (Integer id : gmTimes.keySet()) {
|
||||
gmTimesTable.saveGMTimes(id, gmTimes.get(id));
|
||||
}
|
||||
Benchmark.stop("Save GMTimes");
|
||||
gmTimesTable.saveGMTimes(gmTimes);
|
||||
userDatas.values().stream()
|
||||
.filter(u -> u != null)
|
||||
.filter(uData -> uData.isAccessed())
|
||||
|
@ -3,10 +3,14 @@ package main.java.com.djrapitops.plan.database.tables;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLDB;
|
||||
import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
import org.bukkit.GameMode;
|
||||
|
||||
/**
|
||||
@ -85,7 +89,7 @@ public class GMTimesTable extends Table {
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public HashMap<GameMode, Long> getGMTimes(int userId) throws SQLException {
|
||||
public Map<GameMode, Long> getGMTimes(int userId) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try {
|
||||
@ -108,6 +112,35 @@ public class GMTimesTable extends Table {
|
||||
close(statement);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<Integer, Map<GameMode, Long>> getGMTimes(Collection<Integer> userIds) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
Map<Integer, Map<GameMode, Long>> times = new HashMap<>();
|
||||
try {
|
||||
statement = prepareStatement("SELECT * FROM " + tableName);
|
||||
set = statement.executeQuery();
|
||||
Map<GameMode, Long> gmTimes = new HashMap<>();
|
||||
while (set.next()) {
|
||||
int id = set.getInt(columnUserID);
|
||||
if (!userIds.contains(id)) {
|
||||
continue;
|
||||
}
|
||||
gmTimes.put(GameMode.SURVIVAL, set.getLong(columnSurvivalTime));
|
||||
gmTimes.put(GameMode.CREATIVE, set.getLong(columnCreativeTime));
|
||||
gmTimes.put(GameMode.ADVENTURE, set.getLong(columnAdventureTime));
|
||||
try {
|
||||
gmTimes.put(GameMode.SPECTATOR, set.getLong(columnSpectatorTime));
|
||||
} catch (NoSuchFieldError e) {
|
||||
}
|
||||
times.put(id, gmTimes);
|
||||
}
|
||||
return times;
|
||||
} finally {
|
||||
close(set);
|
||||
close(statement);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@ -119,7 +152,6 @@ public class GMTimesTable extends Table {
|
||||
if (gamemodeTimes == null || gamemodeTimes.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
PreparedStatement statement = null;
|
||||
GameMode[] gms = new GameMode[]{GameMode.SURVIVAL, GameMode.CREATIVE, GameMode.ADVENTURE, GameMode.SPECTATOR};
|
||||
int update = 0;
|
||||
@ -151,7 +183,114 @@ public class GMTimesTable extends Table {
|
||||
if (update == 0) {
|
||||
addNewGMTimesRow(userId, gamemodeTimes);
|
||||
}
|
||||
}
|
||||
|
||||
private Set<Integer> getSavedIDs() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try {
|
||||
statement = prepareStatement("SELECT " + columnUserID + " FROM " + tableName);
|
||||
set = statement.executeQuery();
|
||||
Set<Integer> ids = new HashSet<>();
|
||||
while (set.next()) {
|
||||
ids.add(set.getInt(columnUserID));
|
||||
}
|
||||
return ids;
|
||||
} finally {
|
||||
close(set);
|
||||
close(statement);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveGMTimes(Map<Integer, Map<GameMode, Long>> gamemodeTimes) throws SQLException {
|
||||
if (gamemodeTimes == null || gamemodeTimes.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Benchmark.start("Save GMTimes");
|
||||
PreparedStatement statement = null;
|
||||
GameMode[] gms = new GameMode[]{GameMode.SURVIVAL, GameMode.CREATIVE, GameMode.ADVENTURE, GameMode.SPECTATOR};
|
||||
Set<Integer> savedIDs = getSavedIDs();
|
||||
try {
|
||||
statement = prepareStatement(
|
||||
"UPDATE " + tableName + " SET "
|
||||
+ columnSurvivalTime + "=?, "
|
||||
+ columnCreativeTime + "=?, "
|
||||
+ columnAdventureTime + "=?, "
|
||||
+ columnSpectatorTime + "=? "
|
||||
+ " WHERE (" + columnUserID + "=?)");
|
||||
boolean commitRequired = false;
|
||||
for (Integer id : gamemodeTimes.keySet()) {
|
||||
if (!savedIDs.contains(id)) {
|
||||
continue;
|
||||
}
|
||||
statement.setInt(5, id);
|
||||
for (int i = 0; i < gms.length; i++) {
|
||||
try {
|
||||
Map<GameMode, Long> times = gamemodeTimes.get(id);
|
||||
Long time = times.get(gms[i]);
|
||||
if (time != null) {
|
||||
statement.setLong(i + 1, time);
|
||||
} else {
|
||||
statement.setLong(i + 1, 0);
|
||||
}
|
||||
} catch (NoSuchFieldError e) {
|
||||
statement.setLong(i + 1, 0);
|
||||
}
|
||||
}
|
||||
statement.addBatch();
|
||||
commitRequired = true;
|
||||
}
|
||||
if (commitRequired) {
|
||||
statement.executeBatch();
|
||||
}
|
||||
gamemodeTimes.keySet().removeAll(savedIDs);
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
addNewGMTimesRows(gamemodeTimes);
|
||||
Benchmark.stop("Save GMTimes");
|
||||
}
|
||||
|
||||
private void addNewGMTimesRows(Map<Integer, Map<GameMode, Long>> gamemodeTimes) throws SQLException {
|
||||
if (gamemodeTimes == null || gamemodeTimes.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
PreparedStatement statement = null;
|
||||
GameMode[] gms = new GameMode[]{GameMode.SURVIVAL, GameMode.CREATIVE, GameMode.ADVENTURE, GameMode.SPECTATOR};
|
||||
try {
|
||||
statement = prepareStatement(
|
||||
"INSERT INTO " + tableName + " ("
|
||||
+ columnUserID + ", "
|
||||
+ columnSurvivalTime + ", "
|
||||
+ columnCreativeTime + ", "
|
||||
+ columnAdventureTime + ", "
|
||||
+ columnSpectatorTime
|
||||
+ ") VALUES (?, ?, ?, ?, ?)");
|
||||
boolean commitRequired = false;
|
||||
for (Integer id : gamemodeTimes.keySet()) {
|
||||
statement.setInt(1, id);
|
||||
for (int i = 0; i < gms.length; i++) {
|
||||
try {
|
||||
Map<GameMode, Long> times = gamemodeTimes.get(id);
|
||||
Long time = times.get(gms[i]);
|
||||
if (time != null) {
|
||||
statement.setLong(i + 2, time);
|
||||
} else {
|
||||
statement.setLong(i + 2, 0);
|
||||
}
|
||||
} catch (NoSuchFieldError e) {
|
||||
statement.setLong(i + 2, 0);
|
||||
}
|
||||
}
|
||||
statement.addBatch();
|
||||
commitRequired = true;
|
||||
}
|
||||
if (commitRequired) {
|
||||
statement.executeBatch();
|
||||
}
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
}
|
||||
|
||||
private void addNewGMTimesRow(int userId, Map<GameMode, Long> gamemodeTimes) throws SQLException {
|
||||
|
@ -224,6 +224,9 @@ public class SessionsTable extends Table {
|
||||
}
|
||||
|
||||
private void saveSessionBatch(List<Container<SessionData>> batch) throws SQLException {
|
||||
if (batch.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
PreparedStatement statement = null;
|
||||
try {
|
||||
statement = prepareStatement("INSERT INTO " + tableName + " ("
|
||||
|
@ -17,6 +17,7 @@ import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.api.Gender;
|
||||
import main.java.com.djrapitops.plan.data.DemographicsData;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.database.DBUtils;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLDB;
|
||||
import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility;
|
||||
@ -643,7 +644,12 @@ public class UsersTable extends Table {
|
||||
try {
|
||||
List<UserData> newUserdata = updateExistingUserData(data);
|
||||
Benchmark.start("Insert new UserInfo multiple " + newUserdata.size());
|
||||
insertNewUserData(newUserdata);
|
||||
List<List<UserData>> batches = DBUtils.splitIntoBatches(newUserdata);
|
||||
for (List<UserData> batch : batches) {
|
||||
Benchmark.start("Insert new UserInfo Batch " + batch.size());
|
||||
insertNewUserData(batch);
|
||||
Benchmark.stop("Insert new UserInfo Batch " + batch.size());
|
||||
}
|
||||
Benchmark.stop("Insert new UserInfo multiple " + newUserdata.size());
|
||||
} finally {
|
||||
Benchmark.stop("Save UserInfo multiple " + data.size());
|
||||
@ -850,8 +856,7 @@ public class UsersTable extends Table {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws SQLException
|
||||
* @return @throws SQLException
|
||||
*/
|
||||
public Map<Integer, Integer> getLoginTimes() throws SQLException {
|
||||
Benchmark.start("Get Logintimes");
|
||||
|
@ -16,7 +16,7 @@ import main.java.com.djrapitops.plan.utilities.comparators.TPSComparator;
|
||||
*/
|
||||
public class TPSGraphCreator {
|
||||
public static String[] generateDataArray(List<TPS> tpsData, long scale) {
|
||||
Benchmark.start("TPSGraph generate array: "+tpsData.size());
|
||||
Benchmark.start("TPSGraph generate array");
|
||||
long now = MiscUtils.getTime();
|
||||
List<TPS> filtered = filterTPS(tpsData, now-scale);
|
||||
Log.debug("TPSGraph, filtered: "+filtered.size());
|
||||
@ -24,7 +24,7 @@ public class TPSGraphCreator {
|
||||
List<Long> dates = filtered.stream().map(t -> t.getDate()).collect(Collectors.toList());
|
||||
List<Double> tps = filtered.stream().map(t -> t.getTps()).collect(Collectors.toList());
|
||||
List<Integer> players = filtered.stream().map(t -> t.getPlayers()).collect(Collectors.toList());
|
||||
Benchmark.stop("TPSGraph generate array: "+tpsData.size());
|
||||
Benchmark.stop("TPSGraph generate array");
|
||||
return new String[]{dates.toString(), tps.toString(), players.toString()};
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main.java.com.djrapitops.plan.ui.tables;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.ui.Html;
|
||||
@ -9,6 +10,7 @@ import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.UserDataLastPlayedComparator;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -21,31 +23,54 @@ public class SortablePlayersTableCreator {
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public static String createSortablePlayersTable(Collection<UserData> data) {
|
||||
public static String createSortablePlayersTable(List<UserData> data) {
|
||||
Benchmark.start("Create Players table " + data.size());
|
||||
String html = "";
|
||||
StringBuilder html = new StringBuilder();
|
||||
long now = MiscUtils.getTime();
|
||||
boolean showImages = Settings.PLAYERLIST_SHOW_IMAGES.isTrue();
|
||||
for (UserData uData : data) {
|
||||
try {
|
||||
String banOunknownOactiveOinactive = uData.isBanned() ? Html.GRAPH_BANNED.parse()
|
||||
: uData.getLoginTimes() == 1 ? Html.GRAPH_UNKNOWN.parse()
|
||||
: AnalysisUtils.isActive(now, uData.getLastPlayed(), uData.getPlayTime(), uData.getLoginTimes()) ? Html.GRAPH_ACTIVE.parse()
|
||||
: Html.GRAPH_INACTIVE.parse();
|
||||
String img = showImages ? Html.MINOTAR_SMALL_IMG.parse(uData.getName()) : "";
|
||||
html += Html.TABLELINE_PLAYERS.parse(
|
||||
img + Html.LINK.parse(HtmlUtils.getInspectUrl(uData.getName()), uData.getName()),
|
||||
banOunknownOactiveOinactive,
|
||||
uData.getPlayTime() + "", FormatUtils.formatTimeAmount(uData.getPlayTime()),
|
||||
uData.getLoginTimes() + "",
|
||||
uData.getRegistered() + "", FormatUtils.formatTimeStampYear(uData.getRegistered()),
|
||||
uData.getLastPlayed() + "", FormatUtils.formatTimeStamp(uData.getLastPlayed()),
|
||||
uData.getDemData().getGeoLocation()
|
||||
);
|
||||
} catch (NullPointerException e) {
|
||||
boolean showImages = Settings.PLAYERLIST_SHOW_IMAGES.isTrue() && data.size() < 3000;
|
||||
if (data.size() < 3000) {
|
||||
for (UserData uData : data) {
|
||||
try {
|
||||
String banOunknownOactiveOinactive = uData.isBanned() ? Html.GRAPH_BANNED.parse()
|
||||
: uData.getLoginTimes() == 1 ? Html.GRAPH_UNKNOWN.parse()
|
||||
: AnalysisUtils.isActive(now, uData.getLastPlayed(), uData.getPlayTime(), uData.getLoginTimes()) ? Html.GRAPH_ACTIVE.parse()
|
||||
: Html.GRAPH_INACTIVE.parse();
|
||||
String img = showImages ? Html.MINOTAR_SMALL_IMG.parse(uData.getName()) : "";
|
||||
html.append(Html.TABLELINE_PLAYERS.parse(
|
||||
img + Html.LINK.parse(HtmlUtils.getInspectUrl(uData.getName()), uData.getName()),
|
||||
banOunknownOactiveOinactive,
|
||||
uData.getPlayTime() + "", FormatUtils.formatTimeAmount(uData.getPlayTime()),
|
||||
uData.getLoginTimes() + "",
|
||||
uData.getRegistered() + "", FormatUtils.formatTimeStampYear(uData.getRegistered()),
|
||||
uData.getLastPlayed() + "", FormatUtils.formatTimeStamp(uData.getLastPlayed()),
|
||||
uData.getDemData().getGeoLocation()
|
||||
));
|
||||
} catch (NullPointerException e) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Collections.sort(data, new UserDataLastPlayedComparator());
|
||||
int i = 0;
|
||||
for (UserData uData : data) {
|
||||
if (i >= 3000) {
|
||||
break;
|
||||
}
|
||||
try {
|
||||
html.append(Html.TABLELINE_PLAYERS.parse(
|
||||
Html.LINK.parse(HtmlUtils.getInspectUrl(uData.getName()), uData.getName()),
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
uData.getRegistered() + "", FormatUtils.formatTimeStampYear(uData.getRegistered()),
|
||||
uData.getLastPlayed() + "", FormatUtils.formatTimeStamp(uData.getLastPlayed()),
|
||||
uData.getDemData().getGeoLocation()
|
||||
));
|
||||
} catch (NullPointerException e) {
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
Benchmark.stop("Create Players table " + data.size());
|
||||
return html;
|
||||
return html.toString();
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package main.java.com.djrapitops.plan.utilities;
|
||||
|
||||
import com.djrapitops.javaplugin.utilities.BenchmarkUtil;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -14,7 +14,7 @@ public class Benchmark {
|
||||
* @param source
|
||||
*/
|
||||
public static void start(String source) {
|
||||
BenchmarkUtil.start(source);
|
||||
Plan.getInstance().benchmark().start(source);
|
||||
Log.debug(source);
|
||||
}
|
||||
|
||||
@ -24,7 +24,7 @@ public class Benchmark {
|
||||
* @return
|
||||
*/
|
||||
public static long stop(String source) {
|
||||
long ms = BenchmarkUtil.stop(source);
|
||||
long ms = Plan.getInstance().benchmark().stop(source);
|
||||
if (ms != -1) {
|
||||
Log.debug(source + " took " + ms+" ms");
|
||||
}
|
||||
|
@ -75,6 +75,7 @@ public class ManageUtils {
|
||||
List<UserData> allUserData = copyFromDB.getUserDataForUUIDS(copyFromDB.getSavedUUIDs());
|
||||
clearAndCopyToDB.saveMultipleUserData(allUserData);
|
||||
clearAndCopyToDB.getCommandUseTable().saveCommandUse(copyFromDB.getCommandUseTable().getCommandUse());
|
||||
clearAndCopyToDB.getTpsTable().saveTPSData(copyFromDB.getTpsTable().getTPSData());
|
||||
} catch (SQLException | NullPointerException e) {
|
||||
Log.toLog("ManageUtils.move", e);
|
||||
return false;
|
||||
|
@ -1,17 +1,14 @@
|
||||
package main.java.com.djrapitops.plan.utilities;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import com.djrapitops.javaplugin.command.CommandUtils;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.util.Set;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Permissions;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -40,7 +37,7 @@ public class MiscUtils {
|
||||
* @param sender
|
||||
* @return
|
||||
*/
|
||||
public static String getPlayerName(String[] args, CommandSender sender) {
|
||||
public static String getPlayerName(String[] args, ISender sender) {
|
||||
return getPlayerName(args, sender, Permissions.INSPECT_OTHER);
|
||||
}
|
||||
|
||||
@ -52,13 +49,13 @@ public class MiscUtils {
|
||||
* @param perm
|
||||
* @return The name of the player (first argument or sender)
|
||||
*/
|
||||
public static String getPlayerName(String[] args, CommandSender sender, Permissions perm) {
|
||||
public static String getPlayerName(String[] args, ISender sender, Permissions perm) {
|
||||
String playerName = "";
|
||||
boolean isConsole = !(sender instanceof Player);
|
||||
boolean isConsole = CommandUtils.isConsole(sender);
|
||||
if (isConsole) {
|
||||
playerName = args[0];
|
||||
} else if (args.length > 0) {
|
||||
if (perm.userHasThisPermission(sender)) {
|
||||
if (sender.hasPermission(perm.getPermission())) {
|
||||
playerName = args[0];
|
||||
} else if (args[0].toLowerCase().equals(sender.getName().toLowerCase())) {
|
||||
playerName = sender.getName();
|
||||
|
@ -41,18 +41,19 @@ public class NewPlayerCreator {
|
||||
* @return a new UserData object
|
||||
*/
|
||||
public static UserData createNewPlayer(OfflinePlayer player, GameMode gm) {
|
||||
UserData data = new UserData(player, new DemographicsData());
|
||||
long registered = player.getFirstPlayed();
|
||||
UserData data = new UserData(player.getUniqueId(), registered, null, player.isOp(), GameMode.SURVIVAL, new DemographicsData(), player.getName(), player.isOnline());
|
||||
data.setLastGamemode(gm);
|
||||
data.setLastPlayed(MiscUtils.getTime());
|
||||
long zero = Long.parseLong("0");
|
||||
data.setPlayTime(zero);
|
||||
data.setPlayTime(0L);
|
||||
data.setTimesKicked(0);
|
||||
data.setLoginTimes(0);
|
||||
data.setLastGmSwapTime(zero);
|
||||
data.setLastGmSwapTime(0L);
|
||||
data.setDeaths(0);
|
||||
data.setMobKills(0);
|
||||
Log.debug(player.getUniqueId()+": Created a new UserData object.");
|
||||
data.setBanned(false);
|
||||
Log.debug(player.getUniqueId() + ": Created a new UserData object.");
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -451,4 +451,13 @@ public class Analysis {
|
||||
public boolean isAnalysisBeingRun() {
|
||||
return taskId != -1;
|
||||
}
|
||||
|
||||
public void setTaskId(int id) {
|
||||
if (id == -2) {
|
||||
plugin.processStatus().setStatus("Analysis", "Temporarily Disabled");
|
||||
} else if (id == -1) {
|
||||
plugin.processStatus().setStatus("Analysis", "Enabled");
|
||||
}
|
||||
taskId = id;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.utilities.comparators;
|
||||
|
||||
import java.util.Comparator;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Risto
|
||||
*/
|
||||
public class UserDataLastPlayedComparator implements Comparator<UserData> {
|
||||
@Override
|
||||
public int compare(UserData u1, UserData u2) {
|
||||
return Long.compare(u1.getLastPlayed(), u2.getLastPlayed());
|
||||
}
|
||||
}
|
@ -5,11 +5,12 @@
|
||||
*/
|
||||
package test.java.main.java.com.djrapitops.plan.utilities;
|
||||
|
||||
import com.djrapitops.javaplugin.command.sender.BukkitCMDSender;
|
||||
import com.djrapitops.javaplugin.command.sender.ISender;
|
||||
import java.util.Set;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.easymock.EasyMock;
|
||||
import static org.junit.Assert.*;
|
||||
@ -58,7 +59,7 @@ public class MiscUtilsTest {
|
||||
@Test
|
||||
public void testGetPlayerDisplaynameArgsPerm() {
|
||||
String[] args = new String[]{"Rsl1122", "Test"};
|
||||
CommandSender sender = MockUtils.mockPlayer();
|
||||
ISender sender = new BukkitCMDSender(MockUtils.mockPlayer());
|
||||
String expResult = "Rsl1122";
|
||||
String result = MiscUtils.getPlayerName(args, sender);
|
||||
assertEquals(expResult, result);
|
||||
@ -70,7 +71,7 @@ public class MiscUtilsTest {
|
||||
@Test
|
||||
public void testGetPlayerDisplaynameArgsNoPerm() {
|
||||
String[] args = new String[]{"Rsl1122", "Test"};
|
||||
CommandSender sender = MockUtils.mockPlayer();
|
||||
ISender sender = new BukkitCMDSender(MockUtils.mockPlayer());
|
||||
String expResult = "Rsl1122";
|
||||
String result = MiscUtils.getPlayerName(args, sender);
|
||||
assertEquals(expResult, result);
|
||||
@ -82,7 +83,7 @@ public class MiscUtilsTest {
|
||||
@Test
|
||||
public void testGetPlayerDisplaynameNoArgsPerm() {
|
||||
String[] args = new String[]{};
|
||||
CommandSender sender = MockUtils.mockPlayer();
|
||||
ISender sender = new BukkitCMDSender(MockUtils.mockPlayer());
|
||||
String expResult = "TestName";
|
||||
String result = MiscUtils.getPlayerName(args, sender);
|
||||
assertEquals(expResult, result);
|
||||
@ -94,7 +95,7 @@ public class MiscUtilsTest {
|
||||
@Test
|
||||
public void testGetPlayerDisplaynameNoArgsNoPerm() {
|
||||
String[] args = new String[]{};
|
||||
CommandSender sender = MockUtils.mockPlayer2();
|
||||
ISender sender = new BukkitCMDSender(MockUtils.mockPlayer2());
|
||||
String expResult = "TestName2";
|
||||
String result = MiscUtils.getPlayerName(args, sender);
|
||||
assertEquals(expResult, result);
|
||||
@ -106,7 +107,7 @@ public class MiscUtilsTest {
|
||||
@Test
|
||||
public void testGetPlayerDisplaynameOwnNameNoPerm() {
|
||||
String[] args = new String[]{"testname2"};
|
||||
CommandSender sender = MockUtils.mockPlayer2();
|
||||
ISender sender = new BukkitCMDSender(MockUtils.mockPlayer2());
|
||||
String expResult = "TestName2";
|
||||
String result = MiscUtils.getPlayerName(args, sender);
|
||||
assertEquals(expResult, result);
|
||||
@ -118,7 +119,7 @@ public class MiscUtilsTest {
|
||||
@Test
|
||||
public void testGetPlayerDisplaynameConsole() {
|
||||
String[] args = new String[]{"TestConsoleSender"};
|
||||
CommandSender sender = MockUtils.mockConsoleSender();
|
||||
ISender sender = new BukkitCMDSender(MockUtils.mockConsoleSender());
|
||||
String expResult = "TestConsoleSender";
|
||||
String result = MiscUtils.getPlayerName(args, sender);
|
||||
assertEquals(expResult, result);
|
||||
|
@ -6,6 +6,7 @@
|
||||
package test.java.utils;
|
||||
|
||||
import com.djrapitops.javaplugin.status.ProcessStatus;
|
||||
import com.djrapitops.javaplugin.utilities.BenchmarkUtil;
|
||||
import com.djrapitops.javaplugin.utilities.log.BukkitLog;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@ -72,6 +73,8 @@ public class TestInit {
|
||||
when(planMock.getPluginLogger()).thenReturn(log);
|
||||
ProcessStatus<Plan> process = new ProcessStatus(planMock);
|
||||
when(planMock.processStatus()).thenReturn(process);
|
||||
BenchmarkUtil bench = new BenchmarkUtil();
|
||||
when(planMock.benchmark()).thenReturn(bench);
|
||||
Plan.setInstance(planMock);
|
||||
// Mockito.doReturn("0.0.0.0").when(planMock).getServer().getIp();
|
||||
Settings.DEBUG.setValue(true);
|
||||
|
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package com.djrapitops.pluginbridge.plan;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class FakeOfflinePlayer implements OfflinePlayer {
|
||||
|
||||
private final UserData data;
|
||||
|
||||
public FakeOfflinePlayer(UserData data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOnline() {
|
||||
return data.isOnline();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return data.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getUniqueId() {
|
||||
return data.getUuid();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBanned() {
|
||||
return data.isBanned();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBanned(boolean bln) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWhitelisted() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWhitelisted(boolean bln) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Player getPlayer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getFirstPlayed() {
|
||||
return data.getRegistered();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastPlayed() {
|
||||
return data.getLastPlayed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayedBefore() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getBedSpawnLocation() {
|
||||
return new Location(null, 0, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOp() {
|
||||
return data.isOp();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOp(boolean bln) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> serialize() {
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
}
|
@ -21,7 +21,7 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
*/
|
||||
public class AdvancedAchievementsAchievements extends PluginData {
|
||||
|
||||
private AdvancedAchievementsAPI aaAPI;
|
||||
private final AdvancedAchievementsAPI aaAPI;
|
||||
private long lastRefresh;
|
||||
private Map<UUID, Integer> totalAchievements;
|
||||
|
||||
@ -43,7 +43,7 @@ public class AdvancedAchievementsAchievements extends PluginData {
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
if (MiscUtils.getTime() - lastRefresh > 60000) {
|
||||
totalAchievements = aaAPI.getPlayersTotalAchievements();
|
||||
refreshTotalAchievements();
|
||||
}
|
||||
Integer total = totalAchievements.get(uuid);
|
||||
if (total != null) {
|
||||
@ -52,10 +52,15 @@ public class AdvancedAchievementsAchievements extends PluginData {
|
||||
return parseContainer(modifierPrefix, 0 + "");
|
||||
}
|
||||
|
||||
private void refreshTotalAchievements() {
|
||||
totalAchievements = aaAPI.getPlayersTotalAchievements();
|
||||
lastRefresh = MiscUtils.getTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
if (MiscUtils.getTime() - lastRefresh > 60000) {
|
||||
totalAchievements = aaAPI.getPlayersTotalAchievements();
|
||||
refreshTotalAchievements();
|
||||
}
|
||||
Integer total = totalAchievements.get(uuid);
|
||||
if (total != null) {
|
||||
|
@ -24,7 +24,7 @@ import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
*/
|
||||
public class AdvancedAchievementsTable extends PluginData {
|
||||
|
||||
private AdvancedAchievementsAPI aaAPI;
|
||||
private final AdvancedAchievementsAPI aaAPI;
|
||||
|
||||
/**
|
||||
* Class Constructor, sets the parameters of the PluginData object.
|
||||
|
@ -20,7 +20,7 @@ import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
*/
|
||||
public class EssentialsJailed extends PluginData {
|
||||
|
||||
private Essentials essentials;
|
||||
private final Essentials essentials;
|
||||
|
||||
/**
|
||||
* Class Constructor, sets the parameters of the PluginData object.
|
||||
|
@ -20,7 +20,7 @@ import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
*/
|
||||
public class EssentialsMuted extends PluginData {
|
||||
|
||||
private Essentials essentials;
|
||||
private final Essentials essentials;
|
||||
|
||||
/**
|
||||
* Class Constructor, sets the parameters of the PluginData object.
|
||||
|
@ -2,13 +2,6 @@ package com.djrapitops.pluginbridge.plan.factions;
|
||||
|
||||
import main.java.com.djrapitops.plan.data.additional.HookHandler;
|
||||
import com.djrapitops.pluginbridge.plan.Hook;
|
||||
import com.massivecraft.factions.entity.Faction;
|
||||
import com.massivecraft.factions.entity.FactionColl;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.api.API;
|
||||
|
||||
/**
|
||||
@ -33,26 +26,7 @@ public class FactionsHook extends Hook {
|
||||
hookH.addPluginDataSource(new FactionsFaction());
|
||||
hookH.addPluginDataSource(new FactionsPower());
|
||||
hookH.addPluginDataSource(new FactionsMaxPower());
|
||||
hookH.addPluginDataSource(new FactionsTable(this.getTopFactions()));
|
||||
hookH.addPluginDataSource(new FactionsTable());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get the list of Factions and filter out unnessecary ones.
|
||||
*
|
||||
* @return List of Factions sorted by power
|
||||
*/
|
||||
public List<Faction> getTopFactions() {
|
||||
List<Faction> topFactions = new ArrayList<>();
|
||||
topFactions.addAll(FactionColl.get().getAll());
|
||||
topFactions.remove(FactionColl.get().getWarzone());
|
||||
topFactions.remove(FactionColl.get().getSafezone());
|
||||
topFactions.remove(FactionColl.get().getNone());
|
||||
List<String> hide = Settings.HIDE_FACTIONS.getStringList();
|
||||
Collections.sort(topFactions, new FactionComparator());
|
||||
List<Faction> factionNames = topFactions.stream()
|
||||
.filter(faction -> !hide.contains(faction.getName()))
|
||||
.collect(Collectors.toList());
|
||||
return factionNames;
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,15 @@
|
||||
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 java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
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.ui.Html;
|
||||
@ -29,20 +34,39 @@ public class FactionsTable extends PluginData {
|
||||
*
|
||||
* Uses Html to easily parse Html for the table.
|
||||
*
|
||||
* @param factions List of filtered Factions.
|
||||
* @see FactionsHook
|
||||
* @see Html
|
||||
*/
|
||||
public FactionsTable(List<Faction> factions) {
|
||||
public FactionsTable() {
|
||||
super("Factions", "factionstable", AnalysisType.HTML);
|
||||
this.factions = factions;
|
||||
this.factions = getTopFactions();
|
||||
super.setPrefix(Html.TABLE_FACTIONS_START.parse());
|
||||
super.setSuffix(Html.TABLE_END.parse());
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get the list of Factions and filter out unnessecary ones.
|
||||
*
|
||||
* @return List of Factions sorted by power
|
||||
*/
|
||||
public final List<Faction> getTopFactions() {
|
||||
List<Faction> topFactions = new ArrayList<>();
|
||||
topFactions.addAll(FactionColl.get().getAll());
|
||||
topFactions.remove(FactionColl.get().getWarzone());
|
||||
topFactions.remove(FactionColl.get().getSafezone());
|
||||
topFactions.remove(FactionColl.get().getNone());
|
||||
List<String> hide = Settings.HIDE_FACTIONS.getStringList();
|
||||
Collections.sort(topFactions, new FactionComparator());
|
||||
List<Faction> factionNames = topFactions.stream()
|
||||
.filter(faction -> !hide.contains(faction.getName()))
|
||||
.collect(Collectors.toList());
|
||||
return factionNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
StringBuilder html = new StringBuilder();
|
||||
this.factions = getTopFactions();
|
||||
if (factions.isEmpty()) {
|
||||
html.append(Html.TABLELINE_4.parse(Html.FACTION_NO_FACTIONS.parse(), "", "", ""));
|
||||
} else {
|
||||
|
@ -24,6 +24,7 @@ public class OnTimeImporter extends Importer {
|
||||
* Constructor.
|
||||
*/
|
||||
public OnTimeImporter() {
|
||||
super.setInfo("Imports playtime from OnTime & resets GMTimes to survival");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -35,7 +36,7 @@ public class OnTimeImporter extends Importer {
|
||||
* @return HandlingInfo object
|
||||
*/
|
||||
@Override
|
||||
public HandlingInfo importData(UUID uuid) {
|
||||
public HandlingInfo importData(UUID uuid, String... args) {
|
||||
OfflinePlayer p = getOfflinePlayer(uuid);
|
||||
Long playTime = OnTimeAPI.getPlayerTimeData(p.getName(), OnTimeAPI.data.TOTALPLAY);
|
||||
return new HandlingInfo(uuid, InfoType.OTHER, 0L) {
|
||||
|
@ -4,7 +4,6 @@ import com.gamingmesh.jobs.Jobs;
|
||||
import com.gamingmesh.jobs.PlayerManager;
|
||||
import com.gamingmesh.jobs.container.JobProgression;
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -16,7 +15,6 @@ import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.ui.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.MathUtils;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayers;
|
||||
|
||||
/**
|
||||
* PluginData class for Jobs-plugin.
|
||||
|
@ -2,11 +2,11 @@ package com.djrapitops.pluginbridge.plan.ontime;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import me.edge209.OnTime.OnTimeAPI;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* PluginData class for Ontime-plugin.
|
||||
@ -33,11 +33,11 @@ public class OntimeRefer extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "No Referrals.");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.TOTALREFER);
|
||||
if (referTotal == -1) {
|
||||
return parseContainer(modifierPrefix, "No Referrals.");
|
||||
@ -47,11 +47,11 @@ public class OntimeRefer extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return -1L;
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.TOTALREFER);
|
||||
if (referTotal == -1) {
|
||||
return -1L;
|
||||
|
@ -1,7 +1,11 @@
|
||||
package com.djrapitops.pluginbridge.plan.ontime;
|
||||
|
||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import me.edge209.OnTime.OnTimeAPI;
|
||||
@ -33,11 +37,11 @@ public class OntimeReferMonth extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "No Referrals.");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.MONTHREFER);
|
||||
if (referTotal == -1) {
|
||||
return parseContainer(modifierPrefix, "No Referrals.");
|
||||
@ -47,11 +51,11 @@ public class OntimeReferMonth extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return -1L;
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.MONTHREFER);
|
||||
if (referTotal == -1) {
|
||||
return -1L;
|
||||
|
@ -2,11 +2,11 @@ package com.djrapitops.pluginbridge.plan.ontime;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import me.edge209.OnTime.OnTimeAPI;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* PluginData class for Ontime-plugin.
|
||||
@ -33,11 +33,11 @@ public class OntimeReferWeek extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "No Referrals.");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.WEEKREFER);
|
||||
if (referTotal == -1) {
|
||||
return parseContainer(modifierPrefix, "No Referrals.");
|
||||
@ -47,11 +47,11 @@ public class OntimeReferWeek extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return -1L;
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long referTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.WEEKREFER);
|
||||
if (referTotal == -1) {
|
||||
return -1L;
|
||||
|
@ -2,11 +2,11 @@ package com.djrapitops.pluginbridge.plan.ontime;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import me.edge209.OnTime.OnTimeAPI;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* PluginData class for Ontime-plugin.
|
||||
@ -33,11 +33,11 @@ public class OntimeVotes extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "No votes.");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.TOTALVOTE);
|
||||
if (votesTotal == -1) {
|
||||
return parseContainer(modifierPrefix, "No votes.");
|
||||
@ -47,11 +47,11 @@ public class OntimeVotes extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return -1L;
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.TOTALVOTE);
|
||||
if (votesTotal == -1) {
|
||||
return -1L;
|
||||
|
@ -2,11 +2,11 @@ package com.djrapitops.pluginbridge.plan.ontime;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import me.edge209.OnTime.OnTimeAPI;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* PluginData class for Ontime-plugin.
|
||||
@ -33,11 +33,11 @@ public class OntimeVotesMonth extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "No votes.");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.MONTHVOTE);
|
||||
if (votesTotal == -1) {
|
||||
return parseContainer(modifierPrefix, "No votes.");
|
||||
@ -47,11 +47,11 @@ public class OntimeVotesMonth extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return -1L;
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.MONTHVOTE);
|
||||
if (votesTotal == -1) {
|
||||
return -1L;
|
||||
|
@ -2,11 +2,11 @@ package com.djrapitops.pluginbridge.plan.ontime;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import me.edge209.OnTime.OnTimeAPI;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* PluginData class for Ontime-plugin.
|
||||
@ -33,11 +33,11 @@ public class OntimeVotesWeek extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "No votes.");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.WEEKVOTE);
|
||||
if (votesTotal == -1) {
|
||||
return parseContainer(modifierPrefix, "No votes.");
|
||||
@ -47,11 +47,11 @@ public class OntimeVotesWeek extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return -1L;
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
long votesTotal = OnTimeAPI.getPlayerTimeData(name, OnTimeAPI.data.WEEKVOTE);
|
||||
if (votesTotal == -1) {
|
||||
return -1L;
|
||||
|
@ -2,12 +2,6 @@ package com.djrapitops.pluginbridge.plan.towny;
|
||||
|
||||
import main.java.com.djrapitops.plan.data.additional.HookHandler;
|
||||
import com.djrapitops.pluginbridge.plan.Hook;
|
||||
import com.palmergames.bukkit.towny.object.Town;
|
||||
import com.palmergames.bukkit.towny.object.TownyUniverse;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.api.API;
|
||||
|
||||
/**
|
||||
@ -30,23 +24,8 @@ public class TownyHook extends Hook {
|
||||
public TownyHook(HookHandler hookH) throws NoClassDefFoundError {
|
||||
super("com.palmergames.bukkit.towny.Towny");
|
||||
if (enabled) {
|
||||
hookH.addPluginDataSource(new TownyTable(getTopTowns()));
|
||||
hookH.addPluginDataSource(new TownyTable());
|
||||
hookH.addPluginDataSource(new TownyTown());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get the list of Towns and filter out unnessecary ones.
|
||||
*
|
||||
* @return List of Towns sorted by amount of residents.
|
||||
*/
|
||||
public List<Town> getTopTowns() {
|
||||
List<Town> topTowns = TownyUniverse.getDataSource().getTowns();
|
||||
Collections.sort(topTowns, new TownComparator());
|
||||
List<String> hide = Settings.HIDE_TOWNS.getStringList();
|
||||
List<Town> townNames = topTowns.stream()
|
||||
.filter(town -> !hide.contains(town.getName()))
|
||||
.collect(Collectors.toList());
|
||||
return townNames;
|
||||
}
|
||||
}
|
||||
|
@ -3,9 +3,13 @@ package com.djrapitops.pluginbridge.plan.towny;
|
||||
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 java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
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.ui.Html;
|
||||
@ -29,13 +33,11 @@ public class TownyTable extends PluginData {
|
||||
*
|
||||
* Uses Html to easily parse Html for the table.
|
||||
*
|
||||
* @param towns List of filtered Towns.
|
||||
* @see TownyHook
|
||||
* @see Html
|
||||
*/
|
||||
public TownyTable(List<Town> towns) {
|
||||
public TownyTable() {
|
||||
super("Towny", "townstable", AnalysisType.HTML);
|
||||
this.towns = towns;
|
||||
super.setPrefix(Html.TABLE_TOWNS_START.parse());
|
||||
super.setSuffix(Html.TABLE_END.parse());
|
||||
}
|
||||
@ -43,6 +45,7 @@ public class TownyTable extends PluginData {
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
StringBuilder html = new StringBuilder();
|
||||
this.towns = getTopTowns();
|
||||
if (towns.isEmpty()) {
|
||||
html.append(Html.TABLELINE_4.parse(Html.TOWN_NO_TOWNS.parse(), "", "", ""));
|
||||
} else {
|
||||
@ -67,6 +70,21 @@ public class TownyTable extends PluginData {
|
||||
return parseContainer(modifierPrefix, html.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get the list of Towns and filter out unnessecary ones.
|
||||
*
|
||||
* @return List of Towns sorted by amount of residents.
|
||||
*/
|
||||
public List<Town> getTopTowns() {
|
||||
List<Town> topTowns = TownyUniverse.getDataSource().getTowns();
|
||||
Collections.sort(topTowns, new TownComparator());
|
||||
List<String> hide = Settings.HIDE_TOWNS.getStringList();
|
||||
List<Town> townNames = topTowns.stream()
|
||||
.filter(town -> !hide.contains(town.getName()))
|
||||
.collect(Collectors.toList());
|
||||
return townNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
MPlayer mPlayer = MPlayer.get(uuid);
|
||||
|
@ -6,9 +6,9 @@ import com.palmergames.bukkit.towny.object.TownyUniverse;
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayer;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* PluginData class for Towny-plugin.
|
||||
@ -35,11 +35,11 @@ public class TownyTown extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, Phrase.NOT_IN_TOWN + "");
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
try {
|
||||
Resident res = TownyUniverse.getDataSource().getResident(name);
|
||||
String town;
|
||||
@ -56,11 +56,11 @@ public class TownyTown extends PluginData {
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
OfflinePlayer offlinePlayer = getOfflinePlayer(uuid);
|
||||
if (!offlinePlayer.hasPlayedBefore()) {
|
||||
return "";
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return Phrase.NOT_IN_TOWN + "";
|
||||
}
|
||||
String name = offlinePlayer.getName();
|
||||
String name = data.getName();
|
||||
try {
|
||||
Resident res = TownyUniverse.getDataSource().getResident(name);
|
||||
String town;
|
||||
@ -71,7 +71,7 @@ public class TownyTown extends PluginData {
|
||||
}
|
||||
return town;
|
||||
} catch (NotRegisteredException ex) {
|
||||
return "";
|
||||
return ex + "";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,11 @@
|
||||
package com.djrapitops.pluginbridge.plan.vault;
|
||||
|
||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
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;
|
||||
@ -22,7 +26,7 @@ import org.bukkit.OfflinePlayer;
|
||||
*/
|
||||
public class EconomyBalance extends PluginData {
|
||||
|
||||
private Economy econ;
|
||||
private final Economy econ;
|
||||
|
||||
/**
|
||||
* Class Constructor, sets the parameters of the PluginData object.
|
||||
@ -40,7 +44,11 @@ public class EconomyBalance extends PluginData {
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
OfflinePlayer p = getOfflinePlayer(uuid);
|
||||
UserData data = Plan.getPlanAPI().getInspectCachedUserDataMap().get(uuid);
|
||||
if (data == null) {
|
||||
return parseContainer(modifierPrefix, "0");
|
||||
}
|
||||
OfflinePlayer p = new FakeOfflinePlayer(data);
|
||||
if (this.econ.hasAccount(p)) {
|
||||
return parseContainer(modifierPrefix, this.econ.getBalance(p) + "");
|
||||
}
|
||||
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package com.djrapitops.pluginbridge.plan.vault;
|
||||
|
||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
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.ui.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
|
||||
/**
|
||||
* PluginData class for Vault-plugin.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 3.5.0
|
||||
*/
|
||||
public class EconomyBalanceTable extends PluginData {
|
||||
|
||||
private final Economy econ;
|
||||
|
||||
public EconomyBalanceTable(Economy econ) {
|
||||
super("Vault", "ecobalancetable", AnalysisType.HTML);
|
||||
this.econ = econ;
|
||||
String user = Html.FONT_AWESOME_ICON.parse("user") + " Player";
|
||||
String balance = Html.FONT_AWESOME_ICON.parse("money") + " Balance";
|
||||
super.setPrefix(Html.TABLE_START_2.parse(user, balance));
|
||||
super.setSuffix(Html.TABLE_END.parse());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
|
||||
String tableLines = getTableLines();
|
||||
return parseContainer("", tableLines);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable getValue(UUID uuid) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
private String getTableLines() {
|
||||
StringBuilder html = new StringBuilder();
|
||||
Plan.getPlanAPI().getInspectCachedUserData().stream()
|
||||
.forEach(data -> {
|
||||
String link = Html.LINK.parse(HtmlUtils.getInspectUrl(data.getName()), data.getName());
|
||||
String bal = FormatUtils.cutDecimals(econ.getBalance(new FakeOfflinePlayer(data)));
|
||||
html.append(Html.TABLELINE_2.parse(link, bal));
|
||||
});
|
||||
return html.toString();
|
||||
}
|
||||
|
||||
}
|
@ -5,16 +5,19 @@
|
||||
*/
|
||||
package com.djrapitops.pluginbridge.plan.vault;
|
||||
|
||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
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.ui.Html;
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import static org.bukkit.Bukkit.getOfflinePlayers;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
@ -49,7 +52,8 @@ public class PermGroupTable extends PluginData {
|
||||
|
||||
private String getTableLines() {
|
||||
Map<String, Integer> groups = new HashMap<>();
|
||||
for (OfflinePlayer p : getOfflinePlayers()) {
|
||||
List<FakeOfflinePlayer> userData = Plan.getPlanAPI().getInspectCachedUserData().stream().map(u -> new FakeOfflinePlayer(u)).collect(Collectors.toList());
|
||||
for (OfflinePlayer p : userData) {
|
||||
String group = permSys.getPrimaryGroup(null, p);
|
||||
if (!groups.containsKey(group)) {
|
||||
groups.put(group, 0);
|
||||
|
@ -31,15 +31,16 @@ public class VaultHook extends Hook {
|
||||
}
|
||||
|
||||
try {
|
||||
Economy econ = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
|
||||
hookH.addPluginDataSource(new EconomyBalance(econ));
|
||||
Permission permSys = getServer().getServicesManager().getRegistration(Permission.class).getProvider();
|
||||
hookH.addPluginDataSource(new PermGroup(permSys));
|
||||
hookH.addPluginDataSource(new PermGroupTable(permSys));
|
||||
} catch (Throwable e) {
|
||||
}
|
||||
|
||||
try {
|
||||
Permission permSys = getServer().getServicesManager().getRegistration(Permission.class).getProvider();
|
||||
// hookH.addPluginDataSource(new PermGroupTable(permSys)); // Disabled due to getOfflinePlayers method
|
||||
hookH.addPluginDataSource(new PermGroup(permSys));
|
||||
Economy econ = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
|
||||
hookH.addPluginDataSource(new EconomyBalance(econ));
|
||||
hookH.addPluginDataSource(new EconomyBalanceTable(econ));
|
||||
} catch (Throwable e) {
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user