Role updates.

* Adds recruit role below the normal role.
* Adds /f promote and demote. Access to this command defaults to moderator if not set in /f perm
* Default role is still set to recruite. Will have to /f demote to set players to that rank.
This commit is contained in:
Trent Hensler 2018-01-04 17:17:26 -08:00
parent 4852ac6be4
commit 4db185e3ee
15 changed files with 152 additions and 16 deletions

View File

@ -36,6 +36,8 @@ public class Conf {
public static String prefixAdmin = "**"; public static String prefixAdmin = "**";
public static String prefixMod = "*"; public static String prefixMod = "*";
public static String prefixRecruit = "-";
public static String prefixNormal = "+";
public static int factionTagLengthMin = 3; public static int factionTagLengthMin = 3;
public static int factionTagLengthMax = 10; public static int factionTagLengthMax = 10;

View File

@ -138,7 +138,7 @@ public interface Faction extends EconomyParticipator {
public int getDeaths(); public int getDeaths();
public Access hasPerm(FPlayer fPlayer, Action perm); public Access getAccess(FPlayer fPlayer, Action perm);
public void setPermission(Relation relation, Action action, Access access); public void setPermission(Relation relation, Action action, Access access);

View File

@ -0,0 +1,9 @@
package com.massivecraft.factions.cmd;
public class CmdDemote extends FPromoteCommand {
public CmdDemote() {
aliases.add("demote");
this.relative = -1;
}
}

View File

@ -0,0 +1,10 @@
package com.massivecraft.factions.cmd;
public class CmdPromote extends FPromoteCommand {
public CmdPromote() {
aliases.add("promote");
aliases.add("promo");
this.relative = 1;
}
}

View File

@ -71,6 +71,8 @@ public class FCmdRoot extends FCommand {
public CmdTop cmdTop = new CmdTop(); public CmdTop cmdTop = new CmdTop();
public CmdAHome cmdAHome = new CmdAHome(); public CmdAHome cmdAHome = new CmdAHome();
public CmdPerm cmdPerm = new CmdPerm(); public CmdPerm cmdPerm = new CmdPerm();
public CmdPromote cmdPromote = new CmdPromote();
public CmdDemote cmdDemote = new CmdDemote();
public FCmdRoot() { public FCmdRoot() {
super(); super();
@ -156,6 +158,8 @@ public class FCmdRoot extends FCommand {
this.addSubCommand(this.cmdTop); this.addSubCommand(this.cmdTop);
this.addSubCommand(this.cmdAHome); this.addSubCommand(this.cmdAHome);
this.addSubCommand(this.cmdPerm); this.addSubCommand(this.cmdPerm);
this.addSubCommand(this.cmdPromote);
this.addSubCommand(this.cmdDemote);
if (P.p.isHookedPlayervaults()) { if (P.p.isHookedPlayervaults()) {
P.p.log("Found playervaults hook, adding /f vault and /f setmaxvault commands."); P.p.log("Found playervaults hook, adding /f vault and /f setmaxvault commands.");
this.addSubCommand(new CmdSetMaxVaults()); this.addSubCommand(new CmdSetMaxVaults());

View File

@ -0,0 +1,76 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.util.TL;
public class FPromoteCommand extends FCommand {
public int relative = 0;
public FPromoteCommand() {
super();
this.optionalArgs.put("player name", "name");
//this.optionalArgs.put("", "");
this.permission = Permission.MOD.node;
this.disableOnLock = true;
senderMustBePlayer = true;
senderMustBeMember = true;
senderMustBeModerator = false;
senderMustBeAdmin = false;
}
@Override
public void perform() {
FPlayer target = this.argAsBestFPlayerMatch(0);
if (target == null) {
msg(TL.GENERIC_NOPLAYERFOUND, this.argAsString(0));
return;
}
if (!target.getFaction().equals(myFaction)) {
msg(TL.COMMAND_PROMOTE_WRONGFACTION, target.getName());
return;
}
Access access = myFaction.getAccess(fme, Action.PROMOTE);
// Well this is messy.
if (access == null || access == Access.UNDEFINED) {
if (!assertMinRole(Role.MODERATOR)) {
msg(TL.COMMAND_NOACCESS);
return;
}
} else if (access == Access.DENY) {
msg(TL.COMMAND_NOACCESS);
return;
}
Role current = target.getRole();
Role promotion = Role.getRelative(current, +relative);
if (promotion == null) {
fme.msg(TL.COMMAND_PROMOTE_NOTTHATPLAYER);
return;
}
// Success!
target.setRole(promotion);
if (target.isOnline()) {
target.msg(TL.COMMAND_PROMOTE_TARGET, promotion.nicename);
}
target.msg(TL.COMMAND_PROMOTE_SUCCESS, target.getName(), promotion.nicename);
}
@Override
public TL getUsageTranslation() {
return TL.COMMAND_PROMOTE_DESCRIPTION;
}
}

View File

@ -252,7 +252,7 @@ public class FactionsBlockListener implements Listener {
} }
} }
Access access = otherFaction.hasPerm(me, Action.valueOf(action)); Access access = otherFaction.getAccess(me, Action.valueOf(action));
if (access != null && access != Access.UNDEFINED) { if (access != null && access != Access.UNDEFINED) {
// TODO: Update this once new access values are added other than just allow / deny. // TODO: Update this once new access values are added other than just allow / deny.
return access == Access.ALLOW; return access == Access.ALLOW;

View File

@ -355,7 +355,7 @@ public class FactionsPlayerListener implements Listener {
Relation rel = myFaction.getRelationTo(otherFaction); Relation rel = myFaction.getRelationTo(otherFaction);
Access access = otherFaction.hasPerm(me, com.massivecraft.factions.zcore.fperms.Action.valueOf("items")); Access access = otherFaction.getAccess(me, com.massivecraft.factions.zcore.fperms.Action.valueOf("items"));
if (access != null && access != Access.UNDEFINED) { if (access != null && access != Access.UNDEFINED) {
// TODO: Update this once new access values are added other than just allow / deny. // TODO: Update this once new access values are added other than just allow / deny.
return access == Access.ALLOW; return access == Access.ALLOW;
@ -422,7 +422,7 @@ public class FactionsPlayerListener implements Listener {
} }
} }
Access access = otherFaction.hasPerm(me, com.massivecraft.factions.zcore.fperms.Action.BUILD); Access access = otherFaction.getAccess(me, com.massivecraft.factions.zcore.fperms.Action.BUILD);
if (access != null && access != Access.UNDEFINED) { if (access != null && access != Access.UNDEFINED) {
// TODO: Update this once new access values are added other than just allow / deny. // TODO: Update this once new access values are added other than just allow / deny.
return access == Access.ALLOW; return access == Access.ALLOW;

View File

@ -4,9 +4,10 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
public enum Role { public enum Role {
ADMIN(2, TL.ROLE_ADMIN), ADMIN(3, TL.ROLE_ADMIN),
MODERATOR(1, TL.ROLE_MODERATOR), MODERATOR(2, TL.ROLE_MODERATOR),
NORMAL(0, TL.ROLE_NORMAL); NORMAL(1, TL.ROLE_NORMAL),
RECRUIT(0, TL.ROLE_RECRUIT);
public final int value; public final int value;
public final String nicename; public final String nicename;
@ -26,6 +27,24 @@ public enum Role {
return this.value <= role.value; return this.value <= role.value;
} }
public static Role getRelative(Role role, int relative) {
return Role.getByValue(role.value + relative);
}
public static Role getByValue(int value) {
switch (value) {
case 0:
return RECRUIT;
case 1:
return NORMAL;
case 2:
return MODERATOR;
case 3: return ADMIN;
}
return null;
}
@Override @Override
public String toString() { public String toString() {
return this.nicename; return this.nicename;
@ -44,6 +63,14 @@ public enum Role {
return Conf.prefixMod; return Conf.prefixMod;
} }
if (this == Role.NORMAL) {
return Conf.prefixNormal;
}
if (this == Role.RECRUIT) {
return Conf.prefixRecruit;
}
return ""; return "";
} }
} }

View File

@ -17,6 +17,7 @@ public enum Action {
TERRITORY("territory"), TERRITORY("territory"),
ACCESS("access"), ACCESS("access"),
DISBAND("disband"), DISBAND("disband"),
PROMOTE("promote"),
PERMS("perms"); PERMS("perms");
private String name; private String name;

View File

@ -323,7 +323,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
// -------------------------------------------- // // -------------------------------------------- //
public Access hasPerm(FPlayer fPlayer, Action action) { public Access getAccess(FPlayer fPlayer, Action action) {
Relation relation = fPlayer.getRelationTo(this); Relation relation = fPlayer.getRelationTo(this);
Map<Action, Access> accessMap = permissions.get(relation); Map<Action, Access> accessMap = permissions.get(relation);
if (accessMap != null && accessMap.containsKey(action)) { if (accessMap != null && accessMap.containsKey(action)) {
@ -569,12 +569,10 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
public boolean addFPlayer(FPlayer fplayer) { public boolean addFPlayer(FPlayer fplayer) {
return !this.isPlayerFreeType() && fplayers.add(fplayer); return !this.isPlayerFreeType() && fplayers.add(fplayer);
} }
public boolean removeFPlayer(FPlayer fplayer) { public boolean removeFPlayer(FPlayer fplayer) {
return !this.isPlayerFreeType() && fplayers.remove(fplayer); return !this.isPlayerFreeType() && fplayers.remove(fplayer);
} }
public int getSize() { public int getSize() {

View File

@ -375,6 +375,8 @@ public enum TL {
COMMAND_PERMANENT_REVOKE("removed permanent status from"), COMMAND_PERMANENT_REVOKE("removed permanent status from"),
COMMAND_PERMANENT_YOURS("%1$s has %2$s your faction"), COMMAND_PERMANENT_YOURS("%1$s has %2$s your faction"),
COMMAND_PERMANENT_OTHER("%s<i> has %s the faction '%s<i>'."), COMMAND_PERMANENT_OTHER("%s<i> has %s the faction '%s<i>'."),
COMMAND_PROMOTE_TARGET("You've been promoted to %1$s"),
COMMAND_PROMOTE_SUCCESS("You successfully promoted %1$s to %2$s"),
COMMAND_PERMANENTPOWER_DESCRIPTION("Toggle faction power permanence"), //TODO: This a real word? COMMAND_PERMANENTPOWER_DESCRIPTION("Toggle faction power permanence"), //TODO: This a real word?
COMMAND_PERMANENTPOWER_GRANT("added permanentpower status to"), COMMAND_PERMANENTPOWER_GRANT("added permanentpower status to"),
@ -382,6 +384,12 @@ public enum TL {
COMMAND_PERMANENTPOWER_SUCCESS("<i>You %s <h>%s<i>."), COMMAND_PERMANENTPOWER_SUCCESS("<i>You %s <h>%s<i>."),
COMMAND_PERMANENTPOWER_FACTION("%s<i> %s your faction"), COMMAND_PERMANENTPOWER_FACTION("%s<i> %s your faction"),
COMMAND_PROMOTE_DESCRIPTION("/f promote <name>"),
COMMAND_PROMOTE_WRONGFACTION("%1$s is not part of your faction."),
COMMAND_NOACCESS("You don't have access to that."),
COMMAND_PROMOTE_NOTTHATPLAYER("That player cannot be promoted."),
COMMAND_POWER_TOSHOW("to show player power info"), COMMAND_POWER_TOSHOW("to show player power info"),
COMMAND_POWER_FORSHOW("for showing player power info"), COMMAND_POWER_FORSHOW("for showing player power info"),
COMMAND_POWER_POWER("%1$s<a> - Power / Maxpower: <i>%2$d / %3$d %4$s"), COMMAND_POWER_POWER("%1$s<a> - Power / Maxpower: <i>%2$d / %3$d %4$s"),
@ -657,6 +665,7 @@ public enum TL {
ROLE_ADMIN("admin"), ROLE_ADMIN("admin"),
ROLE_MODERATOR("moderator"), ROLE_MODERATOR("moderator"),
ROLE_NORMAL("normal member"), ROLE_NORMAL("normal member"),
ROLE_RECRUIT("recruit"),
/** /**
* Region types. * Region types.