diff --git a/src/main/java/com/massivecraft/factions/Faction.java b/src/main/java/com/massivecraft/factions/Faction.java index d466cf5c..098e1f37 100644 --- a/src/main/java/com/massivecraft/factions/Faction.java +++ b/src/main/java/com/massivecraft/factions/Faction.java @@ -217,6 +217,8 @@ public interface Faction extends EconomyParticipator { public Set getFPlayersWhereOnline(boolean online); + public Set getFPlayersWhereOnline(boolean online, FPlayer viewer); + public FPlayer getFPlayerAdmin(); public ArrayList getFPlayersWhereRole(Role role); diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java index d6830e5a..5ae012b3 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java @@ -696,6 +696,33 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { return ret; } + public Set getFPlayersWhereOnline(boolean online, FPlayer viewer) { + Set ret = new HashSet<>(); + if (!this.isNormal()) { + return ret; + } + + for (FPlayer viewed : fplayers) { + // Add if their online status is what we want + if (viewed.isOnline() == online) { + // If we want online, check to see if we are able to see this player + // This checks if they are in vanish. + if (online + && viewed.getPlayer() != null + && viewer.getPlayer() != null + && viewer.getPlayer().canSee(viewed.getPlayer())) { + ret.add(viewed); + // If we want offline, just add them. + // Prob a better way to do this but idk. + } else if (!online) { + ret.add(viewed); + } + } + } + + return ret; + } + public FPlayer getFPlayerAdmin() { if (!this.isNormal()) { return null; diff --git a/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java b/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java index c3a32269..06001322 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java @@ -225,7 +225,12 @@ public enum TagReplacer { case TRUCES_COUNT: return String.valueOf(fac.getRelationCount(Relation.TRUCE)); case ONLINE_COUNT: - return String.valueOf(fac.getOnlinePlayers().size()); + if (fp != null && fp.isOnline()) { + return String.valueOf(fac.getFPlayersWhereOnline(true, fp).size()); + } else { + // Only console should ever get here. + return String.valueOf(fac.getFPlayers().size()); + } case OFFLINE_COUNT: return String.valueOf(fac.getFPlayers().size() - fac.getOnlinePlayers().size()); case FACTION_SIZE: diff --git a/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java b/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java index 441eee90..cc016917 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java @@ -199,7 +199,7 @@ public class TagUtil { case ONLINE_LIST: FancyMessage currentOnline = P.p.txt.parseFancy(prefix); boolean firstOnline = true; - for (FPlayer p : MiscUtil.rankOrder(target.getFPlayersWhereOnline(true))) { + for (FPlayer p : MiscUtil.rankOrder(target.getFPlayersWhereOnline(true, fme))) { if (fme.getPlayer() != null && !fme.getPlayer().canSee(p.getPlayer())) { continue; // skip }