package com.massivecraft.factions.cmd; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.massivecraft.factions.cmd.arg.ARFaction; import com.massivecraft.factions.cmd.req.ReqFactionsEnabled; import com.massivecraft.factions.entity.UConf; import com.massivecraft.factions.entity.UPlayer; import com.massivecraft.factions.entity.Faction; import com.massivecraft.factions.event.FactionsEventChunkChangeType; 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.TimeDiffUtil; import com.massivecraft.mcore.util.TimeUnit; import com.massivecraft.mcore.util.Txt; public class CmdFactionsShow extends FCommand { public CmdFactionsShow() { this.addAliases("s", "show", "who"); this.addOptionalArg("faction", "you"); this.addRequirements(ReqFactionsEnabled.get()); this.addRequirements(ReqHasPerm.get(Perm.SHOW.node)); } @Override public void perform() { Faction faction = this.arg(0, ARFaction.get(usenderFaction), usenderFaction); if (faction == null) return; UConf uconf = UConf.get(faction); // INFO: Description msg(Txt.titleize(faction.getName(usender))); msg("Description: %s", faction.getDescription()); // INFO: Age long ageMillis = faction.getCreatedAtMillis() - System.currentTimeMillis(); LinkedHashMap ageUnitcounts = TimeDiffUtil.limit(TimeDiffUtil.unitcounts(ageMillis, TimeUnit.getAllButMillis()), 3); String ageString = TimeDiffUtil.formatedVerboose(ageUnitcounts, ""); msg("Age: %s", ageString); // 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."); } // INFO: Open msg("Open: "+(faction.isOpen() ? "Yes - anyone can join" : "No - only invited people can join")); // INFO: Power 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)) { long landCount = faction.getLandCount(); for (FactionsEventChunkChangeType type : FactionsEventChunkChangeType.values()) { Double money = uconf.econChunkCost.get(type); if (money == null) money = 0D; money *= landCount; String word = null; if (money > 0) { word = "cost"; } else { word = "reward"; money *= -1; } msg("Total land %s %s: %s", type.toString().toLowerCase(), word, Money.format(faction, money)); } // Show bank contents if (UConf.get(faction).bankEnabled) { msg("Bank contains: "+Money.format(faction, Money.get(faction))); } } String sepparator = Txt.parse("")+", "; // List the relations to other factions Map> relationNames = faction.getFactionNamesPerRelation(usender, true); if (faction.getFlag(FFlag.PEACEFUL)) { sendMessage(Txt.parse("In Truce with: *everyone*")); } else { sendMessage(Txt.parse("In Truce with: ") + Txt.implode(relationNames.get(Rel.TRUCE), sepparator)); } sendMessage(Txt.parse("Allied to: ") + Txt.implode(relationNames.get(Rel.ALLY), sepparator)); sendMessage(Txt.parse("Enemies: ") + Txt.implode(relationNames.get(Rel.ENEMY), sepparator)); // List the members... Collection leaders = faction.getUPlayersWhereRole(Rel.LEADER); Collection officers = faction.getUPlayersWhereRole(Rel.OFFICER); Collection normals = faction.getUPlayersWhereRole(Rel.MEMBER); Collection recruits = faction.getUPlayersWhereRole(Rel.RECRUIT); List memberOnlineNames = new ArrayList(); List memberOfflineNames = new ArrayList(); for (UPlayer follower : leaders) { if (follower.isOnline() && Mixin.isVisible(me, follower.getId())) { memberOnlineNames.add(follower.getNameAndTitle(usender)); } else { memberOfflineNames.add(follower.getNameAndTitle(usender)); } } for (UPlayer follower : officers) { if (follower.isOnline() && Mixin.isVisible(me, follower.getId())) { memberOnlineNames.add(follower.getNameAndTitle(usender)); } else { memberOfflineNames.add(follower.getNameAndTitle(usender)); } } for (UPlayer follower : normals) { if (follower.isOnline() && Mixin.isVisible(me, follower.getId())) { memberOnlineNames.add(follower.getNameAndTitle(usender)); } else { memberOfflineNames.add(follower.getNameAndTitle(usender)); } } for (UPlayer follower : recruits) { if (follower.isOnline()) { memberOnlineNames.add(follower.getNameAndTitle(usender)); } else { memberOfflineNames.add(follower.getNameAndTitle(usender)); } } sendMessage(Txt.parse("Members online: ") + Txt.implode(memberOnlineNames, sepparator)); sendMessage(Txt.parse("Members offline: ") + Txt.implode(memberOfflineNames, sepparator)); } }