FactionsData

This commit is contained in:
Rsl1122 2017-11-26 13:31:31 +02:00
parent 3889aedddf
commit 81ad293c7f
9 changed files with 207 additions and 236 deletions

View File

@ -28,6 +28,7 @@ public class Analysis {
private final Plan plugin;
private int taskId = -1;
private static ServerProfile serverProfile;
/**
* Class Constructor.
@ -106,6 +107,7 @@ public class Analysis {
Benchmark.stop("Analysis", "Create Empty dataset");
Benchmark.start("Fetch Phase");
ServerProfile profile = db.getServerProfile(Plan.getServerUUID());
serverProfile = profile;
long fetchPhaseLength = Benchmark.stop("Analysis", "Fetch Phase");
// TODO BanData (PluginData) effects
@ -135,6 +137,7 @@ public class Analysis {
long time = Benchmark.stop("Analysis", "Analysis");
Log.logDebug("Analysis");
Log.info(Locale.get(Msg.ANALYSIS_FINISHED).parse(time, ""));
serverProfile = null;
}
return true;
}
@ -185,4 +188,13 @@ public class Analysis {
public void setTaskId(int id) {
taskId = id;
}
/**
* Only available during Analysis.
*
* @return ServerProfile being analyzed or null if analysis is not being run.
*/
public static ServerProfile getServerProfile() {
return serverProfile;
}
}

View File

@ -64,6 +64,8 @@ public class EssentialsData extends PluginData {
List<String> warpsList = new ArrayList<>(essentials.getWarps().getList());
if (!warpsList.isEmpty()) {
TableContainer warps = new TableContainer(getWithIcon("Warp", "map-marker"), getWithIcon("Command", "terminal"));
warps.setColor("light-green");
Collections.sort(warpsList);
for (String warp : warpsList) {
warps.addRow(warp, "/warp " + warp);

View File

@ -0,0 +1,103 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MPlayer;
import main.java.com.djrapitops.plan.data.PlayerProfile;
import main.java.com.djrapitops.plan.data.ServerProfile;
import main.java.com.djrapitops.plan.data.Session;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.analysis.Analysis;
import main.java.com.djrapitops.plan.utilities.html.HtmlStructure;
import java.util.*;
import java.util.stream.Collectors;
/**
* //TODO Class Javadoc Comment
*
* @author Rsl1122
*/
public class FactionAccordionCreator {
public static String createAccordion(List<Faction> factions) {
StringBuilder html = new StringBuilder("<div class=\"panel-group scrollbar\" id=\"faction_accordion\" role=\"tablist\" aria-multiselectable=\"true\">");
ServerProfile serverProfile = Analysis.getServerProfile();
List<PlayerProfile> players = serverProfile != null ? serverProfile.getPlayers() : new ArrayList<>();
for (Faction faction : factions) {
String factionName = faction.getName();
long createdAtMillis = faction.getCreatedAtMillis();
String created = FormatUtils.formatTimeStampYear(createdAtMillis);
double power = faction.getPower();
double maxPower = faction.getPowerMax();
String powerString = FormatUtils.cutDecimals(power) + " / " + FormatUtils.cutDecimals(maxPower);
MPlayer leader = faction.getLeader();
String leaderName = leader.getName();
int landCount = faction.getLandCount();
Set<UUID> members = new HashSet<>();
for (MPlayer mPlayer : faction.getMPlayers()) {
members.add(mPlayer.getUuid());
}
int membersNum = members.size();
List<PlayerProfile> memberProfiles = players.stream().filter(p -> members.contains(p.getUniqueId())).collect(Collectors.toList());
List<Session> sessions = memberProfiles.stream()
.map(PlayerProfile::getSessions)
.map(Map::values)
.flatMap(Collection::stream)
.flatMap(Collection::stream)
.collect(Collectors.toList());
long playerKills = ServerProfile.getPlayerKills(sessions).size();
long deaths = ServerProfile.getDeathCount(sessions);
String separated = HtmlStructure.separateWithDots(powerString, leaderName);
String htmlID = "faction_" + createdAtMillis;
// Accordion panel header
html.append("<div class=\"panel panel-col-light-green\">")
.append("<div class=\"panel-heading\" role=\"tab\" id=\"heading_").append(htmlID).append("\">")
.append("<h4 class=\"panel-title\">")
.append("<a class=\"collapsed\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#session_accordion\" ")
.append("href=\"#session_").append(htmlID).append("\" aria-expanded=\"false\" ")
.append("aria-controls=\"session_").append(htmlID).append("\">")
.append(factionName).append("<span class=\"pull-right\">").append(separated).append("</span>") // Title (header)
.append("</a></h4>") // Closes collapsed, panel title
.append("</div>"); // Closes panel heading
// Content
html.append("<div id=\"session_").append(htmlID).append("\" class=\"panel-collapse collapse\" role=\"tabpanel\"")
.append(" aria-labelledby=\"heading_").append(htmlID).append("\">")
.append("<div class=\"panel-body\"><div class=\"row clearfix\">")
.append("<div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">") // Left col-6
// Sessions
.append("<p><i class=\"col-deep-purple fa fa-calendar-o\"></i> Created <span class=\"pull-right\">").append(created).append("</span></p>")
// Playtime
.append("<p><i class=\"col-purple fa fa-bolt\"></i> Power<span class=\"pull-right\"><b>").append(powerString).append("</b></span></p>")
.append("<p><i class=\"col-purple fa fa-user\"></i> Leader<span class=\"pull-right\"><b>").append(leaderName).append("</b></span></p>")
.append("<p><i class=\"col-purple fa fa-users\"></i> Members<span class=\"pull-right\"><b>").append(membersNum).append("</b></span></p>")
.append("<p><i class=\"col-purple fa fa-map\"></i> Land Count<span class=\"pull-right\"><b>").append(landCount).append("</b></span></p>")
.append("</div>") // Closes Left col-6
.append("<div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">") // Right col-6
// Player Kills
.append("<p><i class=\"col-red fa fa-crosshairs\"></i> Player Kills<span class=\"pull-right\"><b>").append(playerKills).append("</b></span></p>")
// Deaths
.append("<p><i class=\"col-red fa fa-frown-o\"></i> Deaths<span class=\"pull-right\"><b>").append(deaths).append("</b></span></p>")
.append("</div>") // Right col-6
.append("</div>") // Closes row clearfix
.append("</div>") // Closes panel-body
.append("</div>") // Closes panel-collapse
.append("</div>"); // Closes panel
}
return html.append("</div>").toString();
}
}

View File

@ -0,0 +1,88 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.FactionColl;
import com.massivecraft.factions.entity.MPlayer;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.additional.AnalysisContainer;
import main.java.com.djrapitops.plan.data.additional.ContainerSize;
import main.java.com.djrapitops.plan.data.additional.InspectContainer;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* //TODO Class Javadoc Comment
*
* @author Rsl1122
*/
public class FactionsData extends PluginData {
public FactionsData() {
super(ContainerSize.TAB, "Factions");
super.setPluginIcon("map");
super.setIconColor("deep-purple");
}
@Override
public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) throws Exception {
MPlayer mPlayer = MPlayer.get(uuid);
if (mPlayer.hasFaction()) {
Faction faction = mPlayer.getFaction();
String factionName = faction.isNone() ? "-" : faction.getName();
double power = mPlayer.getPower();
double maxPower = mPlayer.getPowerMax();
String powerString = FormatUtils.cutDecimals(power) + " / " + FormatUtils.cutDecimals(maxPower);
inspectContainer.addValue(getWithIcon("Faction", "flag", "deep-purple"), factionName);
inspectContainer.addValue(getWithIcon("Power", "bolt", "purple"), powerString);
}
return inspectContainer;
}
@Override
public AnalysisContainer getServerData(Collection<UUID> uuids, AnalysisContainer analysisContainer) throws Exception {
List<Faction> factions = getTopFactions();
analysisContainer.addValue(getWithIcon("Number of Factions", "flag", "deep-purple"), factions.size());
analysisContainer.addHtml("factionAccordion", FactionAccordionCreator.createAccordion(factions));
Map<UUID, String> userFactions = new HashMap<>();
for (UUID uuid : uuids) {
MPlayer mPlayer = MPlayer.get(uuid);
if (mPlayer.hasFaction()) {
Faction faction = mPlayer.getFaction();
String factionName = faction.isNone() ? "-" : faction.getName();
userFactions.put(uuid, factionName);
}
}
analysisContainer.addPlayerTableValues(getWithIcon("Faction", "flag"), userFactions);
return analysisContainer;
}
public final List<Faction> getTopFactions() {
List<Faction> topFactions = new ArrayList<>();
topFactions.addAll(FactionColl.get().getAll());
topFactions.remove(FactionColl.get().getWarzone());
topFactions.remove(FactionColl.get().getSafezone());
topFactions.remove(FactionColl.get().getNone());
List<String> hide = Settings.HIDE_FACTIONS.getStringList();
topFactions.sort(new FactionComparator());
return topFactions.stream()
.filter(faction -> !hide.contains(faction.getName()))
.collect(Collectors.toList());
}
}

View File

@ -1,46 +0,0 @@
package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.MPlayer;
import java.io.Serializable;
import java.util.UUID;
import main.java.com.djrapitops.plan.data.additional.PluginData;
/**
* PluginData class for Factions-plugin.
*
* Registered to the plugin by FactionsHook
*
* Gives a Faction name String as value.
*
* @author Rsl1122
* @since 3.1.0
* @see FactionsHook
*/
public class FactionsFaction extends PluginData {
/**
* Class Constructor, sets the parameters of the PluginData object.
*/
public FactionsFaction() {
super("Factions", "faction");
super.setIcon("flag");
super.setPrefix("Faction: ");
}
@Override
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
String faction = mPlayer.getFactionName();
if (faction.isEmpty()) {
return parseContainer("", "No Faction.");
}
return parseContainer("", faction);
}
@Override
public Serializable getValue(UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
return mPlayer.getFactionName();
}
}

View File

@ -1,8 +1,8 @@
package com.djrapitops.pluginbridge.plan.factions;
import main.java.com.djrapitops.plan.data.additional.HookHandler;
import com.djrapitops.pluginbridge.plan.Hook;
import main.java.com.djrapitops.plan.api.API;
import main.java.com.djrapitops.plan.data.additional.HookHandler;
/**
* A Class responsible for hooking to Factions and registering 4 data sources.
@ -26,10 +26,7 @@ public class FactionsHook extends Hook {
public void hook() throws NoClassDefFoundError {
if (enabled) {
addPluginDataSource(new FactionsFaction());
addPluginDataSource(new FactionsPower());
addPluginDataSource(new FactionsMaxPower());
addPluginDataSource(new FactionsTable());
addPluginDataSource(new FactionsData());
}
}
}

View File

@ -1,43 +0,0 @@
package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.MPlayer;
import java.io.Serializable;
import java.util.UUID;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
/**
* PluginData class for Factions-plugin.
*
* Registered to the plugin by FactionsHook
*
* Gives Max Power Integer as value.
*
* @author Rsl1122
* @since 3.1.0
* @see FactionsHook
*/
public class FactionsMaxPower extends PluginData {
/**
* Class Constructor, sets the parameters of the PluginData object.
*/
public FactionsMaxPower() {
super("Factions", "max_power");
super.setPrefix("Max Power: ");
super.setIcon("bolt");
}
@Override
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
return parseContainer(modifierPrefix, FormatUtils.cutDecimals(mPlayer.getPowerMax()));
}
@Override
public Serializable getValue(UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
return mPlayer.getPowerMax();
}
}

View File

@ -1,45 +0,0 @@
package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.MPlayer;
import java.io.Serializable;
import java.util.UUID;
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
/**
* PluginData class for Factions-plugin.
*
* Registered to the plugin by FactionsHook
*
* Gives Power Integer as value.
*
* @author Rsl1122
* @since 3.1.0
* @see FactionsHook
*/
public class FactionsPower extends PluginData {
/**
* Class Constructor, sets the parameters of the PluginData object.
*/
public FactionsPower() {
super("Factions", "power", AnalysisType.DOUBLE_AVG);
super.setAnalysisOnly(false);
super.setIcon("bolt");
super.setPrefix("Power: ");
}
@Override
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
return parseContainer(modifierPrefix, FormatUtils.cutDecimals(mPlayer.getPower()));
}
@Override
public Serializable getValue(UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
return mPlayer.getPower();
}
}

View File

@ -1,97 +0,0 @@
package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.FactionColl;
import com.massivecraft.factions.entity.MPlayer;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.html.Html;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* PluginData class for Factions-plugin.
* <p>
* Registered to the plugin by FactionsHook
*
* @author Rsl1122
* @see FactionsHook
* @since 3.1.0
*/
public class FactionsTable extends PluginData {
private List<Faction> factions;
/**
* Class Constructor, sets the parameters of the PluginData object.
* <p>
* Uses Html to easily parse Html for the table.
*
* @see FactionsHook
* @see Html
*/
public FactionsTable() {
super("Factions", "faction_stable", AnalysisType.HTML);
this.factions = getTopFactions();
super.setPrefix(Html.TABLE_FACTIONS_START.parse());
super.setSuffix(Html.TABLE_END.parse());
}
/**
* Used to get the list of Factions and filter out unnecessary ones.
*
* @return List of Factions sorted by power
*/
public final List<Faction> getTopFactions() {
List<Faction> topFactions = new ArrayList<>();
topFactions.addAll(FactionColl.get().getAll());
topFactions.remove(FactionColl.get().getWarzone());
topFactions.remove(FactionColl.get().getSafezone());
topFactions.remove(FactionColl.get().getNone());
List<String> hide = Settings.HIDE_FACTIONS.getStringList();
topFactions.sort(new FactionComparator());
return topFactions.stream()
.filter(faction -> !hide.contains(faction.getName()))
.collect(Collectors.toList());
}
@Override
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
StringBuilder html = new StringBuilder();
this.factions = getTopFactions();
if (factions.isEmpty()) {
html.append(Html.TABLELINE_4.parse("No Factions", "", "", ""));
} else {
for (Faction f : factions) {
if (f != null) {
MPlayer fLeader = f.getLeader();
String leader = fLeader != null ? fLeader.getNameAndSomething("", "") : "No Leader";
String leaderPage = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(leader), leader);
html.append(Html.TABLELINE_4.parse(
f.getName(),
FormatUtils.cutDecimals(f.getPower()),
f.getLandCount(),
leaderPage
));
} else {
String notFound = "Not Found";
html.append(Html.TABLELINE_4.parse(notFound, notFound, notFound, notFound));
}
}
}
return parseContainer(modifierPrefix, html.toString());
}
@Override
public Serializable getValue(UUID uuid) {
MPlayer mPlayer = MPlayer.get(uuid);
return mPlayer.getPower();
}
}