diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/factions/FactionAccordionCreator.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/factions/FactionAccordionCreator.java index 756b452fa..182a90123 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/factions/FactionAccordionCreator.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/factions/FactionAccordionCreator.java @@ -17,7 +17,7 @@ import java.util.*; import java.util.stream.Collectors; /** - * //TODO Class Javadoc Comment + * Creates Faction accordion for Factions tab. * * @author Rsl1122 */ diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java index f07c99d00..1f8611ae2 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java @@ -9,7 +9,6 @@ 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.analysis.MathUtils; import java.util.Collection; import java.util.HashMap; @@ -43,12 +42,14 @@ public class SuperbVoteData extends PluginData { @Override public AnalysisContainer getServerData(Collection uuids, AnalysisContainer analysisContainer) throws Exception { Map votes = new HashMap<>(); + long total = 0; for (UUID uuid : uuids) { - votes.put(uuid, store.getVotes(uuid)); + int votesCount = store.getVotes(uuid); + votes.put(uuid, votesCount); + total += votesCount; } - long totalVotes = MathUtils.sumLong(votes.values().stream().map(i -> i)); - analysisContainer.addValue(getWithIcon("Total Votes", "check", "teal"), totalVotes); + analysisContainer.addValue(getWithIcon("Total Votes", "check", "teal"), total); analysisContainer.addPlayerTableValues(getWithIcon("Votes", "check"), votes); diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownAccordionCreator.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownAccordionCreator.java new file mode 100644 index 000000000..129f2cf51 --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownAccordionCreator.java @@ -0,0 +1,108 @@ +/* + * 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.towny; + +import com.palmergames.bukkit.towny.exceptions.TownyException; +import com.palmergames.bukkit.towny.object.Coord; +import com.palmergames.bukkit.towny.object.Resident; +import com.palmergames.bukkit.towny.object.Town; +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.analysis.Analysis; +import main.java.com.djrapitops.plan.utilities.html.HtmlStructure; +import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Creates a Town Accordion for Towny tab. + * + * @author Rsl1122 + */ +public class TownAccordionCreator { + + public static String createAccordion(List towns) { + StringBuilder html = new StringBuilder("
"); + + ServerProfile serverProfile = Analysis.getServerProfile(); + List players = serverProfile != null ? serverProfile.getPlayers() : new ArrayList<>(); + + for (Town town : towns) { + String townName = town.getName(); + String mayorName = town.getMayor().getName(); + + String coordinates = ""; + try { + Coord homeBlock = town.getHomeBlock().getCoord(); + coordinates = "x: " + homeBlock.getX() + " z: " + homeBlock.getZ(); + } catch (TownyException e) { + } + + List residents = town.getResidents(); + int residentsNum = residents.size(); + String landCount = town.getPurchasedBlocks() + " / " + town.getTotalBlocks(); + + Set members = new HashSet<>(); + for (Resident resident : residents) { + members.add(UUIDUtility.getUUIDOf(resident.getName())); + } + + List memberProfiles = players.stream().filter(p -> members.contains(p.getUniqueId())).collect(Collectors.toList()); + + List 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 mobKills = ServerProfile.getMobKillCount(sessions); + long deaths = ServerProfile.getDeathCount(sessions); + + String separated = HtmlStructure.separateWithDots(String.valueOf(residentsNum), mayorName); + + String htmlID = "town_" + townName.replace(" ", "-"); + + // Accordion panel header + html.append("
") + .append("
") + .append("

") + .append("") + .append(townName).append("").append(separated).append("") // Title (header) + .append("

") // Closes collapsed, panel title + .append("
"); // Closes panel heading + + // Content + html.append("
") + .append("
") + .append("
") // Left col-6 + // Sessions + .append("

Mayor ").append(mayorName).append("

") + // Playtime + .append("

Residents").append(residentsNum).append("

") + .append("

Town Blocks").append(landCount).append("

") + .append("

Members").append(coordinates).append("

") + .append("
") // Closes Left col-6 + .append("
") // Right col-6 + // Player Kills + .append("

Player Kills").append(playerKills).append("

") + .append("

Mob Kills").append(mobKills).append("

") + // Deaths + .append("

Deaths").append(deaths).append("

") + .append("
") // Right col-6 + .append("
") // Closes row clearfix + .append("
") // Closes panel-body + .append("
") // Closes panel-collapse + .append("
"); // Closes panel + } + return html.append("
").toString(); + } + +} \ No newline at end of file diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyData.java new file mode 100644 index 000000000..cd826ec8c --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyData.java @@ -0,0 +1,96 @@ +/* + * 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.towny; + +import com.palmergames.bukkit.towny.exceptions.TownyException; +import com.palmergames.bukkit.towny.object.Coord; +import com.palmergames.bukkit.towny.object.Resident; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.Settings; +import main.java.com.djrapitops.plan.data.additional.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.html.Html; +import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * PluginData for Towny plugin. + * + * @author Rsl1122 + */ +public class TownyData extends PluginData { + + + public TownyData() { + super(ContainerSize.TAB, "Towny"); + super.setPluginIcon("bank"); + super.setIconColor("brown"); + } + + @Override + public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) throws Exception { + String playerName = Plan.getInstance().getDataCache().getName(uuid); + + Resident resident = TownyUniverse.getDataSource().getResident(playerName); + + if (resident.hasTown()) { + Town town = resident.getTown(); + String townName = town.getName(); + String mayorName = town.getMayor().getName(); + String townMayor = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(mayorName), mayorName); + + inspectContainer.addValue(getWithIcon("Town", "bank", "brown"), townName); + inspectContainer.addValue(getWithIcon("Mayor", "user", "brown"), townMayor); + + try { + Coord homeBlock = town.getHomeBlock().getCoord(); + String coordinates = "x: " + homeBlock.getX() + " z: " + homeBlock.getZ(); + inspectContainer.addValue(getWithIcon("Coordinates", "map-pin", "red"), coordinates); + } catch (TownyException e) { + } + + int residents = town.getResidents().size(); + inspectContainer.addValue(getWithIcon("Residents", "users", "brown"), residents); + } else { + inspectContainer.addValue(getWithIcon("Town", "bank", "brown"), "No Town"); + } + + return inspectContainer; + } + + @Override + public AnalysisContainer getServerData(Collection collection, AnalysisContainer analysisContainer) throws Exception { + List towns = getTopTowns(); + + Map userTowns = new HashMap<>(); + for (Town town : towns) { + String townName = town.getName(); + town.getResidents().stream() + .map(Resident::getName) + .map(UUIDUtility::getUUIDOf) + .forEach(uuid -> userTowns.put(uuid, townName)); + } + analysisContainer.addPlayerTableValues(getWithIcon("Town", "bank"), userTowns); + + analysisContainer.addHtml("townAccordion", TownAccordionCreator.createAccordion(towns)); + + return analysisContainer; + } + + private List getTopTowns() { + List topTowns = TownyUniverse.getDataSource().getTowns(); + topTowns.sort(new TownComparator()); + List hide = Settings.HIDE_TOWNS.getStringList(); + return topTowns.stream() + .filter(town -> !hide.contains(town.getName())) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyHook.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyHook.java index 648cf89ef..87af75bae 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyHook.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyHook.java @@ -1,8 +1,8 @@ package com.djrapitops.pluginbridge.plan.towny; -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 Towny and registering 2 data sources. @@ -27,8 +27,7 @@ public class TownyHook extends Hook { public void hook() throws NoClassDefFoundError { if (enabled) { - addPluginDataSource(new TownyTable()); - addPluginDataSource(new TownyTown()); + addPluginDataSource(new TownyData()); } } } diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyTable.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyTable.java deleted file mode 100644 index f0997551e..000000000 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyTable.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.djrapitops.pluginbridge.plan.towny; - -import com.massivecraft.factions.entity.MPlayer; -import com.palmergames.bukkit.towny.object.Resident; -import com.palmergames.bukkit.towny.object.Town; -import com.palmergames.bukkit.towny.object.TownyUniverse; -import main.java.com.djrapitops.plan.Plan; -import main.java.com.djrapitops.plan.Settings; -import main.java.com.djrapitops.plan.data.additional.AnalysisType; -import main.java.com.djrapitops.plan.data.additional.PluginData; -import main.java.com.djrapitops.plan.utilities.html.Html; - -import java.io.Serializable; -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; - -/** - * PluginData class for Towny-plugin. - * - * Registered to the plugin by TownyHook - * - * @author Rsl1122 - * @since 3.1.0 - * @see TownyHook - */ -public class TownyTable extends PluginData { - - /** - * Class Constructor, sets the parameters of the PluginData object. - * - * Uses Html to easily parse Html for the table. - * - * @see TownyHook - * @see Html - */ - public TownyTable() { - super("Towny", "towns_table", AnalysisType.HTML); - super.setPrefix(Html.TABLE_TOWNS_START.parse()); - super.setSuffix(Html.TABLE_END.parse()); - } - - @Override - public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) { - StringBuilder html = new StringBuilder(); - List towns = getTopTowns(); - if (towns.isEmpty()) { - html.append(Html.TABLELINE_4.parse("No Towns", "", "", "")); - } else { - for (Town t : towns) { - if (t == null) { - continue; - } - String name = t.getName(); - Resident mayorR = t.getMayor(); - String mayor; - if (mayorR != null) { - mayor = mayorR.getName(); - } else { - mayor = "None"; - } - int residents = t.getNumResidents(); - int land = t.getPurchasedBlocks(); - String leaderPage = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(mayor), mayor); - html.append(Html.TABLELINE_4.parse(name, residents, land, leaderPage)); - } - } - return parseContainer(modifierPrefix, html.toString()); - } - - /** - * Used to get the list of Towns and filter out unnecessary ones. - * - * @return List of Towns sorted by amount of residents. - */ - public List getTopTowns() { - List topTowns = TownyUniverse.getDataSource().getTowns(); - topTowns.sort(new TownComparator()); - List hide = Settings.HIDE_TOWNS.getStringList(); - return topTowns.stream() - .filter(town -> !hide.contains(town.getName())) - .collect(Collectors.toList()); - } - - @Override - public Serializable getValue(UUID uuid) { - MPlayer mPlayer = MPlayer.get(uuid); - return mPlayer.getPower(); - } -} diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyTown.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyTown.java deleted file mode 100644 index b5b4944ea..000000000 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownyTown.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.djrapitops.pluginbridge.plan.towny; - -import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; -import com.palmergames.bukkit.towny.object.Resident; -import com.palmergames.bukkit.towny.object.TownyUniverse; -import main.java.com.djrapitops.plan.data.additional.PluginData; - -import java.io.Serializable; -import java.util.UUID; - -/** - * PluginData class for Towny-plugin. - *

- * Registered to the plugin by TownyHook - *

- * Gives Town name as String. - * - * @author Rsl1122 - * @see TownyHook - * @since 3.1.0 - */ -public class TownyTown extends PluginData { - - private final String notInTown = "Not in a Town"; - - /** - * Class Constructor, sets the parameters of the PluginData object. - */ - public TownyTown() { - super("Towny", "town"); - super.setAnalysisOnly(false); - super.setIcon("bank"); - super.setPrefix("Town: "); - } - - @Override - public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) { - String name = getNameOf(uuid); - try { - Resident res = TownyUniverse.getDataSource().getResident(name); - String town; - if (res.hasTown()) { - town = res.getTown().getName(); - } else { - town = notInTown; - } - return parseContainer("", town); - } catch (NotRegisteredException ex) { - return parseContainer(modifierPrefix, notInTown); - } - } - - @Override - public Serializable getValue(UUID uuid) { - String name = getNameOf(uuid); - try { - Resident res = TownyUniverse.getDataSource().getResident(name); - String town; - if (res.hasTown()) { - town = res.getTown().getName(); - } else { - town = notInTown; - } - return town; - } catch (NotRegisteredException ex) { - return ex + ""; - } - } - -}