diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java index f684faf2a..5b71f7dcd 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java @@ -8,6 +8,7 @@ import com.djrapitops.pluginbridge.plan.essentials.EssentialsHook; import com.djrapitops.pluginbridge.plan.factions.FactionsHook; import com.djrapitops.pluginbridge.plan.griefprevention.GriefPreventionHook; import com.djrapitops.pluginbridge.plan.jobs.JobsHook; +import com.djrapitops.pluginbridge.plan.kingdoms.KingdomsHook; import com.djrapitops.pluginbridge.plan.litebans.LiteBansHook; import com.djrapitops.pluginbridge.plan.mcmmo.McmmoHook; import com.djrapitops.pluginbridge.plan.protocolsupport.ProtocolSupportHook; @@ -30,6 +31,7 @@ import main.java.com.djrapitops.plan.data.additional.HookHandler; * @see FactionsHook * @see GriefPreventionHook * @see JobsHook + * @see KingdomsHook * @see LiteBansHook * @see McmmoHook * @see SuperbVoteHook @@ -55,6 +57,7 @@ public class Bridge { new FactionsHook(h), new GriefPreventionHook(h), new JobsHook(h), + new KingdomsHook(h), new LiteBansHook(h), new McmmoHook(h), new SuperbVoteHook(h), diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomAccordionCreator.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomAccordionCreator.java new file mode 100644 index 000000000..d48955595 --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomAccordionCreator.java @@ -0,0 +1,98 @@ +/* + * 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.kingdoms; + +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 org.kingdoms.constants.kingdom.OfflineKingdom; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Creates a Town Accordion for Towny tab. + * + * @author Rsl1122 + */ +public class KingdomAccordionCreator { + + public static String createAccordion(Map kingdoms) { + StringBuilder html = new StringBuilder("
"); + + ServerProfile serverProfile = Analysis.getServerProfile(); + List players = serverProfile != null ? serverProfile.getPlayers() : new ArrayList<>(); + + for (Map.Entry entry : kingdoms.entrySet()) { + String kingdomName = entry.getKey(); + + OfflineKingdom kingdom = entry.getValue(); + String kingName = kingdom.getKingName(); + String kingdomLore = kingdom.getKingdomLore(); + + int might = kingdom.getMight(); + int resourcePoints = kingdom.getResourcepoints(); + + List members = kingdom.getMembersList(); + int residentsNum = members.size(); + + 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), kingName); + + String htmlID = "kingdom_" + kingdomName.replace(" ", "-"); + + // Accordion panel header + html.append("
") + .append("
") + .append("

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

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

").append(kingdomLore).append("

") + .append("

Mayor ").append(kingName).append("

") + // Playtime + .append("

Members").append(residentsNum).append("

") + .append("

Might").append(might).append("

") + .append("

Resources").append(resourcePoints).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/kingdoms/KingdomsData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomsData.java new file mode 100644 index 000000000..0ad11e704 --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomsData.java @@ -0,0 +1,73 @@ +/* + * 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.kingdoms; + +import main.java.com.djrapitops.plan.Plan; +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 org.kingdoms.constants.kingdom.OfflineKingdom; +import org.kingdoms.constants.player.OfflineKingdomPlayer; +import org.kingdoms.manager.game.GameManagement; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * PluginData for Kingdoms and Kingdoms+ plugins. + * + * @author Rsl1122 + */ +public class KingdomsData extends PluginData { + + public KingdomsData() { + super(ContainerSize.TAB, "Kingdoms"); + super.setIconColor("amber"); + super.setPluginIcon("shield"); + } + + @Override + public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) throws Exception { + OfflineKingdomPlayer kingdomPlayer = GameManagement.getPlayerManager().getOfflineKingdomPlayer(uuid); + String kingdomName = kingdomPlayer.getKingdomName(); + + if (kingdomName == null) { + inspectContainer.addValue(getWithIcon("Kingdom", "shield", "amber"), "No Kingdom"); + } else { + OfflineKingdom kingdom = GameManagement.getKingdomManager().getOfflineKingdom(kingdomName); + if (kingdom != null) { + String king = kingdom.getKingName(); + String link = Html.LINK.parse(Plan.getPlanAPI().getPlayerInspectPageLink(king), king); + inspectContainer.addValue(getWithIcon("Kingdom", "shield", "amber"), kingdomName); + inspectContainer.addValue(" " + getWithIcon("King", "user", "amber"), link); + } + } + + return inspectContainer; + } + + @Override + public AnalysisContainer getServerData(Collection collection, AnalysisContainer analysisContainer) throws Exception { + Map kingdoms = GameManagement.getKingdomManager().getKingdomList(); + + analysisContainer.addValue(getWithIcon("Kingdoms", "shield", "amber"), kingdoms.size()); + analysisContainer.addHtml("kingdomsAccordion", KingdomAccordionCreator.createAccordion(kingdoms)); + + Map userKingDoms = new HashMap<>(); + for (Map.Entry entry : kingdoms.entrySet()) { + String kingdom = entry.getKey(); + for (UUID member : entry.getValue().getMembersList()) { + userKingDoms.put(member, kingdom); + } + } + analysisContainer.addPlayerTableValues(getWithIcon("Kingdom", "shield"), userKingDoms); + + return analysisContainer; + } +} \ No newline at end of file diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomsHook.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomsHook.java new file mode 100644 index 000000000..5a571a073 --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/kingdoms/KingdomsHook.java @@ -0,0 +1,27 @@ +/* + * 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.kingdoms; + +import com.djrapitops.pluginbridge.plan.Hook; +import main.java.com.djrapitops.plan.data.additional.HookHandler; + +/** + * Hook for Kingdoms and Kingdoms+ plugins. + * + * @author Rsl1122 + */ +public class KingdomsHook extends Hook { + public KingdomsHook(HookHandler hookHandler) { + super("org.kingdoms.main.Kingdoms", hookHandler); + } + + @Override + public void hook() throws NoClassDefFoundError { + if (!enabled) { + return; + } + addPluginDataSource(new KingdomsData()); + } +} \ No newline at end of file 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 index c95570388..2660f4895 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownAccordionCreator.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/towny/TownAccordionCreator.java @@ -91,7 +91,7 @@ public class TownAccordionCreator { // Playtime .append("

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

") .append("

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

") - .append("

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

") + .append("

Location").append(coordinates).append("

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