mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-02 21:41:28 +01:00
FactionsData
This commit is contained in:
parent
3889aedddf
commit
81ad293c7f
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user