Deleted a lot related to UserData

This commit is contained in:
Rsl1122 2017-08-21 20:26:08 +03:00
parent bc7df57c40
commit e4220574da
37 changed files with 96 additions and 2699 deletions

View File

@ -39,9 +39,7 @@ public class PlanCommand extends TreeCommand<Plan> {
@Override @Override
public void addCommands() { public void addCommands() {
commands.add(new InspectCommand(plugin)); commands.add(new InspectCommand(plugin));
commands.add(new QuickInspectCommand(plugin));
commands.add(new AnalyzeCommand(plugin)); commands.add(new AnalyzeCommand(plugin));
commands.add(new QuickAnalyzeCommand(plugin));
commands.add(new SearchCommand(plugin)); commands.add(new SearchCommand(plugin));
commands.add(new InfoCommand(plugin)); commands.add(new InfoCommand(plugin));
commands.add(new ReloadCommand(plugin)); commands.add(new ReloadCommand(plugin));

View File

@ -1,99 +0,0 @@
package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.command.CommandType;
import com.djrapitops.plugin.command.ISender;
import com.djrapitops.plugin.command.SubCommand;
import com.djrapitops.plugin.task.AbsRunnable;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.ConditionUtils;
import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler;
import main.java.com.djrapitops.plan.locale.Locale;
import main.java.com.djrapitops.plan.locale.Msg;
import main.java.com.djrapitops.plan.ui.text.TextUI;
import main.java.com.djrapitops.plan.utilities.Check;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
/**
* This subcommand is used to run the analysis and to view some of the data in
* game.
*
* @author Rsl1122
* @since 3.0.0
*/
@Deprecated
public class QuickAnalyzeCommand extends SubCommand {
private final Plan plugin;
private final AnalysisCacheHandler analysisCache;
/**
* Subcommand Constructor.
*
* @param plugin Current instance of Plan
*/
public QuickAnalyzeCommand(Plan plugin) {
super("qanalyze, qanalyse, qanalysis, qa",
CommandType.CONSOLE,
Permissions.QUICK_ANALYZE.getPermission(),
Locale.get(Msg.CMD_USG_QANALYZE).parse());
this.plugin = plugin;
analysisCache = plugin.getAnalysisCache();
}
@Override
public String[] addHelp() {
return Locale.get(Msg.CMD_HELP_PLAN).toArray();
}
@Override
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
if (!Check.isTrue(ConditionUtils.pluginHasViewCapability(), Locale.get(Msg.CMD_FAIL_NO_DATA_VIEW).toString(), sender)) {
return true;
}
if (!Check.isTrue(analysisCache.isAnalysisEnabled(), Locale.get(Msg.CMD_INFO_ANALYSIS_TEMP_DISABLE).toString(), sender)
&& !analysisCache.isCached()) {
return true;
}
updateCache();
runMessageSenderTask(sender);
return true;
}
private void updateCache() {
if (!analysisCache.isCached() || MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > TimeAmount.MINUTE.ms()) {
int bootAnID = plugin.getBootAnalysisTaskID();
if (bootAnID != -1) {
plugin.getServer().getScheduler().cancelTask(bootAnID);
}
analysisCache.updateCache();
}
}
private void runMessageSenderTask(ISender sender) {
plugin.getRunnableFactory().createNew(new AbsRunnable("QanalysisMessageSenderTask") {
private int timesRun = 0;
@Override
public void run() {
timesRun++;
if (analysisCache.isCached() && (!analysisCache.isAnalysisBeingRun() || !analysisCache.isAnalysisEnabled())) {
sender.sendMessage(Locale.get(Msg.CMD_HEADER_ANALYZE) + "");
sender.sendMessage(TextUI.getAnalysisMessages());
sender.sendMessage(Locale.get(Msg.CMD_CONSTANT_FOOTER) + "");
this.cancel();
}
if (timesRun > 10) {
Log.debug("Command Timeout Message, QuickAnalyze.");
sender.sendMessage(Locale.get(Msg.CMD_FAIL_TIMEOUT).parse("Analysis"));
this.cancel();
}
}
}).runTaskTimer(TimeAmount.SECOND.ticks(), 5 * TimeAmount.SECOND.ticks());
}
}

View File

@ -1,106 +0,0 @@
package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.command.CommandType;
import com.djrapitops.plugin.command.ISender;
import com.djrapitops.plugin.command.SubCommand;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.utilities.Verify;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.ConditionUtils;
import main.java.com.djrapitops.plan.data.cache.InspectCacheHandler;
import main.java.com.djrapitops.plan.locale.Locale;
import main.java.com.djrapitops.plan.locale.Msg;
import main.java.com.djrapitops.plan.ui.text.TextUI;
import main.java.com.djrapitops.plan.utilities.Check;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility;
import java.util.UUID;
/**
* This command is used to cache UserData to InspectCache and to view some of
* the data in game.
*
* @author Rsl1122
* @since 3.0.0
*/
@Deprecated
public class QuickInspectCommand extends SubCommand {
private final Plan plugin;
private final InspectCacheHandler inspectCache;
/**
* Class Constructor.
*
* @param plugin Current instance of Plan
*/
public QuickInspectCommand(Plan plugin) {
super("qinspect, qi",
CommandType.CONSOLE_WITH_ARGUMENTS,
Permissions.QUICK_INSPECT.getPermission(),
Locale.get(Msg.CMD_USG_QINSPECT).toString(), "<player>");
this.plugin = plugin;
inspectCache = plugin.getInspectCache();
}
@Override
public String[] addHelp() {
return Locale.get(Msg.CMD_HELP_QINSPECT).toArray();
}
@Override
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
String playerName = MiscUtils.getPlayerName(args, sender, Permissions.QUICK_INSPECT_OTHER);
plugin.getRunnableFactory().createNew(new AbsRunnable("QinspectTask") {
@Override
public void run() {
try {
UUID uuid = UUIDUtility.getUUIDOf(playerName);
if (!Check.isTrue(Verify.notNull(uuid), Locale.get(Msg.CMD_FAIL_USERNAME_NOT_VALID).toString(), sender)) {
return;
}
if (!Check.isTrue(ConditionUtils.playerHasPlayed(uuid), Locale.get(Msg.CMD_FAIL_USERNAME_NOT_SEEN).toString(), sender)) {
return;
}
if (!Check.isTrue(plugin.getDB().wasSeenBefore(uuid), Locale.get(Msg.CMD_FAIL_USERNAME_NOT_KNOWN).toString(), sender)) {
return;
}
sender.sendMessage(Locale.get(Msg.CMD_INFO_FETCH_DATA).toString());
inspectCache.cache(uuid);
runMessageSenderTask(uuid, sender, playerName);
} finally {
this.cancel();
}
}
}).runTaskAsynchronously();
return true;
}
private void runMessageSenderTask(UUID uuid, ISender sender, String playerName) {
plugin.getRunnableFactory().createNew(new AbsRunnable("QinspectMessageSenderTask") {
private int timesrun = 0;
@Override
public void run() {
timesrun++;
if (inspectCache.isCached(uuid)) {
sender.sendMessage(Locale.get(Msg.CMD_HEADER_INSPECT) + playerName);
sender.sendMessage(TextUI.getInspectMessages(uuid));
sender.sendMessage(Locale.get(Msg.CMD_CONSTANT_FOOTER) + "");
this.cancel();
}
if (timesrun > 10) {
Log.debug("Command Timeout Message, QuickInspect.");
sender.sendMessage(Locale.get(Msg.CMD_FAIL_TIMEOUT).parse("Qinspect"));
this.cancel();
}
}
}).runTaskTimer(TimeAmount.SECOND.ticks(), 5 * TimeAmount.SECOND.ticks());
}
}

View File

@ -1,15 +1,7 @@
package main.java.com.djrapitops.plan.data; package main.java.com.djrapitops.plan.data;
import com.djrapitops.plugin.utilities.Verify;
import com.djrapitops.plugin.utilities.player.IOfflinePlayer;
import com.djrapitops.plugin.utilities.player.IPlayer;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.data.time.GMTimes;
import main.java.com.djrapitops.plan.data.time.WorldTimes;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* This class is used for storing information about a player during runtime. * This class is used for storing information about a player during runtime.
@ -24,23 +16,26 @@ public class UserData {
private boolean clearAfterSave; private boolean clearAfterSave;
private UUID uuid; private UUID uuid;
private String name; //TODO DB Update code to JoinListener private String name; //TODO DB Update code to JoinListener
@Deprecated private Set<String> nicknames; //TODO DB Update code to ChatListener @Deprecated
@Deprecated private String lastNick; //TODO DB Update code to ChatListener private Set<String> nicknames; //TODO DB Update code to ChatListener
@Deprecated private String geolocation; //TODO DB Update code to JoinListener @Deprecated
@Deprecated private Set<InetAddress> ips; //TODO DB Update code to JoinListener private String lastNick; //TODO DB Update code to ChatListener
@Deprecated private int loginTimes; // Moving to sessions.size @Deprecated
@Deprecated private int timesKicked; //TODO DB Update code to KickListener private String geolocation; //TODO DB Update code to JoinListener
@Deprecated private boolean isOp; //TODO DB Update code to JoinListener @Deprecated
@Deprecated private boolean isBanned; //TODO DB Update code to JoinListener private Set<InetAddress> ips; //TODO DB Update code to JoinListener
@Deprecated private boolean isOnline; //TODO New Class for getting online status of players @Deprecated
@Deprecated private int mobKills; //TODO Move to SessionData private int timesKicked; //TODO DB Update code to KickListener
@Deprecated private List<KillData> playerKills; //TODO Move to SessionData @Deprecated
@Deprecated private int deaths; //TODO Move to SessionData private boolean isOp; //TODO DB Update code to JoinListener
@Deprecated private long registered; //TODO DB Update code to JoinListener (When registering) @Deprecated
@Deprecated private long lastPlayed; //TODO DB Update code to Join, Refresh, QuitListener private boolean isBanned; //TODO DB Update code to JoinListener
@Deprecated private long playTime; //TODO Move to SessionData @Deprecated
@Deprecated private GMTimes gmTimes; //TODO Move to WorldTimes private boolean isOnline; //TODO New Class for getting online status of players
@Deprecated private WorldTimes worldTimes; //TODO Move to SessionData @Deprecated
private long registered; //TODO DB Update code to JoinListener (When registering)
@Deprecated
private long lastPlayed; //TODO DB Update code to Join, Refresh, QuitListener
/** /**
* Creates a new UserData object with given values and default values. * Creates a new UserData object with given values and default values.
@ -58,88 +53,12 @@ public class UserData {
* worldTimes Map is left empty. * worldTimes Map is left empty.
* *
* @param uuid UUID of the player * @param uuid UUID of the player
* @param reg Epoch millisecond the player registered.
* @param op Is the player op? (true/false)
* @param name Name of the player. * @param name Name of the player.
* @param online Is the player online?
*/ */
public UserData(UUID uuid, long reg, boolean op, String gm, String name, boolean online) { public UserData(UUID uuid, String name) {
accessing = 0;
this.gmTimes = new GMTimes(gm);
// TODO REMOVE this.worldTimes = new WorldTimes();
this.uuid = uuid; this.uuid = uuid;
this.name = name; this.name = name;
lastNick = "";
nicknames = new HashSet<>();
ips = new HashSet<>();
geolocation = "Not Known";
isOp = op;
isOnline = online;
registered = reg;
sessions = new ArrayList<>(); sessions = new ArrayList<>();
playerKills = new ArrayList<>();
}
/**
* Creates a new UserData object with the variables inside a Player object.
* <p>
* Some variables are left uninitialized: lastPlayed, playTime, loginTimes,
* timesKicked, lastGmSwapTime, mobKills, deaths and currentSession.
* <p>
* These variables need to be set with setters.
* <p>
* All Collections are left empty: locations, nicknames, ips, sessions,
* playerKills. Because nicknames is empty, lastNick is an empty string.
* <p>
* gmTimes HashMap will contain 4 '0L' values: SURVIVAL, CREATIVE,
* ADVENTURE, SPECTATOR
*
* @param player IPlayer object.
*/
public UserData(IPlayer player) {
this(player.getUuid(), player.getFirstPlayed(), player.isOp(), player.getGamemode().name(), player.getName(), player.isOnline());
try {
isBanned = player.isBanned();
} catch (Exception e) {
Log.error("Error getting ban date from Bukkit files. " + uuid.toString());
Log.toLog(this.getClass().getName(), e);
isBanned = false;
}
}
/**
* Creates a new UserData object with the variables inside a OfflinePlayer
* object.
* <p>
* Some variables are left uninitialized: location, lastPlayed, playTime,
* loginTimes, timesKicked, lastGmSwapTime, mobKills, deaths and
* currentSession.
* <p>
* These variables need to be set with setters.
* <p>
* All Collections are left empty: locations, nicknames, ips, sessions,
* playerKills. Because nicknames is empty, lastNick is an empty string.
* <p>
* gmTimes HashMap will contain 4 '0L' values: SURVIVAL, CREATIVE,
* ADVENTURE, SPECTATOR
* <p>
* lastGM will be set as SURVIVAL
*
* @param player IOfflinePlayer object.
*/
public UserData(IOfflinePlayer player) {
this(player.getUniqueId(), player.getFirstPlayed(), player.isOp(), "SURVIVAL", player.getName(), player.isOnline());
try {
isBanned = player.isBanned();
} catch (Exception e) {
Log.error("Error getting ban date from Bukkit files. " + uuid.toString());
Log.toLog(this.getClass().getName(), e);
isBanned = false;
}
} }
/** /**
@ -148,160 +67,12 @@ public class UserData {
* @param data UserData to copy into the new object. * @param data UserData to copy into the new object.
*/ */
public UserData(UserData data) { public UserData(UserData data) {
this.accessing = 0;
this.uuid = data.getUuid(); this.uuid = data.getUuid();
this.ips = new HashSet<>();
ips.addAll(data.getIps());
this.nicknames = new HashSet<>();
nicknames.addAll(data.getNicknames());
this.lastNick = data.getLastNick();
this.registered = data.getRegistered();
this.lastPlayed = data.getLastPlayed();
this.playTime = data.getPlayTime();
this.loginTimes = data.getLoginTimes();
this.timesKicked = data.getTimesKicked();
this.gmTimes = data.getGmTimes();
this.worldTimes = data.getWorldTimes();
this.isOp = data.isOp();
this.isBanned = data.isBanned();
this.geolocation = data.getGeolocation();
this.mobKills = data.getMobKills();
this.playerKills = data.getPlayerKills();
this.deaths = data.getDeaths();
this.name = data.getName(); this.name = data.getName();
this.isOnline = data.isOnline();
this.sessions = new ArrayList<>(); this.sessions = new ArrayList<>();
sessions.addAll(data.getSessions()); sessions.addAll(data.getSessions());
} }
@Override
public String toString() {
try {
return "{" + "accessing:" + accessing + "|uuid:" + uuid + "|ips:" + ips + "|nicknames:" + nicknames + "|lastNick:" + lastNick + "|registered:" + registered + "|lastPlayed:" + lastPlayed + "|playTime:" + playTime + "|loginTimes:" + loginTimes + "|timesKicked:" + timesKicked + "|gm:" + gmTimes + "|world:" + worldTimes + "|isOp:" + isOp + "|isBanned:" + isBanned + "|geolocation:" + geolocation + "|mobKills:" + mobKills + "|playerKills:" + playerKills + "|deaths:" + deaths + "|name:" + name + "|isOnline:" + isOnline + "|sessions:" + sessions + '}';
} catch (Exception e) {
return "UserData: Error on toString:" + e;
}
}
/**
* Adds an to the ips Set if it is not null or the set doesn't contain it.
*
* @param ip InetAddress of the player.
*/
public void addIpAddress(InetAddress ip) {
if (Verify.notNull(ip)) {
ips.add(ip);
}
}
/**
* Adds multiple ips to the ips set if they're not null.
*
* @param addIps a Collection of InetAddresses the player has logged from.
*/
public void addIpAddresses(Collection<InetAddress> addIps) {
if (addIps.isEmpty()) {
return;
}
ips.addAll(addIps.stream().filter(Verify::notNull).collect(Collectors.toList()));
}
/**
* Adds a nickname to the nicknames Set.
* <p>
* null or empty values filtered.
* <p>
* lastNick will be set as the given parameter, if accepted.
*
* @param nick Displayname of the player.
* @return was lastNick updated?
*/
public boolean addNickname(String nick) {
if (!Verify.isEmpty(nick)) {
boolean isNew = !nicknames.contains(nick);
nicknames.add(nick);
if (isNew) {
lastNick = nick;
}
return isNew;
}
return false;
}
/**
* Adds nicknames to the nicknames Set.
* <p>
* null or empty values filtered.
*
* @param addNicks Collection of nicknames.
*/
public void addNicknames(Collection<String> addNicks) {
nicknames.addAll(addNicks.stream().filter(nick -> !Verify.isEmpty(nick)).collect(Collectors.toList()));
}
/**
* Adds a new SessionData to the sessions list.
* <p>
* null and invalid sessions filtered.
*
* @param session SessionData object
*/
@Deprecated
public void addSession(SessionData session) {
if (Verify.notNull(session) && session.isValid()) {
sessions.add(session);
}
}
/**
* Adds SessionData objects to the sessions list.
* <p>
* null and invalid sessions filtered.
*
* @param sessions Collection of SessionData objects.
*/
public void addSessions(Collection<SessionData> sessions) {
Collection<SessionData> filteredSessions = sessions.stream()
.filter(Verify::notNull)
.filter(SessionData::isValid)
.collect(Collectors.toList());
this.sessions.addAll(filteredSessions);
}
/**
* Changes the value of isBanned.
*
* @param isBanned Is the player banned?
*/
public void updateBanned(boolean isBanned) {
this.isBanned = isBanned;
}
/**
* Checks whether or not the UserData object is accessed by different save
* processes.
*
* @return true if accessed.
*/
public boolean isAccessed() {
return accessing > 0;
}
/**
* Accesses the UserData object to protect it from being cleared.
*/
public void access() {
accessing++;
}
/**
* Stops accessing the object so that it can now be cleared.
*/
public void stopAccessing() {
accessing--;
}
/** /**
* Used to get the UUID of the player. * Used to get the UUID of the player.
* *
@ -311,15 +82,6 @@ public class UserData {
return uuid; return uuid;
} }
/**
* Set the UUID.
*
* @param uuid UUID
*/
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
/** /**
* Get the InetAddress Set. * Get the InetAddress Set.
* *
@ -329,17 +91,6 @@ public class UserData {
return ips; return ips;
} }
/**
* Set the ips set.
*
* @param ips ips of the user.
*/
public void setIps(Set<InetAddress> ips) {
if (Verify.notNull(ips)) {
this.ips = ips;
}
}
/** /**
* Get the nickname String Set. * Get the nickname String Set.
* *
@ -349,17 +100,6 @@ public class UserData {
return nicknames; return nicknames;
} }
/**
* Set the nicknames set.
*
* @param nicknames nicknames of the user.
*/
public void setNicknames(Set<String> nicknames) {
if (Verify.notNull(nicknames)) {
this.nicknames = nicknames;
}
}
/** /**
* Get the Epoch millisecond the player registered. * Get the Epoch millisecond the player registered.
* *
@ -369,15 +109,6 @@ public class UserData {
return registered; return registered;
} }
/**
* Set the time the user was registered.
*
* @param registered Epoch millisecond of register time.
*/
public void setRegistered(long registered) {
this.registered = registered;
}
/** /**
* Get the Epoch millisecond the player was last seen. * Get the Epoch millisecond the player was last seen.
* <p> * <p>
@ -390,39 +121,6 @@ public class UserData {
return lastPlayed; return lastPlayed;
} }
/**
* Set the time the user was last seen.
* <p>
* Affects playtime calculation, playtime should be updated before updating
* this value.
*
* @param lastPlayed Epoch millisecond of last seen moment.
*/
public void setLastPlayed(long lastPlayed) {
this.lastPlayed = lastPlayed;
}
/**
* Get the playtime in milliseconds.
* <p>
* NOT INITIALIZED BY CONSTRUCTORS. Value is updated periodically by cache
* if the player is online.
*
* @return time in ms.
*/
public long getPlayTime() {
return playTime;
}
/**
* Set the time the user has been playing.
*
* @param playTime Time in ms.
*/
public void setPlayTime(long playTime) {
this.playTime = playTime;
}
/** /**
* Get how many times the player has logged in. * Get how many times the player has logged in.
* <p> * <p>
@ -431,18 +129,7 @@ public class UserData {
* @return 0 to Integer.MAX * @return 0 to Integer.MAX
*/ */
public int getLoginTimes() { public int getLoginTimes() {
return loginTimes; return sessions.size();
}
/**
* Set how many times the user has logged in.
* <p>
* No check for input.
*
* @param loginTimes 0 to Int.MAX
*/
public void setLoginTimes(int loginTimes) {
this.loginTimes = loginTimes;
} }
/** /**
@ -456,45 +143,6 @@ public class UserData {
return timesKicked; return timesKicked;
} }
/**
* Set how many times the user has been kicked.
* <p>
* No check for input.
*
* @param timesKicked 0 to Int.MAX
*/
public void setTimesKicked(int timesKicked) {
this.timesKicked = timesKicked;
}
/**
* Get the GMTimes object.
*
* @return TimeKeeper object with possible keys of SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR
*/
public GMTimes getGmTimes() {
return gmTimes;
}
/**
* Set the GM Times object containing playtime in each gamemode.
*
* @param gmTimes GM Times object
*/
public void setGmTimes(GMTimes gmTimes) {
if (Verify.notNull(gmTimes)) {
this.gmTimes = gmTimes;
}
}
public void setGmTimes(Map<String, Long> times) {
if (Verify.notNull(times)) {
for (Map.Entry<String, Long> entry : times.entrySet()) {
gmTimes.setTime(entry.getKey(), entry.getValue());
}
}
}
/** /**
* Is the user Operator? * Is the user Operator?
* *
@ -513,15 +161,6 @@ public class UserData {
return isBanned; return isBanned;
} }
/**
* Set the banned value.
*
* @param isBanned true/false
*/
public void setBanned(boolean isBanned) {
this.isBanned = isBanned;
}
/** /**
* Get the username of the player. * Get the username of the player.
* *
@ -531,107 +170,6 @@ public class UserData {
return name; return name;
} }
/**
* Set the username of the user.
*
* @param name username.
*/
public void setName(String name) {
this.name = name;
}
/**
* Set whether or not player is op.
*
* @param isOp operator?
*/
public void setIsOp(boolean isOp) {
this.isOp = isOp;
}
/**
* Is the player online?
*
* @return true if data is cached to datacache, false if not.
*/
public boolean isOnline() {
return isOnline;
}
/**
* Set the online value.
*
* @param isOnline true/false
*/
public void setOnline(boolean isOnline) {
this.isOnline = isOnline;
}
/**
* Get how many mob kills the player has.
*
* @return 0 to Int.MAX
*/
public int getMobKills() {
return mobKills;
}
/**
* Get how many mob kills the player has.
*
* @param mobKills 0 to Int.MAX
*/
public void setMobKills(int mobKills) {
this.mobKills = mobKills;
}
/**
* Get the player kills list.
*
* @return playerkills list.
*/
public List<KillData> getPlayerKills() {
return playerKills;
}
/**
* Set the playerkills list.
*
* @param playerKills list of players kills.
*/
public void setPlayerKills(List<KillData> playerKills) {
if (Verify.notNull(playerKills)) {
this.playerKills = playerKills;
}
}
/**
* Add a Killdata to player's kills list.
*
* @param kill KillData representing a player kill.
*/
public void addPlayerKill(KillData kill) {
playerKills.add(kill);
}
/**
* Get how many times the player has died.
*
* @return 0 to Int.MAX
*/
public int getDeaths() {
return deaths;
}
/**
* Set how many times the player has died.
*
* @param deaths 0 to Int.MAX
*/
public void setDeaths(int deaths) {
this.deaths = deaths;
}
/** /**
* Get the sessions of a player. * Get the sessions of a player.
* *
@ -641,89 +179,13 @@ public class UserData {
return sessions; return sessions;
} }
/**
* Get the last nickname the user has set.
* <p>
* Set when using addNickname(String)
*
* @return last nickname used.
*/
public String getLastNick() {
return lastNick;
}
/**
* Set the last nickname the user has set.
* <p>
* Also set when using addNickname(String)
*
* @param lastNick last nickname used.
*/
public void setLastNick(String lastNick) {
this.lastNick = lastNick;
}
public WorldTimes getWorldTimes() {
return worldTimes;
}
public void setWorldTimes(WorldTimes worldTimes) {
this.worldTimes = worldTimes;
}
/**
* Check whether or not the object should be cleared from cache after it has
* been saved.
*
* @return true/false
*/
public boolean shouldClearAfterSave() {
return clearAfterSave;
}
/**
* Set whether or not the object should be cleared from cache after it has
* been saved.
*
* @param clearAfterSave true/false
*/
public void setClearAfterSave(boolean clearAfterSave) {
this.clearAfterSave = clearAfterSave;
}
public String getGeolocation() {
return geolocation;
}
public void setGeolocation(String geolocation) {
this.geolocation = geolocation;
}
@Override @Override
public int hashCode() { public int hashCode() {
int result = sessions.hashCode(); int result = sessions.hashCode();
result = 31 * result + accessing; result = 31 * result + accessing;
result = 31 * result + (clearAfterSave ? 1 : 0); result = 31 * result + (clearAfterSave ? 1 : 0);
result = 31 * result + uuid.hashCode(); result = 31 * result + uuid.hashCode();
result = 31 * result + ips.hashCode();
result = 31 * result + nicknames.hashCode();
result = 31 * result + lastNick.hashCode();
result = 31 * result + (int) (registered ^ (registered >>> 32));
result = 31 * result + (int) (lastPlayed ^ (lastPlayed >>> 32));
result = 31 * result + (int) (playTime ^ (playTime >>> 32));
result = 31 * result + loginTimes;
result = 31 * result + timesKicked;
result = 31 * result + gmTimes.hashCode();
result = 31 * result + worldTimes.hashCode();
result = 31 * result + (isOp ? 1 : 0);
result = 31 * result + (isBanned ? 1 : 0);
result = 31 * result + geolocation.hashCode();
result = 31 * result + mobKills;
result = 31 * result + playerKills.hashCode();
result = 31 * result + deaths;
result = 31 * result + name.hashCode(); result = 31 * result + name.hashCode();
result = 31 * result + (isOnline ? 1 : 0);
return result; return result;
} }
@ -741,20 +203,17 @@ public class UserData {
final UserData other = (UserData) obj; final UserData other = (UserData) obj;
return this.registered == other.registered return Objects.equals(this.name, other.name)
&& this.playTime == other.playTime
&& this.loginTimes == other.loginTimes
&& this.timesKicked == other.timesKicked
&& this.mobKills == other.mobKills
&& this.deaths == other.deaths
&& Objects.equals(this.lastNick, other.lastNick)
&& Objects.equals(this.name, other.name)
&& Objects.equals(this.uuid, other.uuid) && Objects.equals(this.uuid, other.uuid)
&& Objects.equals(this.ips, other.ips)
&& Objects.equals(this.nicknames, other.nicknames)
&& Objects.equals(this.gmTimes, other.gmTimes)
&& Objects.equals(this.worldTimes, other.worldTimes)
&& Objects.equals(this.playerKills, other.playerKills)
&& Objects.equals(this.sessions, other.sessions); && Objects.equals(this.sessions, other.sessions);
} }
public long getPlayTime() {
return 0; //TODO Use Sessions
}
public List<String> getGeolocations() {
// TODO
return null;
}
} }

View File

@ -1,7 +1,6 @@
package main.java.com.djrapitops.plan.data.cache; package main.java.com.djrapitops.plan.data.cache;
import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -65,21 +64,6 @@ public class SessionCache {
return activeSessions.get(uuid); return activeSessions.get(uuid);
} }
/**
* Add a session to the UserData object if it is cached and has been ended.
*
* @param data UserData object a session should be added to.
*/
@Deprecated
public void addSession(UserData data) {
UUID uuid = data.getUuid();
SessionData currentSession = activeSessions.get(uuid);
if (currentSession != null && currentSession.isValid() && !data.getSessions().contains(currentSession)) {
data.addSession(currentSession);
activeSessions.remove(uuid);
}
}
/** /**
* Used to get the Map of active sessions. * Used to get the Map of active sessions.
* <p> * <p>

View File

@ -1,31 +0,0 @@
package main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
/**
* Class containing static methods for processing information contained in a
* ChatEvent.
*
* @author Rsl1122
* @since 3.0.0
*/
public class ChatHandling {
/**
* Constructor used to hide the public constructor
*/
private ChatHandling() {
throw new IllegalStateException("Utility class");
}
/**
* Processes the information of the Event and changes UserData object
* accordingly.
*
* @param data UserData of the player.
* @param nickname Nickname of the player during the event.
*/
public static void processChatInfo(UserData data, String nickname) {
data.addNickname(nickname);
}
}

View File

@ -2,7 +2,6 @@ package main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.KillData;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import org.apache.commons.lang3.text.WordUtils; import org.apache.commons.lang3.text.WordUtils;
import org.bukkit.Material; import org.bukkit.Material;
@ -48,12 +47,12 @@ public class KillHandling {
if (victimID == -1) { if (victimID == -1) {
return; return;
} }
data.addPlayerKill(new KillData(victimUUID, victimID, weaponName, time)); //TODO Move to Session data.addPlayerKill(new KillData(victimUUID, victimID, weaponName, time));
} catch (SQLException e) { } catch (SQLException e) {
Log.toLog("main.java.com.djrapitops.plan.KillHandling", e); Log.toLog("main.java.com.djrapitops.plan.KillHandling", e);
} }
} else { } else {
data.setMobKills(data.getMobKills() + 1); //TODO Move to Session data.setMobKills(data.getMobKills() + 1);
} }
} }

View File

@ -1,58 +0,0 @@
package main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.cache.GeolocationCacheHandler;
import java.net.InetAddress;
/**
* Class containing static methods for processing information contained in a
* JoinEvent.
*
* @author Rsl1122
* @since 3.0.0
*/
public class LoginHandling {
/**
* Utility Class, hides constructor.
*/
private LoginHandling() {
throw new IllegalStateException("Utility Class.");
}
/**
* Processes the information of the Event and changes UserData object
* accordingly.
*
* @param data UserData of the player.
* @param time Epoch ms the event occurred.
* @param ip IP of the player
* @param banned Is the player banned
* @param nickname Nickname of the player
* @param loginTimes amount the loginTimes should be incremented with.
*/
public static void processLoginInfo(UserData data, long time, InetAddress ip, boolean banned, String nickname, int loginTimes) {
data.setLastPlayed(time);
data.updateBanned(banned);
data.setLoginTimes(data.getLoginTimes() + loginTimes);
data.addNickname(nickname);
data.addIpAddress(ip);
updateGeolocation(ip, data);
}
/**
* Updates the geolocation of the player.
* <p>
* Uses free service of freegeoip.net. 15000 requests can be sent per hour.
*
* @param ip InetAddress used for location.
* @param data UserData of the player.
* @see GeolocationCacheHandler
*/
public static void updateGeolocation(InetAddress ip, UserData data) {
String geoLocation = GeolocationCacheHandler.getCountry(ip.getHostAddress());
data.setGeolocation(geoLocation);
}
}

View File

@ -1,34 +0,0 @@
package main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
/**
* Class containing static methods for processing information contained in a
* QuitEvent.
*
* @author Rsl1122
* @since 3.0.0
*/
public class LogoutHandling {
/**
* Constructor used to hide the public constructor
*/
private LogoutHandling() {
throw new IllegalStateException("Utility class");
}
/**
* Processes the information of the Event and changes UserData object
* accordingly.
*
* @param data UserData of the player.
* @param time Epoch ms the event occurred.
* @param banned Is the player banned?
*/
public static void processLogoutInfo(UserData data, long time, boolean banned) {
data.setPlayTime(data.getPlayTime() + (time - data.getLastPlayed()));
data.setLastPlayed(time);
data.updateBanned(banned);
}
}

View File

@ -1,32 +0,0 @@
package main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.time.GMTimes;
import main.java.com.djrapitops.plan.data.time.WorldTimes;
public class PlaytimeHandling {
/**
* Constructor used to hide the public constructor
*/
private PlaytimeHandling() {
throw new IllegalStateException("Utility class");
}
public static void processPlaytimeDependentInfo(UserData data, long time, String gamemode, String worldName) {
long diff = time - data.getLastPlayed();
long playTime = data.getPlayTime() + diff;
data.setPlayTime(playTime);
data.setLastPlayed(time);
GMTimes gmTimes = data.getGmTimes();
if (gamemode != null) {
gmTimes.changeState(gamemode, playTime);
} else {
gmTimes.changeState(gmTimes.getState(), playTime);
}
WorldTimes worldTimes = data.getWorldTimes();
// TODO worldTimes.changeState(worldName, playTime);
}
}

View File

@ -90,7 +90,6 @@ public abstract class Importer {
offlineP.parallelStream() offlineP.parallelStream()
.map(NewPlayerCreator::createNewOfflinePlayer) .map(NewPlayerCreator::createNewOfflinePlayer)
.forEach(newPlayer -> { .forEach(newPlayer -> {
newPlayer.setLastPlayed(newPlayer.getRegistered());
newUsers.add(newPlayer); newUsers.add(newPlayer);
if (milestones.contains(currentUser.incrementAndGet())) { if (milestones.contains(currentUser.incrementAndGet())) {
Log.debug(processName, "Creating new UserData objects: " + currentPercent.addAndGet(5) + "%"); Log.debug(processName, "Creating new UserData objects: " + currentPercent.addAndGet(5) + "%");

View File

@ -1,7 +1,6 @@
package main.java.com.djrapitops.plan.data.handling.info; package main.java.com.djrapitops.plan.data.handling.info;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.ChatHandling;
import java.util.UUID; import java.util.UUID;
@ -11,6 +10,7 @@ import java.util.UUID;
* @author Rsl1122 * @author Rsl1122
* @since 3.0.0 * @since 3.0.0
*/ */
@Deprecated // TODO Update Straight to db
public class ChatInfo extends HandlingInfo { public class ChatInfo extends HandlingInfo {
private final String nickname; private final String nickname;
@ -28,9 +28,6 @@ public class ChatInfo extends HandlingInfo {
@Override @Override
public void process(UserData uData) { public void process(UserData uData) {
if (!uData.getUuid().equals(uuid)) {
return;
}
ChatHandling.processChatInfo(uData, nickname);
} }
} }

View File

@ -26,6 +26,6 @@ public class DeathInfo extends HandlingInfo {
if (!uData.getUuid().equals(uuid)) { if (!uData.getUuid().equals(uuid)) {
return; return;
} }
uData.setDeaths(uData.getDeaths() + 1); //TODO uData.setDeaths(uData.getDeaths() + 1);
} }
} }

View File

@ -10,6 +10,7 @@ import java.util.UUID;
* @author Rsl1122 * @author Rsl1122
* @since 3.0.0 * @since 3.0.0
*/ */
@Deprecated //TODO Update Straight to db
public class KickInfo extends HandlingInfo { public class KickInfo extends HandlingInfo {
/** /**
@ -23,10 +24,6 @@ public class KickInfo extends HandlingInfo {
@Override @Override
public void process(UserData uData) { public void process(UserData uData) {
if (!uData.getUuid().equals(uuid)) {
return;
}
uData.setTimesKicked(uData.getTimesKicked() + 1);
} }
} }

View File

@ -1,7 +1,6 @@
package main.java.com.djrapitops.plan.data.handling.info; package main.java.com.djrapitops.plan.data.handling.info;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.LoginHandling;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.UUID; import java.util.UUID;
@ -12,6 +11,7 @@ import java.util.UUID;
* @author Rsl1122 * @author Rsl1122
* @since 3.0.0 * @since 3.0.0
*/ */
@Deprecated // TODO Update in listener to db
public class LoginInfo extends HandlingInfo { public class LoginInfo extends HandlingInfo {
private final InetAddress ip; private final InetAddress ip;
@ -63,10 +63,5 @@ public class LoginInfo extends HandlingInfo {
@Override @Override
public void process(UserData uData) { public void process(UserData uData) {
if (!uData.getUuid().equals(uuid)) {
return;
}
LoginHandling.processLoginInfo(uData, time, ip, banned, nickname, loginTimes);
playtimeDependentInfo.process(uData);
} }
} }

View File

@ -1,8 +1,6 @@
package main.java.com.djrapitops.plan.data.handling.info; package main.java.com.djrapitops.plan.data.handling.info;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.LogoutHandling;
import java.util.UUID; import java.util.UUID;
@ -12,10 +10,10 @@ import java.util.UUID;
* @author Rsl1122 * @author Rsl1122
* @since 3.0.0 * @since 3.0.0
*/ */
@Deprecated //TODO Update straight to db
public class LogoutInfo extends HandlingInfo { public class LogoutInfo extends HandlingInfo {
private final boolean banned; private final boolean banned;
private final SessionData sData;
private final PlaytimeDependentInfo playtimeDependentInfo; private final PlaytimeDependentInfo playtimeDependentInfo;
/** /**
@ -25,24 +23,15 @@ public class LogoutInfo extends HandlingInfo {
* @param time Epoch ms of the event. * @param time Epoch ms of the event.
* @param banned Is the player banned * @param banned Is the player banned
* @param gm current gamemode of the player * @param gm current gamemode of the player
* @param sData session that has been ended at the moment of the logout
* event.
*/ */
public LogoutInfo(UUID uuid, long time, boolean banned, String gm, SessionData sData, String worldName) { public LogoutInfo(UUID uuid, long time, boolean banned, String gm, String worldName) {
super(uuid, InfoType.LOGOUT, time); super(uuid, InfoType.LOGOUT, time);
this.banned = banned; this.banned = banned;
this.sData = sData;
this.playtimeDependentInfo = new PlaytimeDependentInfo(uuid, InfoType.OTHER, time, gm, worldName); this.playtimeDependentInfo = new PlaytimeDependentInfo(uuid, InfoType.OTHER, time, gm, worldName);
} }
@Override @Override
public void process(UserData uData) { public void process(UserData uData) {
if (!uData.getUuid().equals(uuid)) {
return;
}
uData.addSession(sData);
LogoutHandling.processLogoutInfo(uData, time, banned);
playtimeDependentInfo.process(uData);
} }
} }

View File

@ -1,7 +1,6 @@
package main.java.com.djrapitops.plan.data.handling.info; package main.java.com.djrapitops.plan.data.handling.info;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.PlaytimeHandling;
import java.util.UUID; import java.util.UUID;
@ -22,6 +21,5 @@ public class PlaytimeDependentInfo extends HandlingInfo {
if (!uuid.equals(uData.getUuid())) { if (!uuid.equals(uData.getUuid())) {
return; return;
} }
PlaytimeHandling.processPlaytimeDependentInfo(uData, time, gamemode, worldName);
} }
} }

View File

@ -108,7 +108,7 @@ public class PlanPlayerListener implements Listener {
Gamemode gm = Gamemode.wrap(player.getGameMode()); Gamemode gm = Gamemode.wrap(player.getGameMode());
String worldName = player.getWorld().getName(); String worldName = player.getWorld().getName();
plugin.addToProcessQueue(new LogoutInfo(uuid, time, banned, gm.name(), handler.getSession(uuid), worldName)); plugin.addToProcessQueue(new LogoutInfo(uuid, time, banned, gm.name(), worldName));
} }
/** /**
@ -133,8 +133,8 @@ public class PlanPlayerListener implements Listener {
boolean banned = player.isBanned(); boolean banned = player.isBanned();
Gamemode gm = Gamemode.wrap(player.getGameMode()); Gamemode gm = Gamemode.wrap(player.getGameMode());
String worldName = player.getWorld().getName(); String worldName = player.getWorld().getName();
//TODO String geoLocation = GeolocationCacheHandler.getCountry(ip.getHostAddress());
plugin.addToProcessQueue(new LogoutInfo(uuid, time, banned, gm.name(), handler.getSession(uuid), worldName)); plugin.addToProcessQueue(new LogoutInfo(uuid, time, banned, gm.name(), worldName));
plugin.addToProcessQueue(new KickInfo(uuid)); plugin.addToProcessQueue(new KickInfo(uuid));
} }
} }

View File

@ -3,24 +3,17 @@ package main.java.com.djrapitops.plan.database.databases;
import com.djrapitops.plugin.task.AbsRunnable; import com.djrapitops.plugin.task.AbsRunnable;
import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.KillData;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor;
import main.java.com.djrapitops.plan.data.time.WorldTimes;
import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.tables.*; import main.java.com.djrapitops.plan.database.tables.*;
import main.java.com.djrapitops.plan.utilities.Benchmark; import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.FormatUtils; import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.MiscUtils;
import java.net.InetAddress;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.*; import java.util.Set;
import java.util.function.Function; import java.util.UUID;
import java.util.stream.Collectors;
/** /**
* Class containing main logic for different data related save & load functionality. * Class containing main logic for different data related save & load functionality.
@ -335,231 +328,6 @@ public abstract class SQLDB extends Database {
} }
} }
/**
* @param uuid
* @param processors
* @throws SQLException
*/
@Override
public void giveUserDataToProcessors(UUID uuid, Collection<DBCallableProcessor> processors) throws SQLException {
Benchmark.start("Give userdata to processors");
try {
checkConnection();
} catch (Exception e) {
Log.toLog(this.getClass().getName(), e);
return;
}
// Check if user is in the database
if (!wasSeenBefore(uuid)) {
return;
}
setStatus("Get single userdata for " + uuid);
// Get the data
UserData data = usersTable.getUserData(uuid);
int userId = usersTable.getUserId(uuid);
List<String> nicknames = nicknamesTable.getNicknames(userId);
data.addNicknames(nicknames);
if (!nicknames.isEmpty()) {
data.setLastNick(nicknames.get(nicknames.size() - 1));
}
List<InetAddress> ips = ipsTable.getIPAddresses(userId);
data.addIpAddresses(ips);
Map<String, Long> worldTimes = worldTimesTable.getWorldTimes(userId);
WorldTimes worldT = data.getWorldTimes();
// worldT.setTimes(worldTimes); //TODO
// if (worldT.getLastStateChange() == 0) {
// worldT.setLastStateChange(data.getPlayTime());
// }
List<SessionData> sessions = sessionsTable.getSessionData(userId);
data.addSessions(sessions);
data.setPlayerKills(killsTable.getPlayerKills(userId));
processors.forEach(processor -> processor.process(data));
Benchmark.stop("Database", "Give userdata to processors");
setAvailable();
}
/**
* @param uuidsCol
* @return
* @throws SQLException
*/
@Override
public List<UserData> getUserDataForUUIDS(Collection<UUID> uuidsCol) throws SQLException {
if (uuidsCol == null || uuidsCol.isEmpty()) {
return new ArrayList<>();
}
setStatus("Get userdata (multiple) for: " + uuidsCol.size());
Benchmark.start("Get UserData for " + uuidsCol.size());
Map<UUID, Integer> userIds = usersTable.getAllUserIds();
Set<UUID> remove = uuidsCol.stream()
.filter(uuid -> !userIds.containsKey(uuid))
.collect(Collectors.toSet());
List<UUID> uuids = new ArrayList<>(uuidsCol);
Log.debug("Database", "Data not found for: " + remove.size());
uuids.removeAll(remove);
Benchmark.start("Create UserData objects for " + userIds.size());
List<UserData> data = usersTable.getUserData(new ArrayList<>(uuids));
Benchmark.stop("Database", "Create UserData objects for " + userIds.size());
if (data.isEmpty()) {
return data;
}
Map<Integer, UUID> idUuidRel = userIds.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
List<Integer> ids = userIds.entrySet().stream().filter(e -> uuids.contains(e.getKey())).map(Map.Entry::getValue).collect(Collectors.toList());
Log.debug("Database", "Using IDs: " + ids.size());
Map<Integer, List<String>> nicknames = nicknamesTable.getNicknames(ids);
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<String, Long>> worldTimes = worldTimesTable.getWorldTimes(ids);
Log.debug("Database",
"Data found for:",
" UUIDs: " + uuids.size(),
" IDs: " + userIds.size(),
" UserData: " + data.size(),
" Nicknames: " + nicknames.size(),
" IPs: " + ipList.size(),
" Kills: " + playerKills.size(),
" Sessions: " + sessionData.size(),
" World Times: " + worldTimes.size()
);
for (UserData uData : data) {
UUID uuid = uData.getUuid();
Integer id = userIds.get(uuid);
uData.addIpAddresses(ipList.get(id));
List<String> userNicks = nicknames.get(id);
uData.addNicknames(userNicks);
if (!userNicks.isEmpty()) {
uData.setLastNick(userNicks.get(userNicks.size() - 1));
}
uData.addSessions(sessionData.get(id));
uData.setPlayerKills(playerKills.get(id));
WorldTimes worldT = uData.getWorldTimes();
// worldT.setTimes(worldTimes.get(id)); //TODO
// if (worldT.getLastStateChange() == 0) {
// worldT.setLastStateChange(uData.getPlayTime());
// }
}
Benchmark.stop("Database", "Get UserData for " + uuidsCol.size());
setAvailable();
return data;
}
/**
* @param data
* @throws SQLException
*/
@Override
public void saveMultipleUserData(Collection<UserData> data) throws SQLException {
if (data == null || data.isEmpty()) {
return;
}
Benchmark.start("Save multiple Userdata");
data.removeIf(Objects::isNull);
checkConnection();
setStatus("Save userdata (multiple) for " + data.size());
usersTable.saveUserDataInformationBatch(data);
// Transform to map
Map<UUID, UserData> userDatas = data.stream()
.collect(Collectors.toMap(UserData::getUuid, Function.identity()));
// Get UserIDs
Map<UUID, Integer> userIds = usersTable.getAllUserIds();
// Create empty data sets
Map<Integer, Set<String>> nicknames = new HashMap<>();
Map<Integer, String> lastNicks = new HashMap<>();
Map<Integer, Set<InetAddress>> ips = new HashMap<>();
Map<Integer, List<KillData>> kills = new HashMap<>();
Map<Integer, UUID> uuids = userIds.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
Map<Integer, List<SessionData>> sessions = new HashMap<>();
Map<Integer, Map<String, Long>> gmTimes = new HashMap<>();
Map<Integer, Map<String, Long>> worldTimes = new HashMap<>();
// Put in data set
// List<String> worldNames = data.stream() //TODO
// .map(UserData::getWorldTimes)
// .map(WorldTimes::getTimes)
// .map(Map::keySet)
// .flatMap(Collection::stream)
// .distinct()
// .collect(Collectors.toList());
for (Map.Entry<UUID, UserData> entrySet : userDatas.entrySet()) {
UUID uuid = entrySet.getKey();
UserData uData = entrySet.getValue();
Integer id = userIds.get(uuid);
if (id == -1) {
Log.debug("Database", "User not seen before, saving last: " + uuid);
continue;
}
uData.access();
nicknames.put(id, new HashSet<>(uData.getNicknames()));
lastNicks.put(id, uData.getLastNick());
ips.put(id, new HashSet<>(uData.getIps()));
kills.put(id, new ArrayList<>(uData.getPlayerKills()));
sessions.put(id, new ArrayList<>(uData.getSessions()));
gmTimes.put(id, new HashMap<>(uData.getGmTimes().getTimes()));
// TODO worldTimes.put(id, new HashMap<>(uData.getWorldTimes().getTimes()));
}
// Save
nicknamesTable.saveNickLists(nicknames, lastNicks);
ipsTable.saveIPList(ips);
killsTable.savePlayerKills(kills, uuids);
sessionsTable.saveSessionData(sessions);
// TODO worldTable.saveWorlds(worldNames);
worldTimesTable.saveWorldTimes(worldTimes);
commit();
userDatas.values().stream()
.filter(Objects::nonNull)
.filter(UserData::isAccessed)
.forEach(UserData::stopAccessing);
Benchmark.stop("Database", "Save multiple Userdata");
setAvailable();
}
/**
* @param data
* @throws SQLException
*/
@Override
public void saveUserData(UserData data) throws SQLException {
if (data == null) {
return;
}
UUID uuid = data.getUuid();
if (uuid == null) {
return;
}
Log.debug("Database", "Save userdata: " + uuid);
Benchmark.start("Save Single UserData");
checkConnection();
data.access();
usersTable.saveUserDataInformation(data);
int userId = usersTable.getUserId(uuid.toString());
sessionsTable.saveSessionData(userId, new ArrayList<>(data.getSessions()));
nicknamesTable.saveNickList(userId, new HashSet<>(data.getNicknames()), data.getLastNick());
ipsTable.saveIPList(userId, new HashSet<>(data.getIps()));
killsTable.savePlayerKills(userId, new ArrayList<>(data.getPlayerKills()));
// TODO worldTable.saveWorlds(new HashSet<>(data.getWorldTimes().getTimes().keySet()));
// worldTimesTable.saveWorldTimes(userId, data.getWorldTimes().getTimes());
data.stopAccessing();
commit();
Benchmark.stop("Database", "Save Single UserData");
setAvailable();
}
/** /**
* *
*/ */

View File

@ -1,24 +1,15 @@
package main.java.com.djrapitops.plan.database.tables; package main.java.com.djrapitops.plan.database.tables;
import com.djrapitops.plugin.utilities.Verify;
import com.djrapitops.plugin.utilities.player.Fetch;
import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.time.GMTimes;
import main.java.com.djrapitops.plan.data.time.WorldTimes;
import main.java.com.djrapitops.plan.database.DBUtils;
import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.databases.SQLDB;
import main.java.com.djrapitops.plan.database.sql.Sql; import main.java.com.djrapitops.plan.database.sql.Sql;
import main.java.com.djrapitops.plan.database.sql.TableSqlParser; import main.java.com.djrapitops.plan.database.sql.TableSqlParser;
import main.java.com.djrapitops.plan.utilities.Benchmark; import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* @author Rsl1122 * @author Rsl1122
@ -27,23 +18,36 @@ public class UsersTable extends Table {
private final String columnID; private final String columnID;
private final String columnUUID; private final String columnUUID;
@Deprecated private final String columnGeolocation; @Deprecated
@Deprecated private final String columnLastGM; private final String columnGeolocation;
@Deprecated private final String columnLastGMSwapTime; @Deprecated
@Deprecated private final String columnPlayTime; private final String columnLastGM;
@Deprecated private final String columnLoginTimes; @Deprecated
@Deprecated private final String columnLastPlayed; private final String columnLastGMSwapTime;
@Deprecated private final String columnDeaths; @Deprecated
@Deprecated private final String columnMobKills; private final String columnPlayTime;
@Deprecated
private final String columnLoginTimes;
@Deprecated
private final String columnLastPlayed;
@Deprecated
private final String columnDeaths;
@Deprecated
private final String columnMobKills;
private final String columnRegistered; private final String columnRegistered;
private final String columnName; private final String columnName;
//TODO Server Specific Table (Also has registered on it) //TODO Server Specific Table (Also has registered on it)
@Deprecated private final String columnOP; @Deprecated
@Deprecated private final String columnBanned; private final String columnOP;
@Deprecated
private final String columnBanned;
// //
@Deprecated private final String columnContainsBukkitData; @Deprecated
@Deprecated private final String columnLastWorldSwapTime; private final String columnContainsBukkitData;
@Deprecated private final String columnLastWorld; @Deprecated
private final String columnLastWorldSwapTime;
@Deprecated
private final String columnLastWorld;
/** /**
* @param db * @param db
@ -252,70 +256,6 @@ public class UsersTable extends Table {
} }
} }
/**
* @param uuid
* @return
* @throws SQLException
*/
public UserData getUserData(UUID uuid) throws SQLException {
boolean containsBukkitData = getContainsBukkitData(uuid);
UserData data = null;
if (containsBukkitData) {
data = getUserDataForKnown(uuid);
}
if (data == null) {
data = new UserData(Fetch.getIOfflinePlayer(uuid));
addUserInformationToUserData(data);
}
return data;
}
private boolean getContainsBukkitData(UUID uuid) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
boolean containsBukkitData = false;
try {
statement = prepareStatement("SELECT " + columnContainsBukkitData + " FROM " + tableName + " WHERE (" + columnUUID + "=?)");
statement.setString(1, uuid.toString());
set = statement.executeQuery();
while (set.next()) {
containsBukkitData = set.getBoolean(columnContainsBukkitData);
}
} finally {
close(statement);
close(set);
}
return containsBukkitData;
}
/**
* @param uuids
* @return
* @throws SQLException
*/
public List<UserData> getUserData(Collection<UUID> uuids) throws SQLException {
Benchmark.start("Get UserInfo Multiple");
List<UUID> containsBukkitData = getContainsBukkitData(uuids);
List<UserData> datas = new ArrayList<>();
datas.addAll(getUserDataForKnown(containsBukkitData));
uuids.removeAll(containsBukkitData);
if (!uuids.isEmpty()) {
List<UserData> noBukkitData = new ArrayList<>();
Benchmark.start("Create UserData objects for No BukkitData players");
for (UUID uuid : uuids) {
UserData uData = new UserData(Fetch.getIOfflinePlayer(uuid));
noBukkitData.add(uData);
}
Benchmark.stop("Database", "Create UserData objects for No BukkitData players");
addUserInformationToUserData(noBukkitData);
datas.addAll(noBukkitData);
}
Benchmark.stop("Database", "Get UserInfo Multiple");
return datas;
}
/** /**
* @param uuids * @param uuids
* @return * @return
@ -346,435 +286,6 @@ public class UsersTable extends Table {
return containsBukkitData; return containsBukkitData;
} }
private UserData getUserDataForKnown(UUID uuid) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
try {
statement = prepareStatement("SELECT * FROM " + tableName + " WHERE (" + columnUUID + "=?)");
statement.setString(1, uuid.toString());
set = statement.executeQuery();
if (set.next()) {
String gm = set.getString(columnLastGM);
boolean op = set.getBoolean(columnOP);
boolean banned = set.getBoolean(columnBanned);
String name = set.getString(columnName);
long registered = set.getLong(columnRegistered);
UserData data = new UserData(uuid, registered, op, gm, name, false);
data.setBanned(banned);
data.setGeolocation(set.getString(columnGeolocation));
data.getGmTimes().setLastStateChange(set.getLong(columnLastGMSwapTime));
long playTime = set.getLong(columnPlayTime);
data.setPlayTime(playTime);
data.setLoginTimes(set.getInt(columnLoginTimes));
data.setLastPlayed(set.getLong(columnLastPlayed));
data.setDeaths(set.getInt(columnDeaths));
data.setMobKills(set.getInt(columnMobKills));
WorldTimes worldTimes = data.getWorldTimes();
// TODO worldTimes.setLastStateChange(set.getLong(columnLastWorldSwapTime));
// String lastWorld = set.getString(columnLastWorld);
// if (!"Unknown".equals(lastWorld)) {
// worldTimes.setState(lastWorld);
// } else {
// worldTimes.setLastStateChange(playTime);
// }
return data;
}
} finally {
close(set);
close(statement);
}
return null;
}
private List<UserData> getUserDataForKnown(Collection<UUID> uuids) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
List<UserData> datas = new ArrayList<>();
try {
statement = prepareStatement("SELECT * FROM " + tableName);
set = statement.executeQuery();
while (set.next()) {
String uuidS = set.getString(columnUUID);
UUID uuid = UUID.fromString(uuidS);
if (!uuids.contains(uuid)) {
continue;
}
String gm = set.getString(columnLastGM);
boolean op = set.getBoolean(columnOP);
boolean banned = set.getBoolean(columnBanned);
String name = set.getString(columnName);
long registered = set.getLong(columnRegistered);
UserData data = new UserData(uuid, registered, op, gm, name, false);
data.setBanned(banned);
data.setGeolocation(set.getString(columnGeolocation));
data.getGmTimes().setLastStateChange(set.getLong(columnLastGMSwapTime));
long playTime = set.getLong(columnPlayTime);
data.setPlayTime(playTime);
data.setLoginTimes(set.getInt(columnLoginTimes));
data.setLastPlayed(set.getLong(columnLastPlayed));
data.setDeaths(set.getInt(columnDeaths));
data.setMobKills(set.getInt(columnMobKills));
WorldTimes worldTimes = data.getWorldTimes();
// TODO worldTimes.setLastStateChange(set.getLong(columnLastWorldSwapTime));
// String lastWorld = set.getString(columnLastWorld);
// if (!"Unknown".equals(lastWorld)) {
// worldTimes.setState(lastWorld);
// } else {
// worldTimes.setLastStateChange(playTime);
// }
datas.add(data);
}
} finally {
close(set);
close(statement);
}
return datas;
}
/**
* @param data
* @throws SQLException
*/
public void addUserInformationToUserData(UserData data) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
try {
statement = prepareStatement("SELECT * FROM " + tableName + " WHERE (" + columnUUID + "=?)");
statement.setString(1, data.getUuid().toString());
set = statement.executeQuery();
while (set.next()) {
data.setGeolocation(set.getString(columnGeolocation));
GMTimes gmTimes = data.getGmTimes();
gmTimes.setState(set.getString(columnLastGM));
gmTimes.setLastStateChange(set.getLong(columnLastGMSwapTime));
long playTime = set.getLong(columnPlayTime);
data.setPlayTime(playTime);
data.setLoginTimes(set.getInt(columnLoginTimes));
data.setLastPlayed(set.getLong(columnLastPlayed));
data.setDeaths(set.getInt(columnDeaths));
data.setMobKills(set.getInt(columnMobKills));
WorldTimes worldTimes = data.getWorldTimes();
// TODO worldTimes.setLastStateChange(set.getLong(columnLastWorldSwapTime));
// String lastWorld = set.getString(columnLastWorld);
// if (!"Unknown".equals(lastWorld)) {
// worldTimes.setState(lastWorld);
// } else {
// worldTimes.setLastStateChange(playTime);
// }
}
} finally {
close(set);
close(statement);
}
}
/**
* @param data
* @throws SQLException
*/
public void addUserInformationToUserData(List<UserData> data) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
try {
Map<UUID, UserData> userDatas = data.stream().collect(Collectors.toMap(UserData::getUuid, Function.identity()));
statement = prepareStatement("SELECT * FROM " + tableName);
set = statement.executeQuery();
while (set.next()) {
String uuidS = set.getString(columnUUID);
UUID uuid = UUID.fromString(uuidS);
if (!userDatas.keySet().contains(uuid)) {
continue;
}
UserData uData = userDatas.get(uuid);
uData.setGeolocation(set.getString(columnGeolocation));
long playTime = set.getLong(columnPlayTime);
uData.setPlayTime(playTime);
uData.setLoginTimes(set.getInt(columnLoginTimes));
uData.setLastPlayed(set.getLong(columnLastPlayed));
uData.setDeaths(set.getInt(columnDeaths));
uData.setMobKills(set.getInt(columnMobKills));
GMTimes gmTimes = uData.getGmTimes();
gmTimes.setState(set.getString(columnLastGM));
gmTimes.setLastStateChange(set.getLong(columnLastGMSwapTime));
WorldTimes worldTimes = uData.getWorldTimes();
// TODO worldTimes.setLastStateChange(set.getLong(columnLastWorldSwapTime));
// String lastWorld = set.getString(columnLastWorld);
// if (!"Unknown".equals(lastWorld)) {
// worldTimes.setState(lastWorld);
// } else {
// worldTimes.setLastStateChange(playTime);
// }
}
} finally {
close(set);
close(statement);
}
}
/**
* @param data
* @throws SQLException
*/
public void saveUserDataInformation(UserData data) throws SQLException {
PreparedStatement statement = null;
try {
UUID uuid = data.getUuid();
int userId = getUserId(uuid);
int update = 0;
if (userId != -1) {
String sql = getUpdateStatement();
statement = prepareStatement(sql);
statement.setString(1, data.getGeolocation());
GMTimes gmTimes = data.getGmTimes();
statement.setString(2, gmTimes.getState());
statement.setLong(3, gmTimes.getLastStateChange());
statement.setLong(4, data.getPlayTime());
statement.setInt(5, data.getLoginTimes());
statement.setLong(6, data.getLastPlayed());
statement.setInt(7, data.getDeaths());
statement.setInt(8, data.getMobKills());
statement.setBoolean(9, data.getName() != null);
statement.setBoolean(10, data.isOp());
statement.setBoolean(11, data.isBanned());
statement.setString(12, data.getName());
statement.setLong(13, data.getRegistered());
WorldTimes worldTimes = data.getWorldTimes();
// TODO statement.setString(14, worldTimes.getState());
// statement.setLong(15, worldTimes.getLastStateChange());
statement.setString(16, uuid.toString());
update = statement.executeUpdate();
}
if (update == 0) {
close(statement);
statement = prepareStatement(getInsertStatement());
statement.setString(1, uuid.toString());
statement.setString(2, data.getGeolocation());
GMTimes gmTimes = data.getGmTimes();
statement.setString(3, gmTimes.getState());
statement.setLong(4, gmTimes.getLastStateChange());
statement.setLong(5, data.getPlayTime());
statement.setInt(6, data.getLoginTimes());
statement.setLong(7, data.getLastPlayed());
statement.setInt(8, data.getDeaths());
statement.setInt(9, data.getMobKills());
statement.setBoolean(10, data.getName() != null);
statement.setBoolean(11, data.isOp());
statement.setBoolean(12, data.isBanned());
statement.setString(13, data.getName());
statement.setLong(14, data.getRegistered());
WorldTimes worldTimes = data.getWorldTimes();
// TODO statement.setString(15, worldTimes.getState());
// statement.setLong(16, worldTimes.getLastStateChange());
statement.execute();
}
} finally {
close(statement);
}
}
private boolean tableHasV4Columns() {
if (usingMySQL) {
return false;
} else {
PreparedStatement statement = null;
ResultSet set = null;
try {
try {
statement = prepareStatement("SELECT age FROM " + tableName + " LIMIT 1");
set = statement.executeQuery();
Log.debug("Database", "UsersTable has V4 columns.");
return true;
} catch (SQLException e) {
return false;
}
} finally {
close(set, statement);
}
}
}
private String getInsertStatement() {
final boolean hasV4Columns = tableHasV4Columns();
String v4rows = hasV4Columns ? "age, gender, " : "";
String v4values = hasV4Columns ? "-1, Deprecated, " : "";
return "INSERT INTO " + tableName + " ("
+ v4rows
+ columnUUID + ", "
+ columnGeolocation + ", "
+ columnLastGM + ", "
+ columnLastGMSwapTime + ", "
+ columnPlayTime + ", "
+ columnLoginTimes + ", "
+ columnLastPlayed + ", "
+ columnDeaths + ", "
+ columnMobKills + ", "
+ columnContainsBukkitData + ", "
+ columnOP + ", "
+ columnBanned + ", "
+ columnName + ", "
+ columnRegistered + ", "
+ columnLastWorld + ", "
+ columnLastWorldSwapTime
+ ") VALUES (" + v4values + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
}
private String getUpdateStatement() {
final boolean hasV4Columns = tableHasV4Columns();
String v4rows = hasV4Columns ? "age=-1, gender='Deprecated', " : "";
return "UPDATE " + tableName + " SET "
+ v4rows
+ columnGeolocation + "=?, "
+ columnLastGM + "=?, "
+ columnLastGMSwapTime + "=?, "
+ columnPlayTime + "=?, "
+ columnLoginTimes + "=?, "
+ columnLastPlayed + "=?, "
+ columnDeaths + "=?, "
+ columnMobKills + "=?, "
+ columnContainsBukkitData + "=?, "
+ columnOP + "=?, "
+ columnBanned + "=?, "
+ columnName + "=?, "
+ columnRegistered + "=?, "
+ columnLastWorld + "=?, "
+ columnLastWorldSwapTime + "=? "
+ "WHERE " + columnUUID + "=?";
}
/**
* @param data
* @throws SQLException
*/
public void saveUserDataInformationBatch(Collection<UserData> data) throws SQLException {
Benchmark.start("Save UserInfo multiple");
try {
List<UserData> newUserdata = updateExistingUserData(data);
Benchmark.start("Insert new UserInfo multiple");
List<List<UserData>> batches = DBUtils.splitIntoBatches(newUserdata);
batches
.forEach(batch -> {
try {
insertNewUserData(batch);
} catch (SQLException e) {
Log.toLog("UsersTable.saveUserDataInformationBatch", e);
}
});
Benchmark.stop("Database", "Insert new UserInfo multiple");
} finally {
Benchmark.stop("Database", "Save UserInfo multiple");
}
}
private void insertNewUserData(Collection<UserData> data) throws SQLException {
if (data.isEmpty()) {
return;
}
PreparedStatement statement = null;
try {
statement = prepareStatement(getInsertStatement());
for (UserData uData : data) {
UUID uuid = uData.getUuid();
statement.setString(1, uuid.toString());
statement.setString(2, uData.getGeolocation());
GMTimes gmTimes = uData.getGmTimes();
statement.setString(3, gmTimes.getState());
statement.setLong(4, gmTimes.getLastStateChange());
statement.setLong(5, uData.getPlayTime());
statement.setInt(6, uData.getLoginTimes());
statement.setLong(7, uData.getLastPlayed());
statement.setInt(8, uData.getDeaths());
statement.setInt(9, uData.getMobKills());
statement.setBoolean(10, uData.getName() != null);
statement.setBoolean(11, uData.isOp());
statement.setBoolean(12, uData.isBanned());
statement.setString(13, uData.getName());
statement.setLong(14, uData.getRegistered());
WorldTimes worldTimes = uData.getWorldTimes();
// TODO statement.setString(15, worldTimes.getState());
// statement.setLong(16, worldTimes.getLastStateChange());
statement.addBatch();
}
statement.executeBatch();
} finally {
close(statement);
}
}
private List<UserData> updateExistingUserData(Collection<UserData> data) throws SQLException {
PreparedStatement statement = null;
try {
List<UserData> newUserData = new ArrayList<>();
String sql = getUpdateStatement();
statement = prepareStatement(sql);
boolean commitRequired = false;
Set<UUID> savedUUIDs = getSavedUUIDs();
for (UserData uData : data) {
UUID uuid = null;
// Get new UUID if uuid == null
if (uData != null) {
uuid = uData.getUuid();
if (uuid == null) {
uuid = UUIDUtility.getUUIDOf(uData.getName(), db);
uData.setUuid(uuid);
}
}
boolean isNew = !savedUUIDs.contains(uuid) && !newUserData.contains(uData);
if (isNew) {
newUserData.add(uData);
}
if (!Verify.notNull(uData, uuid) || isNew) {
continue;
}
uData.access();
statement.setString(1, uData.getGeolocation());
GMTimes gmTimes = uData.getGmTimes();
statement.setString(2, gmTimes.getState());
statement.setLong(3, uData.getGmTimes().getLastStateChange());
statement.setLong(4, uData.getPlayTime());
statement.setInt(5, uData.getLoginTimes());
statement.setLong(6, uData.getLastPlayed());
statement.setInt(7, uData.getDeaths());
statement.setInt(8, uData.getMobKills());
statement.setBoolean(9, uData.getName() != null);
statement.setBoolean(10, uData.isOp());
statement.setBoolean(11, uData.isBanned());
statement.setString(12, uData.getName());
statement.setLong(13, uData.getRegistered());
WorldTimes worldTimes = uData.getWorldTimes();
// TODO statement.setString(14, worldTimes.getState());
// statement.setLong(15, worldTimes.getLastStateChange());
statement.setString(16, uuid.toString());
statement.addBatch();
uData.stopAccessing();
commitRequired = true;
}
if (commitRequired) {
statement.executeBatch();
}
return newUserData;
} finally {
close(statement);
}
}
/** /**
* @param uuids * @param uuids
* @return * @return

View File

@ -131,7 +131,7 @@ public class Locale {
add(Msg.ENABLE_BOOT_ANALYSIS_RUN_INFO, analysis + "Starting Boot Analysis.."); add(Msg.ENABLE_BOOT_ANALYSIS_RUN_INFO, analysis + "Starting Boot Analysis..");
add(Msg.ENABLE_NOTIFY_EMPTY_IP, yellow + "IP in server.properties is empty & AlternativeServerIP is not used, incorrect links will be given!"); add(Msg.ENABLE_NOTIFY_EMPTY_IP, yellow + "IP in server.properties is empty & AlternativeServerIP is not used, incorrect links will be given!");
add(Msg.ENABLE_NOTIFY_NO_DATA_VIEW, yellow + "Webserver disabled but Alternative IP/TextUI not used, no way to view data!"); add(Msg.ENABLE_NOTIFY_NO_DATA_VIEW, yellow + "Webserver disabled but Alternative IP not used, no way to view data!");
add(Msg.ENABLE_NOTIFY_DISABLED_CHATLISTENER, yellow + "Chat listener disabled, nickname info inaccurate."); add(Msg.ENABLE_NOTIFY_DISABLED_CHATLISTENER, yellow + "Chat listener disabled, nickname info inaccurate.");
add(Msg.ENABLE_NOTIFY_DISABLED_COMMANDLISTENER, yellow + "Command usage listener disabled."); add(Msg.ENABLE_NOTIFY_DISABLED_COMMANDLISTENER, yellow + "Command usage listener disabled.");
add(Msg.ENABLE_NOTIFY_DISABLED_DEATHLISTENER, yellow + "Death listener disabled, player & mob kills not recorded."); add(Msg.ENABLE_NOTIFY_DISABLED_DEATHLISTENER, yellow + "Death listener disabled, player & mob kills not recorded.");

View File

@ -50,7 +50,7 @@ public class PlayersTableCreator {
String.valueOf(uData.getLoginTimes()), String.valueOf(uData.getLoginTimes()),
String.valueOf(uData.getRegistered()), FormatUtils.formatTimeStampYear(uData.getRegistered()), String.valueOf(uData.getRegistered()), FormatUtils.formatTimeStampYear(uData.getRegistered()),
String.valueOf(uData.getLastPlayed()), FormatUtils.formatTimeStamp(uData.getLastPlayed()), String.valueOf(uData.getLastPlayed()), FormatUtils.formatTimeStamp(uData.getLastPlayed()),
String.valueOf(uData.getGeolocation()) String.valueOf(uData.getGeolocations()) //TODO get last Geoloc
)); ));
} catch (NullPointerException ignored) { } catch (NullPointerException ignored) {
} }

View File

@ -1,117 +0,0 @@
package main.java.com.djrapitops.plan.ui.text;
import com.djrapitops.plugin.settings.ColorScheme;
import com.djrapitops.plugin.settings.DefaultMessages;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.AnalysisData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.analysis.*;
import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler;
import main.java.com.djrapitops.plan.data.cache.InspectCacheHandler;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
import main.java.com.djrapitops.plan.utilities.analysis.MathUtils;
import org.bukkit.ChatColor;
import java.util.UUID;
/**
* @author Rsl1122
*/
@Deprecated // Too much work to create bungee support for this
public class TextUI {
/**
* Constructor used to hide the public constructor
*/
private TextUI() {
throw new IllegalStateException("Utility class");
}
/**
* @param uuid The UUID for which the inspect messages should be get for
* @return The inspect messages
*/
public static String[] getInspectMessages(UUID uuid) {
InspectCacheHandler inspectCache = Plan.getInstance().getInspectCache();
long now = MiscUtils.getTime();
if (!inspectCache.isCached(uuid)) {
return new String[]{"Error has occurred, please retry."};
}
UserData d = inspectCache.getFromCache(uuid);
ColorScheme cs = Plan.getInstance().getColorScheme();
String main = cs.getMainColor();
String sec = cs.getSecondaryColor();
String ter = cs.getTertiaryColor();
boolean active = AnalysisUtils.isActive(now, d.getLastPlayed(), d.getPlayTime(), d.getLoginTimes());
boolean banned = d.isBanned();
boolean online = d.isOnline();
String ball = sec + " " + DefaultMessages.BALL + main;
String onlineString = online ? ChatColor.GREEN + " Online" : ChatColor.RED + " Offline";
String activeString = active ? " Active" : "Inactive";
String bannedString = banned ? ChatColor.DARK_RED + " Banned" : ter + activeString;
return new String[]{
sec + " " + DefaultMessages.BALL + bannedString + onlineString,
ball + " Registered: " + sec + FormatUtils.formatTimeStampYear(d.getRegistered()),
ball + " Last seen: " + sec + FormatUtils.formatTimeStamp(d.getLastPlayed()),
ball + " Playtime: " + sec + FormatUtils.formatTimeAmount(d.getPlayTime()),
ball + " Login times: " + sec + d.getLoginTimes(),
ball + " Average session length: " + sec + FormatUtils.formatTimeAmount(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(d.getSessions()))),
ball + " Kills: " + sec + d.getPlayerKills().size() + main + " Mobs: " + sec + d.getMobKills() + main + " Deaths: " + sec + d.getDeaths(),
ball + " Geolocation: " + sec + d.getGeolocation()
};
}
/**
* Gets the analysis messages
*
* @return The analysis messages
*/
public static String[] getAnalysisMessages() {
AnalysisCacheHandler analysisCache = Plan.getInstance().getAnalysisCache();
if (!analysisCache.isCached()) {
return new String[]{"Error has occurred, please retry."};
}
AnalysisData d = analysisCache.getData();
ColorScheme cs = Plan.getInstance().getColorScheme();
String main = cs.getMainColor();
String sec = cs.getSecondaryColor();
String ball = sec + " " + DefaultMessages.BALL + main;
final ActivityPart activity = d.getActivityPart();
final JoinInfoPart join = d.getJoinInfoPart();
final KillPart kills = d.getKillPart();
final PlaytimePart playtime = d.getPlaytimePart();
final PlayerCountPart count = d.getPlayerCountPart();
final TPSPart tps = d.getTpsPart();
return new String[]{
ball + " Total Players: " + sec + count.getPlayerCount(),
ball + " Active: " + sec + activity.getActive().size()
+ main + " Inactive: " + sec + activity.getInactive().size()
+ main + " Single Join: " + sec + activity.getJoinedOnce().size()
+ main + " Banned: " + sec + activity.getBans().size(),
ball + " New Players 24h: " + sec + join.get("npday") + main + " 7d: " + sec + d.get("npweek") + main + " 30d: " + sec + d.get("npmonth"),
"",
ball + " Total Playtime: " + sec + playtime.get("totalplaytime") + main + " Player Avg: " + sec + playtime.get("avgplaytime"),
ball + " Average Session Length: " + sec + activity.get("sessionaverage"),
ball + " Total Logintimes: " + sec + join.getLoginTimes(),
ball + " Kills: " + sec + kills.getAllPlayerKills().size() + main + " Mobs: " + sec + kills.getMobKills() + main + " Deaths: " + sec + kills.getDeaths(),
"",
ball + " Average TPS 24h: " + sec + tps.get("averagetpsday")
};
}
}

View File

@ -45,17 +45,8 @@ public class NewPlayerCreator {
* @return a new UserData object * @return a new UserData object
*/ */
public static UserData createNewPlayer(IOfflinePlayer player, Gamemode gm) { public static UserData createNewPlayer(IOfflinePlayer player, Gamemode gm) {
long registered = player.getFirstPlayed(); // TODO Rewrite
UserData data = new UserData(player.getUniqueId(), registered, player.isOp(), gm.name(), player.getName(), player.isOnline()); return null;
data.setLastPlayed(MiscUtils.getTime());
data.setPlayTime(0L);
data.setTimesKicked(0);
data.setLoginTimes(0);
data.setDeaths(0);
data.setMobKills(0);
data.setBanned(false);
data.setGeolocation("Not Known");
return data;
} }
} }

View File

@ -5,7 +5,6 @@ import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.AnalysisData; import main.java.com.djrapitops.plan.data.AnalysisData;
import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.time.WorldTimes;
import main.java.com.djrapitops.plan.ui.html.graphs.PunchCardGraphCreator; import main.java.com.djrapitops.plan.ui.html.graphs.PunchCardGraphCreator;
import java.io.Serializable; import java.io.Serializable;
@ -68,16 +67,16 @@ public class PlaceholderUtils {
replaceMap.put("lastSeen", FormatUtils.formatTimeStampYear(data.getLastPlayed())); replaceMap.put("lastSeen", FormatUtils.formatTimeStampYear(data.getLastPlayed()));
replaceMap.put("sessionCount", data.getSessions().size()); replaceMap.put("sessionCount", data.getSessions().size());
replaceMap.put("playtimeTotal", FormatUtils.formatTimeAmount(data.getPlayTime())); //TODO replaceMap.put("playtimeTotal", FormatUtils.formatTimeAmount(data.getPlayTime()));
replaceMap.put("kickCount", data.getTimesKicked()); replaceMap.put("kickCount", data.getTimesKicked());
replaceMap.put("playerKillCount", data.getPlayerKills().size()); // replaceMap.put("playerKillCount", data.getPlayerKills().size()); //TODO
replaceMap.put("mobKillCount", data.getMobKills()); // replaceMap.put("mobKillCount", data.getMobKills());
replaceMap.put("deathCount", data.getDeaths()); // replaceMap.put("deathCount", data.getDeaths());
Set<SessionData> sessions = new HashSet<>(data.getSessions()); Set<SessionData> sessions = new HashSet<>(data.getSessions());
replaceMap.put("punchCardSeries", PunchCardGraphCreator.createDataSeries(sessions)); replaceMap.put("punchCardSeries", PunchCardGraphCreator.createDataSeries(sessions));
WorldTimes worldTimes = data.getWorldTimes(); //TODO WorldTimes worldTimes = data.getWorldTimes();
// TODO replaceMap.put("worldSeries", WorldPieCreator.createSeriesData(worldTimes.getTimes())); // TODO replaceMap.put("worldSeries", WorldPieCreator.createSeriesData(worldTimes.getTimes()));
// replaceMap.put("worldTotal", FormatUtils.formatTimeAmount(worldTimes.getTotal())); // replaceMap.put("worldTotal", FormatUtils.formatTimeAmount(worldTimes.getTotal()));

View File

@ -4,7 +4,10 @@ import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.utilities.Verify; import com.djrapitops.plugin.utilities.Verify;
import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.*; import main.java.com.djrapitops.plan.data.AnalysisData;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.TPS;
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.AnalysisType;
import main.java.com.djrapitops.plan.data.additional.HookHandler; import main.java.com.djrapitops.plan.data.additional.HookHandler;
import main.java.com.djrapitops.plan.data.additional.PluginData; import main.java.com.djrapitops.plan.data.additional.PluginData;
@ -266,28 +269,13 @@ public class Analysis {
List<PluginData> banSources = plugin.getHookHandler().getAdditionalDataSources() List<PluginData> banSources = plugin.getHookHandler().getAdditionalDataSources()
.stream().filter(PluginData::isBanData).collect(Collectors.toList()); .stream().filter(PluginData::isBanData).collect(Collectors.toList());
rawData.forEach(uData -> { rawData.forEach(uData -> {
uData.access();
Map<String, Long> gmTimes = uData.getGmTimes().getTimes();
String[] gms = new String[]{"SURVIVAL", "CREATIVE", "ADVENTURE", "SPECTATOR"};
if (gmTimes != null) {
for (String gm : gms) {
Long time = gmTimes.get(gm);
if (time != null) {
gmPart.addTo(gm, time);
}
}
}
// TODO Map<String, Long> worldTimes = uData.getWorldTimes().getTimes(); // TODO Map<String, Long> worldTimes = uData.getWorldTimes().getTimes();
// for (Map.Entry<String, Long> world : worldTimes.entrySet()) {
// worldPart.addToWorld(world.getKey(), world.getValue());
// }
final long playTime = uData.getPlayTime(); // TODO playtime.addToPlaytime(playTime);
playtime.addToPlaytime(playTime);
joinInfo.addToLoginTimes(uData.getLoginTimes()); joinInfo.addToLoginTimes(uData.getLoginTimes());
joinInfo.addRegistered(uData.getRegistered()); joinInfo.addRegistered(uData.getRegistered());
geolocPart.addGeolocation(uData.getGeolocation()); //TODO geolocPart.addGeolocation(uData.getGeolocation());
final UUID uuid = uData.getUuid(); final UUID uuid = uData.getUuid();
if (uData.isOp()) { if (uData.isOp()) {
@ -310,19 +298,15 @@ public class Analysis {
activity.addBan(uuid); activity.addBan(uuid);
} else if (uData.getLoginTimes() == 1) { } else if (uData.getLoginTimes() == 1) {
activity.addJoinedOnce(uuid); activity.addJoinedOnce(uuid);
} else if (AnalysisUtils.isActive(now, uData.getLastPlayed(), playTime, uData.getLoginTimes())) { // TODO } else if (AnalysisUtils.isActive(now, uData.getLastPlayed(), playTime, uData.getLoginTimes())) {
activity.addActive(uuid); // activity.addActive(uuid);
} else { } else {
activity.addInActive(uuid); activity.addInActive(uuid);
} }
List<KillData> playerKills = uData.getPlayerKills(); //TODO List<KillData> playerKills = uData.getPlayerKills();
killPart.addKills(uuid, playerKills);
killPart.addDeaths(uData.getDeaths());
killPart.addMobKills(uData.getMobKills());
List<SessionData> sessions = uData.getSessions(); List<SessionData> sessions = uData.getSessions();
joinInfo.addSessions(uuid, sessions); joinInfo.addSessions(uuid, sessions);
uData.stopAccessing();
}); });
Benchmark.stop("Analysis", "Fill Dataset"); Benchmark.stop("Analysis", "Fill Dataset");
} }

View File

@ -1,27 +1,12 @@
package test.java.main.java.com.djrapitops.plan.data; package test.java.main.java.com.djrapitops.plan.data;
import com.djrapitops.plugin.utilities.player.IOfflinePlayer;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.junit.Before; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunner;
import test.java.utils.TestInit;
import test.java.utils.MockUtils;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/** /**
* @author Rsl1122 * @author Rsl1122
@ -29,6 +14,7 @@ import static org.junit.Assert.assertTrue;
@RunWith(PowerMockRunner.class) @RunWith(PowerMockRunner.class)
@PrepareForTest(JavaPlugin.class) @PrepareForTest(JavaPlugin.class)
public class UserDataTest { public class UserDataTest {
// TODO Rewrite
private UserData test; private UserData test;
private Plan plan; private Plan plan;
@ -45,291 +31,5 @@ public class UserDataTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
// TestInit t = TestInit.init(); // TestInit t = TestInit.init();
test = new UserData(UUID.fromString("7f8149a0-b5a5-4fcd-80b5-6cff083a99f1"), 0, true, "CREATIVE", "Testname", true);
}
/**
* @throws UnknownHostException
*/
@Test
public void testAddIpAddress() throws UnknownHostException {
InetAddress ip = InetAddress.getByName("247.183.163.155");
InetAddress ip2 = InetAddress.getByName("95.19.221.226");
test.addIpAddress(ip);
test.addIpAddress(ip2);
test.addIpAddress(ip2);
test.addIpAddress(null);
assertTrue("Didn't add 1", test.getIps().contains(ip));
assertTrue("Didn't add 2", test.getIps().contains(ip2));
assertTrue("Added null", !test.getIps().contains(null));
assertTrue("Added multiples", test.getIps().size() == 2);
}
/**
* @throws UnknownHostException
*/
@Test
public void testAddIpAddresses() throws UnknownHostException {
List<InetAddress> ips = new ArrayList<>();
InetAddress ip = InetAddress.getByName("247.183.163.155");
InetAddress ip2 = InetAddress.getByName("95.19.221.226");
ips.add(ip);
ips.add(ip2);
ips.add(ip2);
ips.add(null);
test.addIpAddresses(ips);
assertTrue("Didn't add 1", test.getIps().contains(ip));
assertTrue("Didn't add 2", test.getIps().contains(ip2));
assertTrue("Added null", !test.getIps().contains(null));
assertTrue("Added multiples", test.getIps().size() == 2);
}
/**
*
*/
@Test
public void testAddIpAddressesEmpty() {
List<InetAddress> ips = new ArrayList<>();
test.addIpAddresses(ips);
assertTrue("Added something", test.getIps().isEmpty());
}
/**
*
*/
@Test
public void testAddNickname() {
String one = "Test1";
String two = "Test2";
boolean n1 = test.addNickname(two);
boolean n2 = test.addNickname(two);
boolean n = test.addNickname(one);
test.addNickname(null);
assertTrue("Didn't add 1", test.getNicknames().contains(one));
assertTrue("Didn't add 2", test.getNicknames().contains(two));
assertTrue("1 is supposed to be new", n);
assertTrue("2 is supposed to be new", n1);
assertTrue("2 is not supposed to be new", !n2);
assertTrue("Added null", !test.getNicknames().contains(null));
assertTrue("Added multiples", test.getNicknames().size() == 2);
assertTrue("Last nickname was not one", test.getLastNick().equals(one));
}
/**
*
*/
@Test
public void testAddNicknames() {
String one = "Test1";
String two = "Test2";
List<String> o = new ArrayList<>();
o.add(one);
o.add(two);
o.add(two);
o.add(null);
test.addNicknames(o);
assertTrue("Didn't add 1", test.getNicknames().contains(one));
assertTrue("Didn't add 2", test.getNicknames().contains(two));
assertTrue("Added null", !test.getNicknames().contains(null));
assertTrue("Added multiples", test.getNicknames().size() == 2);
}
/**
*
*/
@Test
public void testAddNicknamesEmpty() {
List<String> o = new ArrayList<>();
test.addNicknames(o);
assertTrue("Added something", test.getNicknames().isEmpty());
}
/**
*
*/
@Test
public void testAddSession() {
SessionData correct = new SessionData(0, 1);
test.addSession(correct);
assertTrue("Didn't add correct one", test.getSessions().contains(correct));
}
/**
*
*/
@Test
public void testAddSessionIncorrect() {
SessionData incorrect = new SessionData(0);
test.addSession(incorrect);
assertTrue("Added incorrect one", !test.getSessions().contains(incorrect));
}
/**
*
*/
@Test
public void testAddSessionNull() {
test.addSession(null);
assertTrue("Added null", !test.getSessions().contains(null));
}
/**
*
*/
@Test
public void testAddSessions() {
SessionData correct = new SessionData(0, 1);
SessionData incorrect = new SessionData(0);
List<SessionData> o = new ArrayList<>();
o.add(correct);
o.add(incorrect);
o.add(null);
test.addSessions(o);
assertTrue("Didn't add correct one", test.getSessions().contains(correct));
assertTrue("Added incorrect one", !test.getSessions().contains(incorrect));
assertTrue("Added null", !test.getSessions().contains(incorrect));
}
/**
*
*/
@Test
public void testAddSessionsEmpty() {
List<SessionData> o = new ArrayList<>();
test.addSessions(o);
assertTrue("Added something", test.getSessions().isEmpty());
}
/**
*
*/
@Test
public void testUpdateBanned() {
test.updateBanned(true);
assertTrue("Not true", test.isBanned());
test.updateBanned(false);
assertTrue("True", !test.isBanned());
}
/**
*
*/
@Test
public void testIsAccessed() {
test.access();
assertTrue("Not accessed, even though accessing", test.isAccessed());
test.access();
test.stopAccessing();
assertTrue("Not accessed, even though accessing", test.isAccessed());
test.stopAccessing();
assertTrue("Accessed, even though not accessing", !test.isAccessed());
}
/**
*
*/
@Test
public void testAccess() {
test.access();
assertTrue("Not accessed, even though accessing", test.isAccessed());
}
/**
*
*/
@Test
public void testStopAccessing() {
test.access();
test.stopAccessing();
assertTrue("Accessed, even though not accessing", !test.isAccessed());
}
/**
*
*/
@Test
public void testEquals() {
assertTrue("Not Equals!", test.equals(new UserData(UUID.fromString("7f8149a0-b5a5-4fcd-80b5-6cff083a99f1"), 0, true, "CREATIVE", "Testname", true)));
}
/**
*
*/
@Test
public void testEqualsNot() {
UserData notEqual = new UserData(UUID.fromString("7f8149a0-b5a5-4fcd-80b5-6cff083a99f1"), 0, true, "CREATIVE", "WRONG", true);
assertTrue("Equals!", !notEqual.equals(test));
}
/**
*
*/
@Test
public void testEqualsNot2() {
Object o = "NOT";
assertTrue("Equals!", !test.equals(o));
}
/**
*
*/
@Test
public void testCopyConstructor() {
UserData copy = new UserData(test);
assertTrue("Not copied properly", test.equals(copy));
}
/**
*
*/
@Test
public void testPlayerConstructor() {
test = new UserData(MockUtils.mockIPlayer());
UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, true, "SURVIVAL", "TestName", true);
expected.updateBanned(true);
assertTrue("Not equal!", test.equals(expected));
}
/**
* @throws IOException
*/
@Test
public void testPlayerConstructorBrokenBanned() throws Exception {
TestInit.init();
test = new UserData(MockUtils.mockBrokenPlayer());
UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, true, "SURVIVAL", "TestName", true);
expected.updateBanned(false);
assertTrue("Not equal!", test.equals(expected));
}
/**
*
*/
@Test
public void testOfflinePlayerConstructor() {
test = new UserData((IOfflinePlayer) MockUtils.mockIPlayer());
UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, true, "SURVIVAL", "TestName", true);
expected.updateBanned(true);
assertTrue("Not equal!", test.equals(expected));
}
/**
* @throws IOException
*/
@Test
public void testOfflinePlayerConstructorBrokenBanned() throws Exception {
TestInit.init();
test = new UserData((IOfflinePlayer) MockUtils.mockBrokenPlayer());
UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, true, "SURVIVAL", "TestName", true);
expected.updateBanned(false);
assertTrue("Not equal!", test.equals(expected));
}
/**
*
*/
@Test
public void testGetUUID() {
assertEquals(test.getUuid(), UUID.fromString("7f8149a0-b5a5-4fcd-80b5-6cff083a99f1"));
} }
} }

View File

@ -6,7 +6,6 @@
package test.java.main.java.com.djrapitops.plan.data.cache; package test.java.main.java.com.djrapitops.plan.data.cache;
import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.cache.SessionCache; import main.java.com.djrapitops.plan.data.cache.SessionCache;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.junit.Before; import org.junit.Before;
@ -59,15 +58,4 @@ public class SessionCacheTest {
assertTrue("Session length not positive", testSession.getLength() > 0L); assertTrue("Session length not positive", testSession.getLength() > 0L);
assertTrue("Session not valid", testSession.isValid()); assertTrue("Session not valid", testSession.isValid());
} }
@Test
public void testAddSession() {
UUID uuid = MockUtils.getPlayerUUID();
test.getActiveSessions().put(uuid, new SessionData(0));
test.endSession(uuid);
UserData data = MockUtils.mockUser();
test.addSession(data);
assertTrue("Didn't add session to data", data.getSessions().size() == 1);
}
} }

View File

@ -1,52 +0,0 @@
/*
* 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 test.java.main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.ChatHandling;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import test.java.utils.MockUtils;
import test.java.utils.TestInit;
import static org.junit.Assert.assertTrue;
/**
* @author Rsl1122
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(JavaPlugin.class)
public class ChatHandlingTest {
/**
*
*/
public ChatHandlingTest() {
}
/**
*
*/
@Before
public void setUp() throws Exception {
TestInit.init();
}
/**
*
*/
@Test
public void testProcessChatInfoAddedNickname() {
UserData data = MockUtils.mockUser2();
String expected = "TestNicknameChatHandling";
ChatHandling.processChatInfo(data, expected);
assertTrue("Didn't add nickname", data.getNicknames().contains(expected));
}
}

View File

@ -1,145 +0,0 @@
/*
* 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 test.java.main.java.com.djrapitops.plan.data.handling;
import com.djrapitops.plugin.utilities.player.IPlayer;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.KillData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.KillHandling;
import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
import main.java.com.djrapitops.plan.database.tables.UsersTable;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import test.java.utils.MockUtils;
import test.java.utils.TestInit;
import java.io.IOException;
import java.sql.SQLException;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.mockito.PowerMockito.when;
/**
* @author Rsl1122
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(JavaPlugin.class)
public class KillHandlingTest {
private Database db;
/**
*
*/
public KillHandlingTest() {
}
/**
*
*/
@Before
public void setUp() throws Exception {
TestInit t = TestInit.init();
Plan plan = t.getPlanMock();
db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) {
@Override
public void startConnectionPingTask() {
}
@Override
public void convertBukkitDataToDB() {
}
@Override
public UsersTable getUsersTable() {
return new UsersTable(null, false) {
@Override
public int getUserId(UUID uuid) {
if (uuid.equals(MockUtils.getPlayerUUID())) {
return -1;
}
return 1;
}
};
}
};
when(plan.getDB()).thenReturn(db);
}
/**
* @throws SQLException
*/
@After
public void tearDown() throws SQLException {
db.close();
}
/**
* @throws SQLException
*/
@Test
public void testProcessKillInfoPlayer() throws SQLException {
UserData data = MockUtils.mockUser();
IPlayer dead = MockUtils.mockIPlayer2();
KillHandling.processKillInfo(data, 10L, (Player) dead.getWrappedPlayerClass(), "TestWeapon");
KillData expected = new KillData(dead.getUuid(), 1, "TestWeapon", 10L);
assertTrue("Didn't add the kill", data.getPlayerKills().size() == 1);
KillData result = data.getPlayerKills().get(0);
assertEquals(expected.getDate(), result.getDate());
assertEquals(expected.getVictim(), result.getVictim());
assertEquals(expected.getVictimUserID(), result.getVictimUserID());
assertEquals(expected.getWeapon(), result.getWeapon());
}
/**
* @throws SQLException
* @throws IOException
*/
@Test
public void testProcessKillInfoException() throws SQLException, IOException {
UserData data = MockUtils.mockUser2();
Player dead = (Player) MockUtils.mockIPlayer().getWrappedPlayerClass();
KillHandling.processKillInfo(data, 10L, dead, "TestWeapon");
assertTrue("Added the kill", data.getPlayerKills().isEmpty());
}
/**
* @throws SQLException
*/
@Test
public void testProcessKillInfoMob() throws SQLException {
UserData data = MockUtils.mockUser();
int mobKills = data.getMobKills();
int exp = mobKills + 1;
KillHandling.processKillInfo(data, 10L, null, "TestWeapon");
int result = data.getMobKills();
assertEquals(exp, result);
}
@Test
public void testNormalizeMaterialName() {
Material material = Material.GOLD_SWORD;
String name = material.name();
String normalizedName = KillHandling.normalizeMaterialName(material);
assertEquals(name, "GOLD_SWORD");
assertEquals(normalizedName, "Gold Sword");
}
}

View File

@ -1,80 +0,0 @@
/*
* 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 test.java.main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.LoginHandling;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import test.java.utils.MockUtils;
import test.java.utils.TestInit;
import java.net.InetAddress;
import java.net.UnknownHostException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author Rsl1122
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(JavaPlugin.class)
public class LoginHandlingTest {
/**
*
*/
public LoginHandlingTest() {
}
/**
*
*/
@Before
public void setUp() throws Exception {
TestInit.init();
}
/**
* @throws UnknownHostException
*/
@Test
public void testProcessLoginInfo() throws UnknownHostException {
UserData data = MockUtils.mockUser();
data.updateBanned(false);
InetAddress ip = InetAddress.getByName("137.19.188.146");
long time = 10L;
int loginTimes = data.getLoginTimes();
String nick = "TestProcessLoginInfo";
LoginHandling.processLoginInfo(data, time, ip, true, nick, 1);
assertTrue("Not Banned", data.isBanned());
assertTrue("LastPlayed wrong", data.getLastPlayed() == time);
assertTrue("Ip not added", data.getIps().contains(ip));
assertTrue("Logintimes not +1", data.getLoginTimes() == loginTimes + 1);
assertTrue("Nick not added", data.getNicknames().contains(nick));
assertTrue("Nick not last nick", data.getLastNick().equals(nick));
String result = data.getGeolocation();
assertEquals("United States", result);
}
/**
* @throws UnknownHostException
*/
@Test
public void testUpdateGeolocation() throws UnknownHostException {
UserData data = MockUtils.mockUser();
InetAddress ip = InetAddress.getByName("137.19.188.146");
LoginHandling.updateGeolocation(ip, data);
String result = data.getGeolocation();
assertEquals("United States", result);
}
}

View File

@ -1,49 +0,0 @@
/*
* 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 test.java.main.java.com.djrapitops.plan.data.handling;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.LogoutHandling;
import org.junit.Before;
import org.junit.Test;
import test.java.utils.MockUtils;
import static org.junit.Assert.assertTrue;
/**
* @author Rsl1122
*/
public class LogoutHandlingTest {
/**
*
*/
public LogoutHandlingTest() {
}
/**
*
*/
@Before
public void setUp() throws Exception {
}
/**
*
*/
@Test
public void testProcessLogoutInfo() {
UserData data = MockUtils.mockUser();
data.setLastPlayed(10L);
data.updateBanned(false);
long time = 20L;
LogoutHandling.processLogoutInfo(data, time, true);
assertTrue("Last Played wrong", data.getLastPlayed() == 20L);
assertTrue("Playtime wrong", data.getPlayTime() == 10L);
assertTrue("Banned wrong", data.isBanned());
}
}

View File

@ -5,15 +5,8 @@
*/ */
package test.java.main.java.com.djrapitops.plan.data.handling.info; package test.java.main.java.com.djrapitops.plan.data.handling.info;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.info.LogoutInfo;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import test.java.utils.MockUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/** /**
* @author Rsl1122 * @author Rsl1122
@ -36,20 +29,8 @@ public class LogoutInfoTest {
/** /**
* *
*/ */
@Test @Test //TODO Rewrite
public void testProcess() { public void testProcess() {
UserData data = MockUtils.mockUser();
data.setLastPlayed(10L);
data.updateBanned(false);
long time = 20L;
data.getGmTimes().setState("SURVIVAL");
LogoutInfo i = new LogoutInfo(data.getUuid(), time, true, "CREATIVE", new SessionData(0, 1), "World");
i.process(data);
assertTrue("Last Played wrong", data.getLastPlayed() == 20L);
assertTrue("Playtime wrong", data.getPlayTime() == 10L);
assertTrue("Banned wrong", data.isBanned());
assertEquals("CREATIVE", data.getGmTimes().getState());
// TODO assertEquals("World", data.getWorldTimes().getState());
assertEquals(1, data.getSessions().size());
} }
} }

View File

@ -6,13 +6,8 @@
package test.java.main.java.com.djrapitops.plan.database; package test.java.main.java.com.djrapitops.plan.database;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.KillData;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.TPS; import main.java.com.djrapitops.plan.data.TPS;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor;
import main.java.com.djrapitops.plan.data.time.GMTimes;
import main.java.com.djrapitops.plan.data.time.WorldTimes;
import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.databases.MySQLDB; import main.java.com.djrapitops.plan.database.databases.MySQLDB;
import main.java.com.djrapitops.plan.database.databases.SQLiteDB; import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
@ -36,8 +31,6 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean; import java.lang.management.OperatingSystemMXBean;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
@ -212,87 +205,6 @@ public class DatabaseTest {
assertEquals(c, commandUse); assertEquals(c, commandUse);
} }
/**
* @throws SQLException
*/
@Test
public void testSaveUserData() throws SQLException {
db.init();
UserData data = MockUtils.mockUser();
GMTimes gmTimes = data.getGmTimes();
gmTimes.setAllGMTimes(5L, 10L, 15L, 20L);
gmTimes.setState("SURVIVAL");
gmTimes.setLastStateChange(10L);
WorldTimes worldTimes = data.getWorldTimes();
// TODO worldTimes.setTime("World", 20L);
// worldTimes.setState("World");
// worldTimes.setLastStateChange(10L);
db.saveUserData(data);
data.addNickname("TestUpdateForSave");
db.saveUserData(data);
DBCallableProcessor process = d -> {
System.out.println("\nOriginal: " + data);
System.out.println("Database: " + d);
assertTrue("Not Equals", data.equals(d));
};
db.giveUserDataToProcessors(data.getUuid(), process);
}
/**
* @throws SQLException
*/
@Test
public void testNicknameInjection() throws SQLException {
db.init();
UserData data = MockUtils.mockUser();
UserData data2 = MockUtils.mockUser2();
db.saveUserData(data2);
data.addNickname("s); DROP TABLE plan_users;--");
db.saveUserData(data);
assertTrue("Removed Users table.", db.getUsersTable().getUserId(data2.getUuid().toString()) != -1);
}
/**
* @throws SQLException
* @throws java.net.UnknownHostException
*/
@Test
public void testSaveMultipleUserData() throws SQLException, UnknownHostException {
db.init();
UserData data = MockUtils.mockUser();
data.getGmTimes().setAllGMTimes(5L, 10L, 15L, 20L);
// TODO data.getWorldTimes().setTime("World", 20L);
data.addIpAddress(InetAddress.getByName("185.64.113.61"));
data.addSession(new SessionData(1286349L, 2342978L));
data.addNickname("TestNick");
data.addPlayerKill(new KillData(MockUtils.getPlayer2UUID(), 2, "DiamondSword", 75843759L));
System.out.println(data.toString());
db.saveUserData(data);
data.getPlayerKills().clear();
System.out.println(data.toString());
data.addNickname("TestUpdateForSave");
UserData data2 = MockUtils.mockUser2();
data2.getGmTimes().setAllGMTimes(5L, 10L, 15L, 20L);
data2.addNickname("Alright");
data.addNickname("TestNick2");
data2.addIpAddress(InetAddress.getByName("185.64.113.60"));
data2.addSession(new SessionData(2348743L, 4839673L));
data2.addPlayerKill(new KillData(MockUtils.getPlayerUUID(), 1, "DiamondSword", 753759L));
List<UserData> list = new ArrayList<>();
list.add(data);
list.add(data2);
db.saveMultipleUserData(list);
data.addPlayerKill(new KillData(MockUtils.getPlayer2UUID(), 2, "DiamondSword", 75843759L));
List<UserData> userDataForUUIDS = db.getUserDataForUUIDS(MockUtils.getUUIDs());
System.out.println("\nData1:" + data.toString());
System.out.println("Data2:" + data2.toString() + "\n");
for (UserData uData : userDataForUUIDS) {
System.out.println("uData:" + uData.toString());
assertTrue("Not Equals", (data.equals(uData) || data2.equals(uData)));
}
}
/** /**
* @throws SQLException * @throws SQLException
*/ */

View File

@ -123,8 +123,8 @@ public class AnalysisUtilsTest {
@Test @Test
public void testTransformSessionDataToLengths() { public void testTransformSessionDataToLengths() {
Collection<SessionData> data = new ArrayList<>(); Collection<SessionData> data = new ArrayList<>();
data.add(new SessionData(0, 5L)); data.add(new SessionData(0L, 5L, null, null, 0, 0));
data.add(new SessionData(0, 20L)); data.add(new SessionData(0, 20L, null, null, 0, 0));
data.add(new SessionData(0)); data.add(new SessionData(0));
List<Long> expResult = new ArrayList<>(); List<Long> expResult = new ArrayList<>();
expResult.add(5L); expResult.add(5L);

View File

@ -3,11 +3,6 @@ package test.java.utils;
import com.djrapitops.plugin.utilities.player.Fetch; import com.djrapitops.plugin.utilities.player.Fetch;
import com.djrapitops.plugin.utilities.player.IPlayer; import com.djrapitops.plugin.utilities.player.IPlayer;
import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.HttpServer;
import main.java.com.djrapitops.plan.data.KillData;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.time.GMTimes;
import main.java.com.djrapitops.plan.utilities.NewPlayerCreator;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
@ -16,9 +11,7 @@ import org.bukkit.entity.Player;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito; import org.powermock.api.mockito.PowerMockito;
import java.net.InetAddress;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -39,36 +32,6 @@ public class MockUtils {
return mockWorld; return mockWorld;
} }
public static UserData mockUser() {
return NewPlayerCreator.createNewPlayer(mockIPlayer());
}
public static UserData mockUserWithMoreData() {
UserData mock = mockUser();
try {
mock.addIpAddress(InetAddress.getByName("247.183.163.155"));
} catch (UnknownHostException ignored) {
/* Ignored */
}
mock.addNickname("MoreNicks");
mock.addPlayerKill(new KillData(getPlayer2UUID(), 1, "WEP", 126873643232L));
mock.addSession(new SessionData(12345L, 23456L));
GMTimes gmTimes = mock.getGmTimes();
gmTimes.setAllGMTimes(1234, 2345, 4356, 4767);
gmTimes.setState("ADVENTURE");
mock.setDeaths(5);
mock.setTimesKicked(5);
mock.setPlayTime(34438926);
mock.setGeolocation("Finland");
mock.setLoginTimes(5);
mock.setMobKills(5);
return mock;
}
public static UserData mockUser2() {
return NewPlayerCreator.createNewPlayer(mockIPlayer2());
}
/** /**
* @return * @return
*/ */

View File

@ -6,7 +6,6 @@ import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.WebUser; import main.java.com.djrapitops.plan.data.WebUser;
import main.java.com.djrapitops.plan.data.handling.info.HandlingInfo; 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.data.handling.info.InfoType;
import main.java.com.djrapitops.plan.data.time.GMTimes;
import main.java.com.djrapitops.plan.utilities.PassEncryptUtil; import main.java.com.djrapitops.plan.utilities.PassEncryptUtil;
import main.java.com.djrapitops.plan.utilities.analysis.Point; import main.java.com.djrapitops.plan.utilities.analysis.Point;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
@ -25,17 +24,6 @@ public class RandomData {
return ThreadLocalRandom.current().nextInt(rangeStart, rangeEnd); return ThreadLocalRandom.current().nextInt(rangeStart, rangeEnd);
} }
public static List<UserData> randomUserData() {
List<UserData> test = new ArrayList<>();
for (int i = 0; i < 20; i++) {
String randomName = randomString(10);
UserData uD = new UserData(UUID.randomUUID(), r.nextLong(), r.nextBoolean(), GMTimes.getGMKeyArray()[r.nextInt(3)], randomName, r.nextBoolean());
uD.setLastPlayed(r.nextLong());
test.add(uD);
}
return test;
}
public static String randomString(int size) { public static String randomString(int size) {
return RandomStringUtils.random(size); return RandomStringUtils.random(size);
} }
@ -61,7 +49,7 @@ public class RandomData {
public static List<SessionData> randomSessions() { public static List<SessionData> randomSessions() {
List<SessionData> test = new ArrayList<>(); List<SessionData> test = new ArrayList<>();
for (int i = 0; i < 20; i++) { for (int i = 0; i < 20; i++) {
test.add(new SessionData(r.nextLong(), r.nextLong())); test.add(new SessionData(r.nextLong(), r.nextLong(), null, null, 0, 0));
} }
return test; return test;
} }