Allow players to monitor joins and leaves of their faction members.

Larger servers tend to have join and leave messages disabled for the entire server. A few have requested to allow faction members to monitor join and leave messages of their own members.
This commit is contained in:
drtshock 2015-01-06 16:06:46 -06:00
parent d36e88f2c0
commit 8300b2ff2b
9 changed files with 71 additions and 3 deletions

View File

@ -32,6 +32,10 @@ public interface FPlayer extends EconomyParticipator {
public void setFaction(Faction faction); public void setFaction(Faction faction);
public void setMonitorJoins(boolean monitor);
public boolean isMonitoringJoins();
public Role getRole(); public Role getRole();
public void setRole(Role role); public void setRole(Role role);

View File

@ -0,0 +1,25 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TL;
public class CmdLogins extends FCommand {
public CmdLogins() {
super();
this.aliases.add("login");
this.aliases.add("logins");
this.aliases.add("logout");
this.aliases.add("logouts");
this.senderMustBePlayer = true;
this.senderMustBeMember = true;
this.permission = Permission.MONITOR_LOGINS.node;
}
@Override
public void perform() {
boolean monitor = fme.isMonitoringJoins();
fme.msg(TL.COMMAND_LOGINS_TOGGLE, String.valueOf(!monitor));
fme.setMonitorJoins(!monitor);
}
}

View File

@ -61,6 +61,7 @@ public class FCmdRoot extends FCommand {
public CmdSetFWarp cmdSetFWarp = new CmdSetFWarp(); public CmdSetFWarp cmdSetFWarp = new CmdSetFWarp();
public CmdDelFWarp cmdDelFWarp = new CmdDelFWarp(); public CmdDelFWarp cmdDelFWarp = new CmdDelFWarp();
public CmdModifyPower cmdModifyPower = new CmdModifyPower(); public CmdModifyPower cmdModifyPower = new CmdModifyPower();
public CmdLogins cmdLogins = new CmdLogins();
public FCmdRoot() { public FCmdRoot() {
super(); super();
@ -138,6 +139,7 @@ public class FCmdRoot extends FCommand {
this.addSubCommand(this.cmdSetFWarp); this.addSubCommand(this.cmdSetFWarp);
this.addSubCommand(this.cmdDelFWarp); this.addSubCommand(this.cmdDelFWarp);
this.addSubCommand(this.cmdModifyPower); this.addSubCommand(this.cmdModifyPower);
this.addSubCommand(this.cmdLogins);
} }
@Override @Override

View File

@ -10,6 +10,7 @@ import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation; import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role; import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.VisualizeUtil; import com.massivecraft.factions.util.VisualizeUtil;
import com.massivecraft.factions.zcore.util.TL;
import com.massivecraft.factions.zcore.util.TextUtil; import com.massivecraft.factions.zcore.util.TextUtil;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@ -64,6 +65,15 @@ public class FactionsPlayerListener implements Listener {
FScoreboard.get(me).setDefaultSidebar(new FDefaultSidebar(), P.p.getConfig().getInt("default-update-interval", 20)); FScoreboard.get(me).setDefaultSidebar(new FDefaultSidebar(), P.p.getConfig().getInt("default-update-interval", 20));
} }
FScoreboard.get(me).setSidebarVisibility(P.p.cmdBase.cmdSB.showBoard(me)); FScoreboard.get(me).setSidebarVisibility(P.p.cmdBase.cmdSB.showBoard(me));
Faction myFaction = me.getFaction();
if (!myFaction.isNone()) {
for (FPlayer player : myFaction.getFPlayersWhereOnline(true)) {
if (player != me && player.isMonitoringJoins()) {
player.msg(TL.FACTION_LOGIN, me.getName());
}
}
}
} }
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
@ -76,10 +86,18 @@ public class FactionsPlayerListener implements Listener {
me.setLastLoginTime(System.currentTimeMillis()); me.setLastLoginTime(System.currentTimeMillis());
Faction myFaction = me.getFaction(); Faction myFaction = me.getFaction();
if (myFaction != null) { if (!myFaction.isNone()) {
myFaction.memberLoggedOff(); myFaction.memberLoggedOff();
} }
if (!myFaction.isNone()) {
for (FPlayer player : myFaction.getFPlayersWhereOnline(true)) {
if (player != me && player.isMonitoringJoins()) {
player.msg(TL.FACTION_LOGOUT, me.getName());
}
}
}
FScoreboard.remove(me); FScoreboard.remove(me);
} }

View File

@ -45,6 +45,7 @@ public enum Permission {
MONEY_F2F("money.f2f"), MONEY_F2F("money.f2f"),
MONEY_F2P("money.f2p"), MONEY_F2P("money.f2p"),
MONEY_P2F("money.p2f"), MONEY_P2F("money.p2f"),
MONITOR_LOGINS("monitorlogins"),
NO_BOOM("noboom"), NO_BOOM("noboom"),
OPEN("open"), OPEN("open"),
OWNER("owner"), OWNER("owner"),

View File

@ -66,6 +66,8 @@ public abstract class MemoryFPlayer implements FPlayer {
protected String id; protected String id;
protected boolean monitorJoins;
//private transient String playerName; //private transient String playerName;
protected transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked? protected transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked?
@ -113,6 +115,14 @@ public abstract class MemoryFPlayer implements FPlayer {
this.factionId = faction.getId(); this.factionId = faction.getId();
} }
public void setMonitorJoins(boolean monitor) {
this.monitorJoins = monitor;
}
public boolean isMonitoringJoins() {
return this.monitorJoins;
}
public Role getRole() { public Role getRole() {
return this.role; return this.role;
} }

View File

@ -246,6 +246,8 @@ public enum TL {
COMMAND_LOCK_LOCKED("<i>Factions is now locked"), COMMAND_LOCK_LOCKED("<i>Factions is now locked"),
COMMAND_LOCK_UNLOCKED("<i>Factions in now unlocked"), COMMAND_LOCK_UNLOCKED("<i>Factions in now unlocked"),
COMMAND_LOGINS_TOGGLE("<i>Set login / logout notifications for Faction members to: <a>%s"),
COMMAND_MAP_TOSHOW("to show the map"), COMMAND_MAP_TOSHOW("to show the map"),
COMMAND_MAP_FORSHOW("for showing the map"), COMMAND_MAP_FORSHOW("for showing the map"),
COMMAND_MAP_UPDATE_ENABLED("<i>Map auto update <green>ENABLED."), COMMAND_MAP_UPDATE_ENABLED("<i>Map auto update <green>ENABLED."),
@ -453,7 +455,10 @@ public enum TL {
SAFEZONE("safezone", "&6Safezone"), SAFEZONE("safezone", "&6Safezone"),
SAFEZONE_DESCRIPTION("safezone-description", "Free from pvp and monsters."), SAFEZONE_DESCRIPTION("safezone-description", "Free from pvp and monsters."),
TOGGLE_SB("toggle-sb", "You now have scoreboards set to {value}"), TOGGLE_SB("toggle-sb", "You now have scoreboards set to {value}"),
DEFAULT_PREFIX("default-prefix", "{relationcolor}[{faction}] &r"); DEFAULT_PREFIX("default-prefix", "{relationcolor}[{faction}] &r"),
FACTION_LOGIN("faction-login", "&e%s &9logged in."),
FACTION_LOGOUT("faction-logout", "&e%s &9logged out.."),
;
private String path; private String path;
private String def; private String def;

View File

@ -61,7 +61,7 @@ public class TextUtil {
string = parseColorAmp(string); string = parseColorAmp(string);
string = parseColorAcc(string); string = parseColorAcc(string);
string = parseColorTags(string); string = parseColorTags(string);
return string; return ChatColor.translateAlternateColorCodes('&', string);
} }
public static String parseColorAmp(String string) { public static String parseColorAmp(String string) {

View File

@ -90,6 +90,7 @@ permissions:
factions.scoreboard: true factions.scoreboard: true
factions.showinvites: true factions.showinvites: true
factions.seechunk: true factions.seechunk: true
factions.monitorlogins: true
factions.admin: factions.admin:
description: hand over your admin rights description: hand over your admin rights
factions.admin.any: factions.admin.any:
@ -241,3 +242,5 @@ permissions:
description: access your faction warps description: access your faction warps
factions.modifypower: factions.modifypower:
description: modify other player's power description: modify other player's power
factions.monitorlogins:
description: monitor join and leaves of faction members