package com.massivecraft.factions.cmd; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import com.massivecraft.factions.ConfServer; import com.massivecraft.factions.cmd.arg.ARFaction; import com.massivecraft.factions.entity.UPlayer; import com.massivecraft.factions.entity.Faction; import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.FFlag; import com.massivecraft.factions.Perm; import com.massivecraft.factions.Rel; import com.massivecraft.mcore.cmd.req.ReqHasPerm; import com.massivecraft.mcore.mixin.Mixin; import com.massivecraft.mcore.money.Money; import com.massivecraft.mcore.util.Txt; public class CmdFactionsShow extends FCommand { public CmdFactionsShow() { this.addAliases("show", "who"); this.addOptionalArg("faction", "you"); this.addRequirements(ReqHasPerm.get(Perm.SHOW.node)); } @Override public void perform() { Faction faction = this.arg(0, ARFaction.get(myFaction), myFaction); if (faction == null) return; Collection leaders = faction.getUPlayersWhereRole(Rel.LEADER); Collection officers = faction.getUPlayersWhereRole(Rel.OFFICER); Collection normals = faction.getUPlayersWhereRole(Rel.MEMBER); Collection recruits = faction.getUPlayersWhereRole(Rel.RECRUIT); msg(Txt.titleize(faction.getTag(fme))); msg("Description: %s", faction.getDescription()); // Display important flags // TODO: Find the non default flags, and display them instead. if (faction.getFlag(FFlag.PERMANENT)) { msg("This faction is permanent - remaining even with no members."); } if (faction.getFlag(FFlag.PEACEFUL)) { msg("This faction is peaceful - in truce with everyone."); } msg("Joining: "+(faction.isOpen() ? "no invitation is needed" : "invitation is required")); double powerBoost = faction.getPowerBoost(); String boost = (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? " (bonus: " : " (penalty: ") + powerBoost + ")"; msg("Land / Power / Maxpower: %d/%d/%d %s", faction.getLandCount(), faction.getPowerRounded(), faction.getPowerMaxRounded(), boost); // show the land value if (Econ.isEnabled(faction)) { double value = Econ.calculateTotalLandValue(faction.getLandCount()); double refund = value * ConfServer.econClaimRefundMultiplier; if (value > 0) { String stringValue = Money.format(faction, value); String stringRefund = (refund > 0.0) ? (" ("+Money.format(faction, refund)+" depreciated)") : ""; msg("Total land value: " + stringValue + stringRefund); } //Show bank contents if(ConfServer.bankEnabled) { msg("Bank contains: "+Money.format(faction, Money.get(faction))); } } String sepparator = Txt.parse("")+", "; // List the relations to other factions Map> relationTags = faction.getFactionTagsPerRelation(fme, true); if (faction.getFlag(FFlag.PEACEFUL)) { sendMessage(Txt.parse("In Truce with: *everyone*")); } else { sendMessage(Txt.parse("In Truce with: ") + Txt.implode(relationTags.get(Rel.TRUCE), sepparator)); } sendMessage(Txt.parse("Allied to: ") + Txt.implode(relationTags.get(Rel.ALLY), sepparator)); sendMessage(Txt.parse("Enemies: ") + Txt.implode(relationTags.get(Rel.ENEMY), sepparator)); // List the members... List memberOnlineNames = new ArrayList(); List memberOfflineNames = new ArrayList(); for (UPlayer follower : leaders) { if (follower.isOnline() && Mixin.isVisible(me, follower.getId())) { memberOnlineNames.add(follower.getNameAndTitle(fme)); } else { memberOfflineNames.add(follower.getNameAndTitle(fme)); } } for (UPlayer follower : officers) { if (follower.isOnline() && Mixin.isVisible(me, follower.getId())) { memberOnlineNames.add(follower.getNameAndTitle(fme)); } else { memberOfflineNames.add(follower.getNameAndTitle(fme)); } } for (UPlayer follower : normals) { if (follower.isOnline() && Mixin.isVisible(me, follower.getId())) { memberOnlineNames.add(follower.getNameAndTitle(fme)); } else { memberOfflineNames.add(follower.getNameAndTitle(fme)); } } for (UPlayer follower : recruits) { if (follower.isOnline()) { memberOnlineNames.add(follower.getNameAndTitle(fme)); } else { memberOfflineNames.add(follower.getNameAndTitle(fme)); } } sendMessage(Txt.parse("Members online: ") + Txt.implode(memberOnlineNames, sepparator)); sendMessage(Txt.parse("Members offline: ") + Txt.implode(memberOfflineNames, sepparator)); } }